Skip to content

Commit

Permalink
Add new post about validating tech decisions
Browse files Browse the repository at this point in the history
  • Loading branch information
davydovanton committed Sep 26, 2024
1 parent 239af03 commit f15120c
Show file tree
Hide file tree
Showing 25 changed files with 1,329 additions and 340 deletions.
3 changes: 2 additions & 1 deletion _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ tagline: '2pegramming.site'
description: '<a href="https://t.me/pepegramming" target="_blank">2pegramming</a>'
url: http://pepegramming.site
baseurl: '/'
future: true

author:
name: 'Anton Davydov'
url: https://davydovanton.com
url: https://pepegramming.site


# Custom vars
Expand Down
2 changes: 1 addition & 1 deletion _layouts/question.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ <h1 class="question-title">{{ page.title }}</h1>

<hr>

<p>Нашли опечатку или ошибку? Буду рад <a href="https://github.com/2pegramming/2pegramming.github.io/tree/master/questions">PR-у</a>.</p>
<p>Нашли опечатку или ошибку? Буду рад <a href="https://github.com/2pegramming/2pegramming.github.io/tree/master/questions" target="_blank">PR-у</a>.</p>
</div>

<!-- <div class="related"> -->
Expand Down
481 changes: 384 additions & 97 deletions _site/atom.xml

Large diffs are not rendered by default.

18 changes: 9 additions & 9 deletions _site/blogposts/retrospection-ecommerce/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -127,27 +127,27 @@ <h2 id="данные-и-etl">Данные и ETL</h2>
<!-- -->
<!-- <li> -->
<!-- <h3> -->
<!-- <a href="/questions/how-i-use-obsidian-and-why/"> -->
<!-- Как и почему использую Obsidian -->
<!-- <small>14 Sep 2024</small> -->
<!-- <a href="/questions/how-to-be-sure-about-technical-decision/"> -->
<!-- Как убедиться, что техническое решение нужно? -->
<!-- <small>27 Sep 2024</small> -->
<!-- </a> -->
<!-- </h3> -->
<!-- </li> -->
<!-- -->
<!-- <li> -->
<!-- <h3> -->
<!-- <a href="/questions/make-events-small/"> -->
<!-- Как уменьшить размер события в асинхронных коммуникациях -->
<!-- <small>30 Aug 2024</small> -->
<!-- <a href="/questions/how-i-use-obsidian-and-why/"> -->
<!-- Как и почему использую Obsidian -->
<!-- <small>14 Sep 2024</small> -->
<!-- </a> -->
<!-- </h3> -->
<!-- </li> -->
<!-- -->
<!-- <li> -->
<!-- <h3> -->
<!-- <a href="/questions/graph-as-a-project-managment-tool/"> -->
<!-- Как слежу за большими проектами -->
<!-- <small>16 Aug 2024</small> -->
<!-- <a href="/questions/make-events-small/"> -->
<!-- Как уменьшить размер события в асинхронных коммуникациях -->
<!-- <small>30 Aug 2024</small> -->
<!-- </a> -->
<!-- </h3> -->
<!-- </li> -->
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
70 changes: 35 additions & 35 deletions _site/questions/data-model/index.html

Large diffs are not rendered by default.

46 changes: 23 additions & 23 deletions _site/questions/graph-as-a-project-managment-tool/index.html

Large diffs are not rendered by default.

110 changes: 55 additions & 55 deletions _site/questions/how-i-use-obsidian-and-why/index.html

Large diffs are not rendered by default.

415 changes: 415 additions & 0 deletions _site/questions/how-to-be-sure-about-technical-decision/index.html

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions _site/questions/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,34 @@ <h1>2pegramming.questions</h1>

<div class="questions">

<div class="question">
<h1 class="question-title">
<a href="/questions/how-to-be-sure-about-technical-decision/">
Как убедиться, что техническое решение нужно?
</a>
</h1>

<span class="question-date">27 Sep 2024</span>

<div class="tag-cloud">
<ul>

