<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Заметки]]></title><description><![CDATA[Linux, Java, ...]]></description><link>https://blog.batsura.ru/</link><image><url>https://blog.batsura.ru/favicon.png</url><title>Заметки</title><link>https://blog.batsura.ru/</link></image><generator>Ghost 5.87</generator><lastBuildDate>Tue, 14 Apr 2026 01:52:59 GMT</lastBuildDate><atom:link href="https://blog.batsura.ru/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Ловушка eventual consistency или uncommitted transaction problem?]]></title><description><![CDATA[<p>&#x418;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x439; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442; &#x44F; &#x43D;&#x430;&#x431;&#x43B;&#x44E;&#x434;&#x430;&#x43B; &#x432;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x438;&#x43D;&#x442;&#x435;&#x433;&#x440;&#x430;&#x446;&#x438;&#x438; &#x441; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x438;&#x437;</p>]]></description><link>https://blog.batsura.ru/lovushka-eventual-consistency-ili-uncommitted-transaction-problem-2/</link><guid isPermaLink="false">6937b5041b232c00017ed7f0</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Tue, 09 Dec 2025 06:15:21 GMT</pubDate><content:encoded><![CDATA[<p>&#x418;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x439; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442; &#x44F; &#x43D;&#x430;&#x431;&#x43B;&#x44E;&#x434;&#x430;&#x43B; &#x432;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x438;&#x43D;&#x442;&#x435;&#x433;&#x440;&#x430;&#x446;&#x438;&#x438; &#x441; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x438;&#x437; &#x432;&#x43D;&#x435;&#x448;&#x43D;&#x438;&#x445; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;. &#x41C;&#x43E;&#x439; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441; &#x434;&#x43E;&#x43B;&#x436;&#x435;&#x43D; &#x431;&#x44B;&#x43B; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x44C; &#x434;&#x432;&#x430; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x430;: &#x441;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x2014; &#x43D;&#x430; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x443;&#x449;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x432; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x43D;&#x435;&#x439; &#x410;&#x421;, &#x437;&#x430;&#x442;&#x435;&#x43C; &#x2014; &#x43D;&#x430; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x435;&#x451; &#x441;&#x442;&#x430;&#x442;&#x443;&#x441;&#x430;. </p><p>&#x41A; &#x43C;&#x43E;&#x435;&#x43C;&#x443; &#x443;&#x434;&#x438;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44E;, &#x43D;&#x435;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x44F; &#x43D;&#x430; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x439; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441; &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x430;&#x43B;&#x441;&#x44F; &#x443;&#x441;&#x43F;&#x435;&#x448;&#x43D;&#x43E; (&#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D; &#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x43E;&#x442;&#x432;&#x435;&#x442;), &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;, &#x43E;&#x442;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x43C;&#x44B;&#x439; &#x441;&#x440;&#x430;&#x437;&#x443; &#x43F;&#x43E;&#x441;&#x43B;&#x435;, &#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x43B; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x443; &#x43E; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x441;&#x443;&#x449;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43D;&#x435; &#x43D;&#x430;&#x439;&#x434;&#x435;&#x43D;&#x430;. &#x41F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C;, &#x435;&#x441;&#x43B;&#x438; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x430;&#x43C;&#x438; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x44F;&#x43B;&#x430;&#x441;&#x44C; &#x43D;&#x435;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x430;&#x44F; &#x437;&#x430;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x430; &#x2014; &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x432; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x43E;&#x442;&#x435;&#x43D; &#x43C;&#x438;&#x43B;&#x43B;&#x438;&#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434; &#x2014; &#x446;&#x435;&#x43F;&#x43E;&#x447;&#x43A;&#x430; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x43B;&#x430; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43A;&#x442;&#x43D;&#x43E;.</p><p>&#x418;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x44B;&#x439; &#x43A;&#x43E;&#x434; &#x442;&#x43E;&#x439; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B; &#x43C;&#x43D;&#x435; &#x43D;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x435;&#x43D;, &#x43D;&#x43E;, &#x441;&#x43A;&#x43E;&#x440;&#x435;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E;, &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x430; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x430; &#x441; &#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x44F;&#x43C;&#x438; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438; &#x432;&#x43D;&#x443;&#x442;&#x440;&#x438; &#x43D;&#x435;&#x451;. &#x412;&#x435;&#x440;&#x43E;&#x44F;&#x442;&#x43D;&#x43E;, &#x43E;&#x442;&#x432;&#x435;&#x442; &#x43D;&#x430; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x443;&#x449;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x43E; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x433;&#x43E; &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x442;&#x440;&#x430;&#x43D;&#x437;&#x430;&#x43A;&#x446;&#x438;&#x438; &#x432; &#x431;&#x430;&#x437;&#x435; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x2014; &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x432;&#x43D;&#x443;&#x442;&#x440;&#x438; &#x442;&#x440;&#x430;&#x43D;&#x437;&#x430;&#x43A;&#x446;&#x438;&#x438;, &#x430; &#x43D;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435;. &#x412; &#x442;&#x430;&#x43A;&#x43E;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;, &#x445;&#x43E;&#x442;&#x44F; &#x43A;&#x43B;&#x438;&#x435;&#x43D;&#x442; &#x443;&#x436;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B; &#x43F;&#x43E;&#x434;&#x442;&#x432;&#x435;&#x440;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x435; &#x43E; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x438;, &#x441;&#x430;&#x43C;&#x430; &#x441;&#x443;&#x449;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x435;&#x449;&#x451; &#x43D;&#x435; &#x432;&#x438;&#x434;&#x43D;&#x430; &#x434;&#x43B;&#x44F; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x439;.</p><p>&#x42D;&#x442;&#x43E;&#x442; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x439; &#x441;&#x442;&#x430;&#x43B; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x438;&#x43C; &#x43D;&#x430;&#x43F;&#x43E;&#x43C;&#x438;&#x43D;&#x430;&#x43D;&#x438;&#x435;&#x43C;: &#x434;&#x430;&#x436;&#x435; &#x43F;&#x440;&#x438; &#x443;&#x441;&#x43F;&#x435;&#x448;&#x43D;&#x43E;&#x43C; &#x43E;&#x442;&#x432;&#x435;&#x442;&#x435; &#x43E;&#x442; API &#x43D;&#x435;&#x43B;&#x44C;&#x437;&#x44F; &#x432;&#x441;&#x435;&#x433;&#x434;&#x430; &#x43F;&#x43E;&#x43B;&#x430;&#x433;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43D;&#x430; &#x43C;&#x433;&#x43D;&#x43E;&#x432;&#x435;&#x43D;&#x43D;&#x443;&#x44E; &#x43A;&#x43E;&#x43D;&#x441;&#x438;&#x441;&#x442;&#x435;&#x43D;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43D;&#x430; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x435; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x430;.</p>]]></content:encoded></item><item><title><![CDATA[IT-термины 2025]]></title><description><![CDATA[<p>&#x422;&#x430;&#x43A; &#x43A;&#x430;&#x43A; &#x433;&#x43E;&#x434; &#x437;&#x430;&#x43A;&#x430;&#x43D;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x440;&#x435;&#x448;&#x438;&#x43B; &#x441;&#x43F;&#x440;&#x43E;&#x441;&#x438;&#x442;&#x44C; &#x443; GPT-5 &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x44B;&#x435; IT &#x442;&#x435;&#x440;&#x43C;</p>]]></description><link>https://blog.batsura.ru/it-tierminy-2025/</link><guid isPermaLink="false">692c67741b232c00017ed7e2</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Sun, 30 Nov 2025 15:51:30 GMT</pubDate><content:encoded><![CDATA[<p>&#x422;&#x430;&#x43A; &#x43A;&#x430;&#x43A; &#x433;&#x43E;&#x434; &#x437;&#x430;&#x43A;&#x430;&#x43D;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x440;&#x435;&#x448;&#x438;&#x43B; &#x441;&#x43F;&#x440;&#x43E;&#x441;&#x438;&#x442;&#x44C; &#x443; GPT-5 &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x44B;&#x435; IT &#x442;&#x435;&#x440;&#x43C;&#x438;&#x43D;&#x44B;. &#x420;&#x430;&#x437;&#x431;&#x438;&#x43B; &#x438;&#x445; &#x43F;&#x43E; &#x433;&#x440;&#x443;&#x43F;&#x43F;&#x430;&#x43C; &#x441; &#x443;&#x43F;&#x43E;&#x440;&#x43E;&#x43C; &#x43D;&#x430; java backend. &#x421;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x438; &#x43F;&#x43E;&#x43C;&#x43E;&#x436;&#x435;&#x442; &#x441;&#x438;&#x43D;&#x445;&#x440;&#x43E;&#x43D;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x430;&#x43C; <a href="https://batsura.ru/it-terms-2025/?ref=blog.batsura.ru">https://batsura.ru/it-terms-2025/</a></p>]]></content:encoded></item><item><title><![CDATA[Как сопоставить комментарии с полями в proto?]]></title><description><![CDATA[<p>&#x41F;&#x43E;&#x43C;&#x43E;&#x433;&#x430;&#x435;&#x442; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; Sonnet 4.5:</p><ul><li><code>4</code> - message_type</li><li><code>2</code> - field &#x432; message</li><li><code>5</code> - enum_type</li><li><code>8</code> - service</li></ul><p>try (InputStream is = ...) {<br>    DescriptorProtos.FileDescriptorSet fileDescriptorSet = <br>        DescriptorProtos.FileDescriptorSet.parseFrom(is);<br>    <br>    for (DescriptorProtos.FileDescriptorProto fileProto : fileDescriptorSet.getFileList()) {<br>        // &#x41F;</p>]]></description><link>https://blog.batsura.ru/kak-sopostavit-kommientarii-s-poliami-v-proto/</link><guid isPermaLink="false">68e378ea85286e0001e51a1d</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Mon, 06 Oct 2025 08:08:35 GMT</pubDate><content:encoded><![CDATA[<p>&#x41F;&#x43E;&#x43C;&#x43E;&#x433;&#x430;&#x435;&#x442; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; Sonnet 4.5:</p><ul><li><code>4</code> - message_type</li><li><code>2</code> - field &#x432; message</li><li><code>5</code> - enum_type</li><li><code>8</code> - service</li></ul><p>try (InputStream is = ...) {<br>    DescriptorProtos.FileDescriptorSet fileDescriptorSet = <br>        DescriptorProtos.FileDescriptorSet.parseFrom(is);<br>    <br>    for (DescriptorProtos.FileDescriptorProto fileProto : fileDescriptorSet.getFileList()) {<br>        // &#x41F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x43C; SourceCodeInfo &#x441; &#x43A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x438;&#x44F;&#x43C;&#x438;<br>        DescriptorProtos.SourceCodeInfo sourceCodeInfo = fileProto.getSourceCodeInfo();<br>        <br>        // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43A;&#x430;&#x440;&#x442;&#x443;: path -&gt; &#x43A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x438;&#x438;<br>        Map&lt;List&lt;Integer&gt;, String&gt; pathToComments = new HashMap&lt;&gt;();<br>        for (DescriptorProtos.SourceCodeInfo.Location location : sourceCodeInfo.getLocationList()) {<br>            if (location.hasLeadingComments() || location.hasTrailingComments()) {<br>                List&lt;Integer&gt; path = location.getPathList();<br>                String comment = location.hasLeadingComments() <br>                    ? location.getLeadingComments() <br>                    : location.getTrailingComments();<br>                pathToComments.put(path, comment);<br>            }<br>        }<br>        <br>        // &#x41E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C; &#x43F;&#x43E;&#x43B;&#x44F; &#x432; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x44F;&#x445;<br>        for (int msgIndex = 0; msgIndex &lt; fileProto.getMessageTypeCount(); msgIndex++) {<br>            DescriptorProtos.DescriptorProto messageProto = fileProto.getMessageType(msgIndex);<br>            <br>            for (int fieldIndex = 0; fieldIndex &lt; messageProto.getFieldCount(); fieldIndex++) {<br>                // Path &#x434;&#x43B;&#x44F; &#x43F;&#x43E;&#x43B;&#x44F;: [4, msgIndex, 2, fieldIndex]<br>                // 4 = message_type, 2 = field<br>               <strong> List&lt;Integer&gt; fieldPath = Arrays.asList(4, msgIndex, 2, fieldIndex);</strong><br>                String comment = pathToComments.get(fieldPath);<br>                <br>                DescriptorProtos.FieldDescriptorProto fieldProto = <br>                    messageProto.getField(fieldIndex);<br>                System.out.println(&quot;Field: &quot; + fieldProto.getName() + <br>                    &quot;, Comment: &quot; + comment);<br>            }<br>        }<br>    }<br>}</p>]]></content:encoded></item><item><title><![CDATA[Интересные вопросы от бота на скрининге]]></title><description><![CDATA[<p>&#x427;&#x435;&#x43C; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x430;&#x44E;&#x442;&#x441;&#x44F; <em>&#xAB;&#x43F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439;&#xBB; (candidate)</em> &#x438; <em>&#xAB;&#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x439;&#xBB; (alternate)</em> &#x43A;&#x43B;&#x44E;</p>]]></description><link>https://blog.batsura.ru/intieriesnyie-voprosy-ot-bota-na-skrininghie/</link><guid isPermaLink="false">68de8f2585286e0001e51a12</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Fri, 03 Oct 2025 12:13:39 GMT</pubDate><content:encoded><![CDATA[<p>&#x427;&#x435;&#x43C; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x430;&#x44E;&#x442;&#x441;&#x44F; <em>&#xAB;&#x43F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439;&#xBB; (candidate)</em> &#x438; <em>&#xAB;&#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x439;&#xBB; (alternate)</em> &#x43A;&#x43B;&#x44E;&#x447;&#x438;.</p><ol><li>&#x41F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x2013; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x442;&#x435;&#x441;&#x442;&#x43E;&#x432;&#x44B;&#x445; &#x446;&#x435;&#x43B;&#x44F;&#x445;, &#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x439; &#x2013; &#x440;&#x435;&#x437;&#x435;&#x440;&#x432;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447;</li><li>&#x41F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x2013; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x441;&#x442;&#x430;&#x442;&#x44C; &#x43F;&#x435;&#x440;&#x432;&#x438;&#x447;&#x43D;&#x44B;&#x43C; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43C;, &#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x439; &#x2013; &#x432;&#x442;&#x43E;&#x440;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x443;&#x43D;&#x438;&#x43A;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447;</li><li>&#x41F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x2013; &#x43A;&#x43B;&#x44E;&#x447; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x44E;&#x442; &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x432;&#x442;&#x43E;&#x440;&#x438;&#x447;&#x43D;&#x43E;&#x433;&#x43E;, &#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x439; &#x2013; &#x443;&#x441;&#x442;&#x430;&#x440;&#x435;&#x432;&#x448;&#x438;&#x439; &#x43A;&#x43B;&#x44E;&#x447;</li><li>&#x41F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x2013; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x43B;&#x44F; &#x438;&#x434;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445;, &#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x439; &#x2013; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x44B;&#x439; &#x434;&#x43B;&#x44F; &#x448;&#x438;&#x444;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;</li></ol><p>&#x418;&#x43C;&#x435;&#x435;&#x442;&#x441;&#x44F; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x43D;&#x430;&#x44F; &#x43D;&#x430; kotlin<br>fun findKotlinDev(departments: List): Employee {<br>return departments<br>.map { it.employees }<br>.flatten()<br>.first { it.position == &quot;KOTLIN_DEVELOPER&quot; }<br>}<br>&#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43B;&#x438; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x443;&#x43B;&#x443;&#x447;&#x448;&#x438;&#x442;&#x44C;?</p><ol><li>&#x417;&#x430;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x432;&#x44B;&#x441;&#x448;&#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43A;&#x430; (map, flatten, first) &#x43D;&#x430; &#x446;&#x438;&#x43A;&#x43B;&#x44B; for, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x443;&#x43B;&#x443;&#x447;&#x448;&#x438;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C;.</li><li>&#x414;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; asSequence &#x43F;&#x435;&#x440;&#x435;&#x434; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x43E;&#x43C; .map { it.employees }.</li><li>&#x423;&#x43B;&#x443;&#x447;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x435; &#x442;&#x440;&#x435;&#x431;&#x443;&#x44E;&#x442;&#x441;&#x44F;.</li><li>&#x423;&#x434;&#x430;&#x43B;&#x438;&#x442;&#x44C; &#x432;&#x44B;&#x437;&#x43E;&#x432; flatten, &#x442;&#x430;&#x43A; &#x43A;&#x430;&#x43A; &#x43E;&#x43D; &#x43D;&#x435; &#x43D;&#x435;&#x441;&#x435;&#x442; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x44B; &#x438; &#x437;&#x430;&#x43C;&#x435;&#x434;&#x43B;&#x44F;&#x435;&#x442; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x43A;&#x43E;&#x434;&#x430;.</li></ol>]]></content:encoded></item><item><title><![CDATA[Как в таблице postresql эффективно инкрементировать значение поля одной записи из нескольких потоков под большой нагрузкой]]></title><description><![CDATA[<p>&#x412;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x430;&#x44F; &#x438;&#x434;&#x435;&#x44F; &#x438; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x435; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;</p>]]></description><link>https://blog.batsura.ru/kak-v-tablitsie-postresql-effiektivno-inkriemientirovat-znachieniie-polia-odnoi-zapisi-iz-nieskolkikh-potokov-pod-bolshoi-naghruzkoi/</link><guid isPermaLink="false">68b7f02485286e0001e51a0a</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Wed, 03 Sep 2025 07:37:49 GMT</pubDate><content:encoded><![CDATA[<p>&#x412;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x430;&#x44F; &#x438;&#x434;&#x435;&#x44F; &#x438; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x435; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x447;&#x435;&#x442;&#x447;&#x438;&#x43A;&#x438;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x432; Redis, &#x43D;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x43F;&#x440;&#x43E;&#x431;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x430;&#x43A;:</p><ol><li>&#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#xA0;<code>UPDATE</code>&#xA0;&#x441; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x435;&#x43C;&#xA0;<code>WHERE</code>&#xA0;&#x438;&#xA0;<code>RETURNING</code>:</li></ol><pre><code class="language-sql">UPDATE table_name
SET column_name = column_name + 1
WHERE id = $1
RETURNING column_name;
</code></pre><p>&#x42D;&#x442;&#x43E;&#x442; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434; &#x433;&#x430;&#x440;&#x430;&#x43D;&#x442;&#x438;&#x440;&#x443;&#x435;&#x442; &#x430;&#x442;&#x43E;&#x43C;&#x430;&#x440;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; &#x438;&#x43D;&#x43A;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x430; &#x434;&#x43B;&#x44F; &#x43A;&#x43E;&#x43D;&#x43A;&#x440;&#x435;&#x442;&#x43D;&#x43E;&#x439; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x438;, &#x438;&#x434;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x43E;&#x439; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x435;&#x43C;&#xA0;<code>WHERE</code>&#xA0;(&#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x43F;&#x43E; &#x43F;&#x435;&#x440;&#x432;&#x438;&#x447;&#x43D;&#x43E;&#x43C;&#x443; &#x43A;&#x43B;&#x44E;&#x447;&#x443;&#xA0;<code>id</code>). &#x41A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x43F;&#x43E;&#x442;&#x43E;&#x43A; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x44F;&#x435;&#x442;&#xA0;<code>UPDATE</code>&#xA0;&#x441; &#x43E;&#x434;&#x43D;&#x438;&#x43C; &#x438; &#x442;&#x435;&#x43C; &#x436;&#x435; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x435;&#x43C;&#xA0;<code>WHERE</code>, &#x438; PostgreSQL &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442; &#x441;&#x43E;&#x433;&#x43B;&#x430;&#x441;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445;, &#x441;&#x435;&#x440;&#x438;&#x430;&#x43B;&#x438;&#x437;&#x443;&#x44F; &#x43A;&#x43E;&#x43D;&#x43A;&#x443;&#x440;&#x438;&#x440;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438;. &#x41E;&#x43F;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440;&#xA0;<code>RETURNING</code>&#xA0;&#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x435;&#x442; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x43B;&#x44F;.</p>]]></content:encoded></item><item><title><![CDATA[Проектирование модели данных в Cassandra]]></title><description><![CDATA[<p>&#x412; &#x440;&#x435;&#x43B;&#x44F;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x44B;&#x445; &#x411;&#x414; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x441; &#x431;&#x438;&#x437;&#x43D;&#x435;&#x441;-&#x441;&#x443;&#x449;&#x43D;</p>]]></description><link>https://blog.batsura.ru/proiektirovaniie-modieli-dannykh-v-cassandra/</link><guid isPermaLink="false">68b7df6785286e0001e51a01</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Wed, 03 Sep 2025 06:27:43 GMT</pubDate><content:encoded><![CDATA[<p>&#x412; &#x440;&#x435;&#x43B;&#x44F;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x44B;&#x445; &#x411;&#x414; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x441; &#x431;&#x438;&#x437;&#x43D;&#x435;&#x441;-&#x441;&#x443;&#x449;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439;. &#x421;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x442;&#x430;&#x431;&#x43B;&#x438;&#x446;&#x44B;, &#x43A;&#x430;&#x436;&#x434;&#x430;&#x44F; &#x438;&#x437; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x43E;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x441;&#x443;&#x449;&#x43D;&#x43E;&#x441;&#x442;&#x44C;, &#x43F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x43D;&#x430; &#x44D;&#x442;&#x43E;&#x43C; &#x44D;&#x442;&#x430;&#x43F;&#x435; &#x43C;&#x44B; &#x43D;&#x435; &#x437;&#x430;&#x434;&#x443;&#x43C;&#x44B;&#x432;&#x430;&#x435;&#x43C;&#x441;&#x44F; &#x43E; SQL-&#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x430;&#x445;. &#x42D;&#x442;&#x43E; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x437;&#x43D;&#x430;&#x435;&#x43C;: &#x432;&#x441;&#x435;&#x433;&#x434;&#x430; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43D;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441; &#x438;&#x437; &#x43B;&#x44E;&#x431;&#x43E;&#x439; &#x442;&#x430;&#x431;&#x43B;&#x438;&#x446;&#x44B;, &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#xA0;JOIN&#xA0;&#x438;&#x43B;&#x438; &#x432;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x43D;&#x44B;&#x435;&#xA0;SELECT, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43D;&#x443;&#x436;&#x43D;&#x44B;&#x435; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435;.</p><p>&#x412;&#xA0;Cassandra&#xA0;&#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;. &#x41F;&#x440;&#x438; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x443;&#x447;&#x438;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441; &#x434;&#x43E;&#x43B;&#x436;&#x435;&#x43D; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x432;&#x441;&#x435; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x44B;&#x435; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x437;&#x430; &#x43E;&#x434;&#x438;&#x43D; &#x440;&#x430;&#x437; &#x2014; &#x438;&#x437; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x442;&#x430;&#x431;&#x43B;&#x438;&#x446;&#x44B;. &#x41F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x441;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x438;&#x440;&#x443;&#x44E;&#x442;&#x441;&#x44F; &#x432;&#x441;&#x435; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x44B;&#x435; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x44B;, &#x430; &#x443;&#x436;&#x435; &#x43F;&#x43E;&#x434; &#x43D;&#x438;&#x445; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x442;&#x430;&#x431;&#x43B;&#x438;&#x446;&#x44B;. &#x422;&#x430;&#x43A;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;, &#x432;&#xA0;Cassandra&#xA0;&#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x411;&#x414; &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x441; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x43E;&#x432;.</p>]]></content:encoded></item><item><title><![CDATA[Архитектурные шаблоны ПО]]></title><description><![CDATA[<p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x430;&#x434;&#x435;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x438;</p><ol><li>Retry pattern</li><li>Circuit Breaker pattern</li><li>Rate Limiting pattern</li><li>Throttling pattern</li><li>Bulkhead pattern</li><li>Fallback Cache pattern</li><li>Null Object pattern</li><li>Priority Queue pattern</li><li>Leader</li></ol>]]></description><link>https://blog.batsura.ru/arkhitiekturnyie-shablony-po/</link><guid isPermaLink="false">68ada0bc85286e0001e519a0</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Tue, 26 Aug 2025 13:01:22 GMT</pubDate><content:encoded><![CDATA[<p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x430;&#x434;&#x435;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x438;</p><ol><li>Retry pattern</li><li>Circuit Breaker pattern</li><li>Rate Limiting pattern</li><li>Throttling pattern</li><li>Bulkhead pattern</li><li>Fallback Cache pattern</li><li>Null Object pattern</li><li>Priority Queue pattern</li><li>Leader Election pattern</li><li>Queue-Based Load Leveling pattern</li><li>Health Endpoint Monitoring pattern</li></ol><p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x43C;&#x430;&#x441;&#x448;&#x442;&#x430;&#x431;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x43E;&#x441;&#x442;&#x438;</p><ol><li>Load Balancer pattern</li><li>Cache pattern</li></ol><ul><li>Client caching&#xA0;</li><li>CDN caching</li><li>Web server caching</li><li>Database caching</li><li>Application caching</li><li>Cache-aside</li><li>Write-through</li><li>Write-behind (write-back)</li><li>Refresh-ahead</li></ul><ol start="3"><li>Materialized View pattern</li><li>CQRS pattern</li><li>Competing Consumers pattern</li><li>Sequential Convoy pattern</li><li>Federation (functional partitioning) pattern</li><li>Sharding pattern</li><li>Static Content Hosting pattern</li></ol><p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x430; &#x43A; &#x440;&#x430;&#x441;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x43D;&#x44B;&#x43C; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x43C;</p><ol><li>Interservice Communication pattern</li><li>Column Schema Replication pattern</li><li>Shared Data pattern</li></ol><p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x431;&#x435;&#x437;&#x43E;&#x43F;&#x430;&#x441;&#x43D;&#x43E;&#x441;&#x442;&#x438;</p><ol><li>Gateway Offloading pattern</li><li>Gatekeeper pattern</li></ol><p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x43F;&#x435;&#x440;&#x435;&#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43E;&#x431;&#x449;&#x435;&#x433;&#x43E; &#x43A;&#x43E;&#x434;&#x430;</p><ol><li>Code replication pattern</li><li>Shared library pattern</li><li>Shared service pattern</li><li>Sidecar pattern</li></ol><p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x438;&#x43D;&#x442;&#x435;&#x433;&#x440;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x43E;&#x441;&#x442;&#x438;</p><ol><li>External Configuration Store pattern</li><li>Anti-corruption Layer pattern</li></ol><p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x440;&#x430;&#x437;&#x432;&#x435;&#x440;&#x442;&#x44B;&#x432;&#x430;&#x435;&#x43C;&#x43E;&#x441;&#x442;&#x438;</p><ol><li>Blue/green pattern</li><li>Rolling upgrade pattern</li><li>A/B Testing pattern</li><li>Canary Testing pattern</li><li>Feature Toggle pattern</li></ol><p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x442;&#x435;&#x441;&#x442;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x43E;&#x441;&#x442;&#x438;</p><ol><li>Dependency Injection pattern</li><li>Test Pyramid pattern</li><li>Testing Honeycomb pattern</li><li>Contract Testing pattern</li></ol><p>&#x428;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B; &#x441;&#x43E;&#x433;&#x43B;&#x430;&#x441;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x447;&#x442;&#x435;&#x43D;&#x438;&#x44F;/&#x437;&#x430;&#x43F;&#x438;&#x441;&#x438;</p><ol><li>Synchronous Replication pattern</li><li>Pinning User to Master pattern</li><li>Fragmented Pinning pattern</li><li>Master Fallback pattern</li><li>Server Wait pattern</li><li>Client Polling pattern</li><li>Push to Client pattern</li><li>Loading screen pattern</li><li>Confirmation screen pattern</li><li>Fake It pattern</li></ol><p></p>]]></content:encoded></item><item><title><![CDATA[Data Warehouse vs Data Lake]]></title><description><![CDATA[<p>DWH &#x44D;&#x442;&#x43E; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x43C;&#x438; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x430; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x43C; &#x43E;&#x431;&#x440;</p>]]></description><link>https://blog.batsura.ru/data-warehouse-vs-data-lake/</link><guid isPermaLink="false">6893501f85286e0001e5198c</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Wed, 06 Aug 2025 12:56:28 GMT</pubDate><content:encoded><![CDATA[<p>DWH &#x44D;&#x442;&#x43E; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x43C;&#x438; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x430; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C; &#x43D;&#x430; &#x441;&#x446;&#x435;&#x43D;&#x430;&#x440;&#x438;&#x44F;&#x445; &#x438;&#x437;&#x432;&#x43B;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x44F;-&#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;-&#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x43A;&#x438; (Extract-Transform-Load, ETL). &#x417;&#x430;&#x433;&#x440;&#x443;&#x437;&#x43A;&#x430; &#x43E;&#x447;&#x438;&#x449;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x438; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x432; &#x441;&#x43F;&#x435;&#x446;&#x438;&#x430;&#x43B;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x443;&#x44E; &#x431;&#x430;&#x437;&#x443; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445;, &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x43D;&#x43D;&#x443;&#x44E; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x434;&#x43B;&#x44F; &#x446;&#x435;&#x43B;&#x435;&#x439; &#x430;&#x43D;&#x430;&#x43B;&#x438;&#x437;&#x430;. </p><p>&#x412; Data Lake &#x441;&#x43E;&#x445;&#x440;&#x430;&#x43D;&#x44F;&#x44E;&#x442; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x432; &#x43D;&#x435;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x43C; &#x432;&#x438;&#x434;&#x435; (&#x432; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x435; &#x438;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;&#x430;) &#x432; &#x442;&#x430;&#x43A; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C;&#x43E;&#x43C; &#x43E;&#x437;&#x435;&#x440;&#x435; (Lake).</p>]]></content:encoded></item><item><title><![CDATA[Какую SAGA выбрать?]]></title><description><![CDATA[<p>&#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C; &#x445;&#x43E;&#x440;&#x435;&#x43E;&#x433;&#x440;&#x430;&#x444;&#x438;&#x44E; &#x432; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x43D;&#x435;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x445; &#x440;&#x430;&#x431;&#x43E;&#x447;&#x438;&#x445; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;</p>]]></description><link>https://blog.batsura.ru/kakuiu-saga-vybrat-2/</link><guid isPermaLink="false">689348f285286e0001e5197b</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Wed, 06 Aug 2025 12:23:18 GMT</pubDate><content:encoded><![CDATA[<p>&#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C; &#x445;&#x43E;&#x440;&#x435;&#x43E;&#x433;&#x440;&#x430;&#x444;&#x438;&#x44E; &#x432; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x43D;&#x435;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x445; &#x440;&#x430;&#x431;&#x43E;&#x447;&#x438;&#x445; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x43E;&#x432;. &#x414;&#x432;&#x430;&#x2013;&#x442;&#x440;&#x438; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441;&#x430; &#x2014; &#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B; &#x434;&#x43B;&#x44F; &#x445;&#x43E;&#x440;&#x435;&#x43E;&#x433;&#x440;&#x430;&#x444;&#x438;&#x438;. &#x41F;&#x440;&#x438; &#x434;&#x430;&#x43B;&#x44C;&#x43D;&#x435;&#x439;&#x448;&#x435;&#x43C; &#x443;&#x432;&#x435;&#x43B;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x438; &#x447;&#x438;&#x441;&#x43B;&#x430; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441;&#x43E;&#x432;, &#x443;&#x447;&#x430;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x432; &#x442;&#x440;&#x430;&#x43D;&#x437;&#x430;&#x43A;&#x446;&#x438;&#x438;, &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x43E;&#x448;&#x438;&#x431;&#x43E;&#x43A; &#x438; &#x43F;&#x43E;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x44F; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x442;&#x43E;&#x43A;&#x430; &#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x442;&#x441;&#x44F; &#x437;&#x430;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C; &#x43E;&#x440;&#x43A;&#x435;&#x441;&#x442;&#x440;&#x430;&#x446;&#x438;&#x44E;.</p>]]></content:encoded></item><item><title><![CDATA[Интересный dashboard с информацией об уязвимостях от Positive Technologies]]></title><description><![CDATA[<p>&#x423;&#x437;&#x43D;&#x430;&#x43B;, &#x447;&#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x439; &#x434;&#x430;&#x448;&#x431;&#x43E;&#x440;&#x434; <a href="https://dbugs.ptsecurity.com/?ref=blog.batsura.ru">https://dbugs.ptsecurity.com/</a></p><p>&#x412; &#x43D;&#x435;&#x43C; &#x432;&#x438;&#x434;&#x43D;&#x44B;:</p><ol><li>&#x422;&#x440;&#x435;</li></ol>]]></description><link>https://blog.batsura.ru/intieriesnyi-dashboard-s-informatsiiei-ob-uiazvimostiakh-ot-positive-technologies/</link><guid isPermaLink="false">688741d985286e0001e51969</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Mon, 28 Jul 2025 09:28:46 GMT</pubDate><content:encoded><![CDATA[<p>&#x423;&#x437;&#x43D;&#x430;&#x43B;, &#x447;&#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x439; &#x434;&#x430;&#x448;&#x431;&#x43E;&#x440;&#x434; <a href="https://dbugs.ptsecurity.com/?ref=blog.batsura.ru">https://dbugs.ptsecurity.com/</a></p><p>&#x412; &#x43D;&#x435;&#x43C; &#x432;&#x438;&#x434;&#x43D;&#x44B;:</p><ol><li>&#x422;&#x440;&#x435;&#x43D;&#x434;&#x44B; - &#x443;&#x44F;&#x437;&#x432;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x441; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E;&#x43C; &#x440;&#x435;&#x43F;&#x43E;&#x441;&#x442;&#x43E;&#x432; &#x43F;&#x43E; &#x441;&#x43E;&#x446;&#x441;&#x435;&#x442;&#x44F;&#x43C;</li><li>&#x423;&#x44F;&#x437;&#x432;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438;</li><li>&#x418;&#x441;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x438; &#x443;&#x44F;&#x437;&#x432;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x435;&#x439;</li></ol>]]></content:encoded></item><item><title><![CDATA[Закон Конвея]]></title><description><![CDATA[<p><strong>&#x417;&#x430;&#x43A;&#x43E;&#x43D; &#x41A;&#x43E;&#x43D;&#x432;&#x435;&#x44F;&#xA0;&#x433;&#x43B;&#x430;&#x441;&#x438;&#x442;:</strong> &#x41B;&#x44E;&#x431;&#x430;&#x44F; &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44F;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;</p>]]></description><link>https://blog.batsura.ru/zakon-konvieia/</link><guid isPermaLink="false">6883dd3085286e0001e51960</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Fri, 25 Jul 2025 19:38:43 GMT</pubDate><content:encoded><![CDATA[<p><strong>&#x417;&#x430;&#x43A;&#x43E;&#x43D; &#x41A;&#x43E;&#x43D;&#x432;&#x435;&#x44F;&#xA0;&#x433;&#x43B;&#x430;&#x441;&#x438;&#x442;:</strong> &#x41B;&#x44E;&#x431;&#x430;&#x44F; &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44F;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x443; (&#x432; &#x448;&#x438;&#x440;&#x43E;&#x43A;&#x43E;&#x43C; &#x441;&#x43C;&#x44B;&#x441;&#x43B;&#x435;), &#x432;&#x44B;&#x43D;&#x443;&#x436;&#x434;&#x435;&#x43D;&#x430; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x44B;, &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x442;&#x441;&#x44F; &#x43A;&#x43E;&#x43F;&#x438;&#x435;&#x439; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x441;&#x432;&#x44F;&#x437;&#x435;&#x439; &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438;.</p><p><strong>&#x41E;&#x431;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43C;&#x430;&#x43D;&#x435;&#x432;&#x440; &#x41A;&#x43E;&#x43D;&#x432;&#x435;&#x44F;:</strong> &#x41F;&#x440;&#x43E;&#x434;&#x443;&#x43C;&#x430;&#x439;&#x442;&#x435; &#x43B;&#x443;&#x447;&#x448;&#x443;&#x44E; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B;, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x43A;&#x43E;&#x43C;&#x43F;&#x430;&#x43D;&#x438;&#x438; &#x442;&#x430;&#x43A;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43E;&#x43D;&#x430; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x43B;&#x430; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x435; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B;.</p>]]></content:encoded></item><item><title><![CDATA[Неочевидные нюансы с отладкой]]></title><description><![CDATA[<p>&#x41E;&#x442;&#x43B;&#x430;&#x436;&#x438;&#x432;&#x430;&#x43B; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441; &#x443; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x432; &#x43D;&#x43E;&#x432;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x441;&#x438;&#x438; &#x431;&#x44B;&#x43B;&#x43E; &#x443;&#x431;&#x440;&#x430;&#x43D;&#x43E; &#x437;&#x430;&#x43F;&#x43E;</p>]]></description><link>https://blog.batsura.ru/nieochievidnyie-niuansy-s-otladkoi/</link><guid isPermaLink="false">6880b2b785286e0001e51950</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Wed, 23 Jul 2025 10:03:02 GMT</pubDate><content:encoded><![CDATA[<p>&#x41E;&#x442;&#x43B;&#x430;&#x436;&#x438;&#x432;&#x430;&#x43B; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441; &#x443; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x432; &#x43D;&#x43E;&#x432;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x441;&#x438;&#x438; &#x431;&#x44B;&#x43B;&#x43E; &#x443;&#x431;&#x440;&#x430;&#x43D;&#x43E; &#x437;&#x430;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x43B;&#x44F;, &#x430; &#x43E;&#x43D;&#x43E; &#x43C;&#x430;&#x433;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C; &#x437;&#x430;&#x43F;&#x43E;&#x43B;&#x43D;&#x44F;&#x43B;&#x43E;&#x441;&#x44C;, &#x445;&#x43E;&#x442;&#x44F; &#x43F;&#x43E; &#x43A;&#x43E;&#x434;&#x443; &#x43D;&#x435; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x43E;. &#x422;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43C;&#x435;&#x442;&#x43E;&#x434; &#x432;&#x44B;&#x437;&#x44B;&#x432;&#x430;&#x43B;&#x441;&#x44F; &#x442;&#x430;&#x43C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x432;&#x430;&#x43B;&#x441;&#x44F; &#x44D;&#x43A;&#x437;&#x435;&#x43C;&#x43F;&#x43B;&#x44F;&#x440; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x430;, &#x430; &#x43F;&#x440;&#x438; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x435; &#x438;&#x437; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430; &#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x43B;&#x435; &#x437;&#x430;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x43E;. &#x41E;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x430;&#x441;&#x44C; &#x43D;&#x43E;&#x432;&#x430;&#x44F; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; &#x43D;&#x435; &#x432;&#x441;&#x442;&#x430;&#x43B;&#x430; &#x43D;&#x430; &#x442;&#x435;&#x441;&#x442;&#x43E;&#x432;&#x443;&#x44E; &#x441;&#x440;&#x435;&#x434;&#x443;, &#x43F;&#x43E; &#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x431;&#x44B;&#x43B; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x439; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;.</p>]]></content:encoded></item><item><title><![CDATA[Бесплатный программист от Atlassian]]></title><description><![CDATA[<p>&#x412;&#x447;&#x435;&#x440;&#x430; &#x43F;&#x43E;&#x43F;&#x440;&#x43E;&#x431;&#x43E;&#x432;&#x430;&#x43B; acli rovodev <a href="https://developer.atlassian.com/cloud/acli/guides/install-linux/?ref=blog.batsura.ru">https://developer.atlassian.com/cloud/acli/guides/install-linux/</a>. </p><p>&#x41F;&#x43B;&#x44E;&#x441;&#x44B;:</p><ol><li>&#x411;&#x435;&#x441;&#x43F;&#x43B;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43F;&#x43E;&#x43A;&#x430; &#x431;&#x435;&#x442;&#x430;</li><li>&#x421;&#x443;</li></ol>]]></description><link>https://blog.batsura.ru/biesplatnyi-proghrammist-ot-atlassian/</link><guid isPermaLink="false">68766a5c85286e0001e5193e</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Tue, 15 Jul 2025 14:56:39 GMT</pubDate><content:encoded><![CDATA[<p>&#x412;&#x447;&#x435;&#x440;&#x430; &#x43F;&#x43E;&#x43F;&#x440;&#x43E;&#x431;&#x43E;&#x432;&#x430;&#x43B; acli rovodev <a href="https://developer.atlassian.com/cloud/acli/guides/install-linux/?ref=blog.batsura.ru">https://developer.atlassian.com/cloud/acli/guides/install-linux/</a>. </p><p>&#x41F;&#x43B;&#x44E;&#x441;&#x44B;:</p><ol><li>&#x411;&#x435;&#x441;&#x43F;&#x43B;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43F;&#x43E;&#x43A;&#x430; &#x431;&#x435;&#x442;&#x430;</li><li>&#x421;&#x443;&#x442;&#x43E;&#x447;&#x43D;&#x44B;&#x439; &#x43B;&#x438;&#x43C;&#x438;&#x442; 20 &#x43C;&#x438;&#x43B;&#x43B;&#x438;&#x43E;&#x43D;&#x43E;&#x432; &#x442;&#x43E;&#x43A;&#x435;&#x43D;&#x43E;&#x432; &#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x43E;&#x432;</li><li>&#x41F;&#x440;&#x438;&#x43B;&#x435;&#x436;&#x43D;&#x44B;&#x439;</li><li>&#x417;&#x430; &#x447;&#x430;&#x441; &#x43E;&#x43D; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43B; &#x440;&#x435;&#x430;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x439; &#x433;&#x435;&#x439;&#x442;&#x432;&#x435;&#x439; <a href="https://github.com/batsura-sa/reactive-gateway-project?ref=blog.batsura.ru">https://github.com/batsura-sa/reactive-gateway-project</a></li></ol><p>&#x41C;&#x438;&#x43D;&#x443;&#x441;&#x44B;:</p><ol><li>&#x422;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442; VPN</li></ol>]]></content:encoded></item><item><title><![CDATA[Прикладные блокировки в PostgreSQL]]></title><description><![CDATA[<p>&#x41C;&#x43D;&#x435; &#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x44B; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x44B;:</p><ol><li>Advisory lock  - &#x43F;&#x440;&#x438;&#x434;&#x443;&#x43C;&#x44B;&#x432;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x430;&#x43D;&#x442;</li></ol>]]></description><link>https://blog.batsura.ru/raspriedieliennyie-blokirovki-v-postgresql/</link><guid isPermaLink="false">686d013a5f7bc100017f64db</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Tue, 08 Jul 2025 11:34:40 GMT</pubDate><content:encoded><![CDATA[<p>&#x41C;&#x43D;&#x435; &#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x44B; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x44B;:</p><ol><li>Advisory lock  - &#x43F;&#x440;&#x438;&#x434;&#x443;&#x43C;&#x44B;&#x432;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x430;&#x43D;&#x442;&#x443; &#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C; pg_advisory_lock &#x438; pg_try_advisory_lock</li><li>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x442;&#x430;&#x431;&#x43B;&#x438;&#x446;&#x443; &#x431;&#x43B;&#x43E;&#x43A;&#x438;&#x440;&#x43E;&#x432;&#x43E;&#x43A; &#x438; &#x432; &#x44D;&#x442;&#x43E;&#x439; &#x442;&#x430;&#x431;&#x43B;&#x438;&#x446;&#x435; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x44C;. &#x415;&#x441;&#x43B;&#x438; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x44C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x430;, &#x442;&#x43E; &#x431;&#x43B;&#x43E;&#x43A;&#x438;&#x440;&#x43E;&#x432;&#x43A;&#x430; &#x443;&#x441;&#x43F;&#x435;&#x448;&#x43D;&#x430;. &#x414;&#x43B;&#x44F; &#x443;&#x434;&#x430;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x431;&#x43B;&#x43E;&#x43A;&#x438;&#x440;&#x43E;&#x432;&#x43A;&#x438; &#x443;&#x434;&#x430;&#x43B;&#x44F;&#x435;&#x43C; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x44C;.</li><li>&#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; shedlock &#x438; &#x441;&#x43E;&#x43E;&#x440;&#x443;&#x434;&#x438;&#x442;&#x44C; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x442;&#x438;&#x43F;&#x430; <a href="https://github.com/batsura-sa/distributed-lock-shedlock/blob/master/src/main/java/org/j262/lock/api/DistributedLock.java?ref=blog.batsura.ru">https://github.com/batsura-sa/distributed-lock-shedlock/blob/master/src/main/java/org/j262/lock/api/DistributedLock.java</a></li></ol>]]></content:encoded></item><item><title><![CDATA[Шардирование в postgreSQL]]></title><description><![CDATA[<p>&#x418;&#x43D;&#x43E;&#x433;&#x434;&#x430; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x431;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x438; &#x43F;&#x440;&#x438;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x437;&#x430;&#x434;&#x443;&#x43C;&#x44B;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43E; &#x440;&#x430;&#x441;</p>]]></description><link>https://blog.batsura.ru/shardirovaniie-v-postgresql/</link><guid isPermaLink="false">685e779f5f7bc100017f64c3</guid><dc:creator><![CDATA[Sergei Batsura]]></dc:creator><pubDate>Fri, 27 Jun 2025 10:56:14 GMT</pubDate><content:encoded><![CDATA[<p>&#x418;&#x43D;&#x43E;&#x433;&#x434;&#x430; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x431;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x438; &#x43F;&#x440;&#x438;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x437;&#x430;&#x434;&#x443;&#x43C;&#x44B;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43E; &#x440;&#x430;&#x441;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x438; &#x438;&#x445; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x44D;&#x43A;&#x437;&#x435;&#x43C;&#x43F;&#x43B;&#x44F;&#x440;&#x430;&#x43C;&#x438; &#x411;&#x414;.</p><p>&#x420;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x44E; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x44B;:</p><ol><li>Citus <a href="https://github.com/citusdata/citus?ref=blog.batsura.ru">https://github.com/citusdata/citus</a></li><li>Apache shardingsphere <a href="https://github.com/apache/shardingsphere?ref=blog.batsura.ru">https://github.com/apache/shardingsphere</a></li><li>Pg-sharding <a href="https://github.com/pg-sharding/spqr?ref=blog.batsura.ru">https://github.com/pg-sharding/spqr</a></li><li>Yuogabytedb <a href="https://github.com/yugabyte/yugabyte-db?ref=blog.batsura.ru">https://github.com/yugabyte/yugabyte-db</a></li></ol><p>&#x41A;&#x430;&#x43A;&#x438;&#x435; &#x435;&#x449;&#x435; &#x435;&#x441;&#x442;&#x44C; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x44B;?</p><p>&#x418;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x435; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x44B; &#x43F;&#x43E;&#x438;&#x441;&#x43A;&#x430; &#x43F;&#x430;&#x440;&#x442;&#x438;&#x446;&#x438;&#x439;:</p><ol><li>Table Function. &#x425;&#x440;&#x430;&#x43D;&#x438;&#x43C; &#x441;&#x43E;&#x43F;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x430;&#x440;&#x442;&#x438;&#x446;&#x438;&#x439; &#x443;&#x437;&#x43B;&#x430;&#x43C;.</li><li>Consistent hashing.</li><li>Rendezvous hashing&#xA0;&#x438;&#x43B;&#x438;&#xA0;&#x43D;&#x430;&#x438;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435;&#x433;&#x43E; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x439;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x435;&#x441;&#x430;. &#x421; Rendezvous &#x43A;&#x43B;&#x438;&#x435;&#x43D;&#x442; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x43F;&#x43E;&#x441;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x445;&#x44D;&#x448; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43E;&#x442; &#x43A;&#x43B;&#x44E;&#x447;&#x430; 364, &#x430; &#x445;&#x44D;&#x448; &#x43E;&#x442; &#x43F;&#x430;&#x440;. 364 &#x438; &#x43D;&#x43E;&#x434;&#x430; 1, 364 &#x438; &#x43D;&#x43E;&#x434;&#x430; 2 &#x438; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x43C;&#x430;&#x43A;&#x441;&#x438;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x447;&#x438;&#x441;&#x43B;&#x43E;.</li></ol>]]></content:encoded></item></channel></rss>