<li>
<a href="/tags/#systems"><span>systems</span></a>
</li>

<li>
<a href="/tags/#system_engineering"><span>system_engineering</span></a>
</li>

<li>
<a href="/tags/#decision_making"><span>decision_making</span></a>
</li>

</ul>
</div>
</div>

<div class="question">
<h1 class="question-title">
<a href="/questions/how-i-use-obsidian-and-why/">
Expand Down
46 changes: 23 additions & 23 deletions _site/questions/make-events-small/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ <h4 id="воспользоваться-бинарной-сериализацие

<p>Из минусов - без десериализации человек такую бинарную строку быстро не прочитает, в отличии от human-readable форматов (json, xml, etc). Еще из минусов – придется думать как консьюмер поймет какую схему использовать для десерелизации (либо 1 событие на топик/очередь, либо название события в headers кафки прокидывать).</p>

<p>Популярные серелизаторы: <a href="https://github.com/protocolbuffers/protobuf">protobuf</a> (в grpc используется), <a href="https://github.com/apache/avro">avro</a>, <a href="https://github.com/apache/thrift">apache thrift</a>. В некоторых языках реализованы решения из коробки, <a href="https://www.erlang.org/doc/apps/erts/erl_ext_dist.html">например в erlang</a> (использовать только тем, кто контрибьютил в пакет).</p>
<p>Популярные серелизаторы: <a href="https://github.com/protocolbuffers/protobuf" target="_blank">protobuf</a> (в grpc используется), <a href="https://github.com/apache/avro" target="_blank">avro</a>, <a href="https://github.com/apache/thrift" target="_blank">apache thrift</a>. В некоторых языках реализованы решения из коробки, <a href="https://www.erlang.org/doc/apps/erts/erl_ext_dist.html" target="_blank">например в erlang</a> (использовать только тем, кто контрибьютил в пакет).</p>

<figure class="image">
<img src="/public/images/questions/2024-08-30-make-events-small/avro-vs-protobuf-size-comparison.jpg" alt="dbml: code and visualisation" />
Expand All @@ -333,9 +333,9 @@ <h4 id="передавать-часть-данных-в-других-событ

<p>На первый взгляд решение может показаться идентичным message chunking, но концепция чуть отличается.</p>

<p>Идея в том, что можно разделить связи между элементами в плоскости <a href="https://en.wikipedia.org/wiki/Form,_fit_and_function">system function и system form</a>. Благодаря чему появится два вида связности: по данным (это form) и на уровне поведения (function). Это приводит к идее, что если присутствует событие, которое говорит о поведении, для обработки которого нужны данные, эти данные можно передать через system form связь.</p>
<p>Идея в том, что можно разделить связи между элементами в плоскости <a href="https://en.wikipedia.org/wiki/Form,_fit_and_function" target="_blank">system function и system form</a>. Благодаря чему появится два вида связности: по данным (это form) и на уровне поведения (function). Это приводит к идее, что если присутствует событие, которое говорит о поведении, для обработки которого нужны данные, эти данные можно передать через system form связь.</p>

<p>Для определения system form можно воспользоваться <a href="https://pepegramming.site/questions/data-model/">концептуальной data model</a>, а для определения system function – любой моделью, описывающей поведение, например EventStorming.</p>
<p>Для определения system form можно воспользоваться <a href="https://pepegramming.site/questions/data-model/" target="_blank">концептуальной data model</a>, а для определения system function – любой моделью, описывающей поведение, например EventStorming.</p>

<h3 id="тюнинг-брокера">Тюнинг брокера</h3>

Expand All @@ -344,8 +344,8 @@ <h3 id="тюнинг-брокера">Тюнинг брокера</h3>
<p>Как могу судить, тут два подхода: либо крутить конфиг брокера, либо использовать специфичные инструменты реализованные в брокере:</p>

<ul>
<li>Если возникла проблема, что событие не влезает в брокер, то можно накрутить конфиг <a href="https://stackoverflow.com/questions/21020347/how-can-i-send-large-messages-with-kafka-over-15mb">кафки</a> или <a href="https://www.cloudamqp.com/blog/what-is-the-message-size-limit-in-rabbitmq.html">кролика, но тут лимит в 128 мб</a>. Для других брокеров думаю можно найти аналогичные настройки;</li>
<li>Если используете кафку, советую посмотреть в сторону <a href="https://www.confluent.io/blog/apache-kafka-message-compression/">message compression</a>. Подход сработает для xml, json и прочего, что легко компрессируется и содержит дубли. По сути, аналог серелизации из списка выше;</li>
<li>Если возникла проблема, что событие не влезает в брокер, то можно накрутить конфиг <a href="https://stackoverflow.com/questions/21020347/how-can-i-send-large-messages-with-kafka-over-15mb" target="_blank">кафки</a> или <a href="https://www.cloudamqp.com/blog/what-is-the-message-size-limit-in-rabbitmq.html" target="_blank">кролика, но тут лимит в 128 мб</a>. Для других брокеров думаю можно найти аналогичные настройки;</li>
<li>Если используете кафку, советую посмотреть в сторону <a href="https://www.confluent.io/blog/apache-kafka-message-compression/" target="_blank">message compression</a>. Подход сработает для xml, json и прочего, что легко компрессируется и содержит дубли. По сути, аналог серелизации из списка выше;</li>
</ul>

<p>Знаете еще варианты? Пишите в комментариях к тг посту, соберем список, а я дополню эту часть ответа.</p>
Expand All @@ -367,28 +367,28 @@ <h2 id="выводы">Выводы</h2>
<h2 id="ссылки">Ссылки</h2>

<ul>
<li>[en] <a href="https://barryosull.com/blog/event-granularity-modelling-events-in-event-driven-applications/">Статья, которая рассказывает о концепции event granularity с fine и coarse событиями</a>. При этом, автор объясняет почему появляются те или иные виды событий события;</li>
<li>[en] <a href="https://barryosull.com/blog/event-granularity-modelling-events-in-event-driven-applications/" target="_blank">Статья, которая рассказывает о концепции event granularity с fine и coarse событиями</a>. При этом, автор объясняет почему появляются те или иные виды событий события;</li>
<li>
<p>[en] <a href="https://developer.confluent.io/courses/event-design/fact-vs-delta-events/">Статья о state и delta событиях</a>. Текста много, но и объясняется куча нюансов;</p>
<p>[en] <a href="https://developer.confluent.io/courses/event-design/fact-vs-delta-events/" target="_blank">Статья о state и delta событиях</a>. Текста много, но и объясняется куча нюансов;</p>
</li>
<li>[en] <a href="https://www.funnel-labs.io/2022/08/26/data-serialization-apache-avro-vs-google-protobuf/">Сравнение avro и protobuf серелизаторов</a> между собой;</li>
<li><a href="https://dataintensive.net">4 глава DDIA</a> посвящена сериализации данных. Если не читали – рекомендую;</li>
<li>[en] <a href="https://www.funnel-labs.io/2022/08/26/data-serialization-apache-avro-vs-google-protobuf/" target="_blank">Сравнение avro и protobuf серелизаторов</a> между собой;</li>
<li><a href="https://dataintensive.net" target="_blank">4 глава DDIA</a> посвящена сериализации данных. Если не читали – рекомендую;</li>
<li>
<p>[en] <a href="https://cristian-matei-toader.medium.com/compressing-a-year-of-reddit-with-apache-avro-and-google-protobuf-c9e40cf90444">Статья, в которой автор вдохновился DDIA и решил ужать датасет реддита</a>, чтобы понять какой сериализатор лучше. Результат проверки найдете картинкой в ответе выше;</p>
<p>[en] <a href="https://cristian-matei-toader.medium.com/compressing-a-year-of-reddit-with-apache-avro-and-google-protobuf-c9e40cf90444" target="_blank">Статья, в которой автор вдохновился DDIA и решил ужать датасет реддита</a>, чтобы понять какой сериализатор лучше. Результат проверки найдете картинкой в ответе выше;</p>
</li>
<li>
<p>[en] Советы по работе с большими сообщениями, которые описаны в вики apache pulsar. <a href="https://github.com/apache/pulsar/wiki/PIP-37:-Large-message-size-handling-in-Pulsar#option-2-producer-publish-marker-message-after-publishing-all-chunked-messages">Message chunking – один из вариантов решения</a>;</p>
<p>[en] Советы по работе с большими сообщениями, которые описаны в вики apache pulsar. <a href="https://github.com/apache/pulsar/wiki/PIP-37:-Large-message-size-handling-in-Pulsar#option-2-producer-publish-marker-message-after-publishing-all-chunked-messages" target="_blank">Message chunking – один из вариантов решения</a>;</p>
</li>
<li>
<p>[ru] Подробнее о разделении коммуникаций на поведение и данные (form, function) можно <a href="https://f213.notion.site/dfa7f424ed8440d99a21c328cc8c5c65">почитать в открытом уроке курса</a>, по анализу систем, который сделал;</p>
<p>[ru] Подробнее о разделении коммуникаций на поведение и данные (form, function) можно <a href="https://f213.notion.site/dfa7f424ed8440d99a21c328cc8c5c65" target="_blank">почитать в открытом уроке курса</a>, по анализу систем, который сделал;</p>
</li>
<li>[en] Автор дает <a href="https://jcdubs.medium.com/aws-large-payload-pattern-e3e4c57d402d">советы тем, кто использует aws инфраструктуру и хочет работать с большими событиями</a>. Примеры кода на js;</li>
<li>[en] Автор дает <a href="https://jcdubs.medium.com/aws-large-payload-pattern-e3e4c57d402d" target="_blank">советы тем, кто использует aws инфраструктуру и хочет работать с большими событиями</a>. Примеры кода на js;</li>
</ul>


<hr>

<p>Нашли опечатку или ошибку? Буду рад <a href="https://github.com/2pegramming/2pegramming.github.io/tree/master/questions">PR-у</a>.</p>
<p>Нашли опечатку или ошибку? Буду рад <a href="https://github.com/2pegramming/2pegramming.github.io/tree/master/questions" target="_blank">PR-у</a>.</p>
</div>

<!-- <div class="related"> -->
Expand All @@ -397,27 +397,27 @@ <h2 id="ссылки">Ссылки</h2>
<!-- -->
<!-- <li> -->
<!-- <h3> -->
<!-- <a href="/questions/how-i-use-obsidian-and-why/"> -->
<!-- Как и почему использую Obsidian -->
<!-- <small>14 Sep 2024</small> -->
<!-- <a href="/questions/how-to-be-sure-about-technical-decision/"> -->
<!-- Как убедиться, что техническое решение нужно? -->
<!-- <small>27 Sep 2024</small> -->
<!-- </a> -->
<!-- </h3> -->
<!-- </li> -->
<!-- -->
<!-- <li> -->
<!-- <h3> -->
<!-- <a href="/questions/graph-as-a-project-managment-tool/"> -->
<!-- Как слежу за большими проектами -->
<!-- <small>16 Aug 2024</small> -->
<!-- <a href="/questions/how-i-use-obsidian-and-why/"> -->
<!-- Как и почему использую Obsidian -->
<!-- <small>14 Sep 2024</small> -->
<!-- </a> -->
<!-- </h3> -->
<!-- </li> -->
<!-- -->
<!-- <li> -->
<!-- <h3> -->
<!-- <a href="/questions/data-model/"> -->
<!-- Как визуализировать схему базы данных -->
<!-- <small>01 Aug 2024</small> -->
<!-- <a href="/questions/graph-as-a-project-managment-tool/"> -->
<!-- Как слежу за большими проектами -->
<!-- <small>16 Aug 2024</small> -->
<!-- </a> -->
<!-- </h3> -->
<!-- </li> -->
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit f15120c

Please sign in to comment.