2pegramming
前往频道在 Telegram
Грустно об архитектуре и программировании. https://pepegramming.site Ответы на вопросы подписчиков: http://pepegramming.site/questions/
显示更多4 517
订阅者
无数据24 小时
+17 天
+1030 天
数据加载中...
相似频道
标签云
进出提及
---
---
---
---
---
---
吸引订阅者
七月 '26
七月 '26
+22
在0个频道中
六月 '26
+35
在0个频道中
Get PRO
五月 '26
+60
在0个频道中
Get PRO
四月 '26
+21
在0个频道中
Get PRO
三月 '26
+22
在0个频道中
Get PRO
二月 '26
+46
在0个频道中
Get PRO
一月 '26
+41
在0个频道中
Get PRO
十二月 '25
+23
在0个频道中
Get PRO
十一月 '25
+43
在0个频道中
Get PRO
十月 '25
+87
在0个频道中
Get PRO
九月 '25
+35
在0个频道中
Get PRO
八月 '25
+26
在0个频道中
Get PRO
七月 '25
+48
在0个频道中
Get PRO
六月 '25
+51
在0个频道中
Get PRO
五月 '25
+67
在0个频道中
Get PRO
四月 '25
+54
在1个频道中
Get PRO
三月 '25
+49
在0个频道中
Get PRO
二月 '25
+68
在0个频道中
Get PRO
一月 '25
+85
在0个频道中
Get PRO
十二月 '24
+83
在1个频道中
Get PRO
十一月 '24
+117
在0个频道中
Get PRO
十月 '24
+496
在1个频道中
Get PRO
九月 '24
+122
在1个频道中
Get PRO
八月 '24
+46
在0个频道中
Get PRO
七月 '24
+71
在0个频道中
Get PRO
六月 '24
+95
在0个频道中
Get PRO
五月 '24
+45
在0个频道中
Get PRO
四月 '24
+26
在0个频道中
Get PRO
三月 '24
+81
在0个频道中
Get PRO
二月 '24
+35
在0个频道中
Get PRO
一月 '24
+43
在0个频道中
Get PRO
十二月 '23
+72
在0个频道中
Get PRO
十一月 '23
+52
在0个频道中
Get PRO
十月 '23
+67
在0个频道中
Get PRO
九月 '23
+58
在0个频道中
Get PRO
八月 '23
+128
在0个频道中
Get PRO
七月 '23
+35
在0个频道中
Get PRO
六月 '23
+94
在0个频道中
Get PRO
五月 '23
+27
在0个频道中
Get PRO
四月 '23
+40
在0个频道中
Get PRO
三月 '23
+53
在0个频道中
Get PRO
二月 '23
+28
在0个频道中
Get PRO
一月 '23
+33
在0个频道中
Get PRO
十二月 '22
+27
在0个频道中
Get PRO
十一月 '22
+47
在0个频道中
Get PRO
十月 '22
+105
在0个频道中
Get PRO
九月 '22
+172
在0个频道中
Get PRO
八月 '22
+105
在0个频道中
Get PRO
七月 '22
+75
在0个频道中
Get PRO
六月 '22
+89
在0个频道中
Get PRO
五月 '22
+83
在0个频道中
Get PRO
四月 '22
+169
在0个频道中
Get PRO
三月 '22
+250
在0个频道中
Get PRO
二月 '22
+30
在0个频道中
Get PRO
一月 '22
+29
在0个频道中
Get PRO
十二月 '21
+31
在0个频道中
Get PRO
十一月 '21
+84
在0个频道中
Get PRO
十月 '21
+49
在0个频道中
Get PRO
九月 '21
+53
在0个频道中
Get PRO
八月 '21
+69
在0个频道中
Get PRO
七月 '21
+49
在0个频道中
Get PRO
六月 '21
+77
在0个频道中
Get PRO
五月 '21
+40
在0个频道中
Get PRO
四月 '21
+70
在0个频道中
Get PRO
三月 '21
+105
在0个频道中
Get PRO
二月 '21
+571
在0个频道中
Get PRO
一月 '21
+125
在0个频道中
Get PRO
十二月 '20
+1 299
在0个频道中
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 21 七月 | +1 | |||
| 20 七月 | +1 | |||
| 19 七月 | 0 | |||
| 18 七月 | 0 | |||
| 17 七月 | +3 | |||
| 16 七月 | 0 | |||
| 15 七月 | +1 | |||
| 14 七月 | 0 | |||
| 13 七月 | +3 | |||
| 12 七月 | 0 | |||
| 11 七月 | 0 | |||
| 10 七月 | +1 | |||
| 09 七月 | 0 | |||
| 08 七月 | 0 | |||
| 07 七月 | 0 | |||
| 06 七月 | +1 | |||
| 05 七月 | +2 | |||
| 04 七月 | +2 | |||
| 03 七月 | +4 | |||
| 02 七月 | 0 | |||
| 01 七月 | +3 |
频道帖子
Пятничное чтиво
Ссылки уходят в ежегодный летний отпуск на месяц с 1го июля. Увидимся в начале августа. Спасибо что читаете и пишете комментарии ❤️
Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
How Spotify Recommends Your Next Favorite Song
Помню, удивился, что в шазаме используются преобразования фурье для поиска песен. Сегодня статья тоже о музыке, точнее о том, как спотифай рекомендует треки.
Начинается текст с объяснения collaborative filtering. Идея в том, чтобы создать матрицу с коэффициентами, основанных на том, как пользователь реагирует на треки (пропуски, повторения и так далее). После автор рассказывает о том, что к поведению пользователя добавляется «культурный» пласт. Тут парсятся блоги, тексты песен, журналистика и строятся векторы для маппинга песен на жанры или «эмоции». А для песен, загруженных несколько минут назад, файл прогоняется через «deep acoustic feature extraction pipeline». Далее описывается, как отдельные алгоритмы работают вместе, где тут используется кафка и что лежит в кассандре.
В конце текст переходит в техническую плоскость. Дается таблица технических решений. А также описываются трейдофы решения: точный/приблизительный поиск, выбор между eventual и immediate consistency и так далее. Текст выглядит как сгенерированный нейронкой, но о процессе обработке информации почитать было интересно.
#how_it_works
—————————————
Жизненный цикл API
«Жизненный цикл» чаще используют для обсуждения SDLC (жизненный цикл разработки), хотя жизненный цикл относится и к коду, сервисам, схемам асинхронных событий и так далее. Статья выше о том, что происходит с API от планирования до выведения из эксплуатации.
Текст начинается с описания основных этапов ЖЦ: планирование, проектирование, реализация, тестирование, развертывание, сопровождение и вывод из эксплуатации. Каждый этап подробно описывается. Так в планировании, стоит задуматься о solution requirements и ответить на вопросы о том, кто пользователи, какие сроки и так далее. В этапе проектирования описываем схемы, в реализаци — пишем кодпро. В тестировании автор упоминает о видах тестов (интеграционное, контрактное, сквозное и т.д.). Отдельно порадовало упоминание «квадрантов agile-тестирования». В конце описываются идеи вокруг управления API и «фантазии» о будущем API.
#api
—————————————
How I’d Design a Global Payment System
В канале редко упоминаются статьи в духе «я спроектировал аналог Х», так как 99% таких текстов о том, как проходить system design interview. Но сегодня решил сделать исключение, так как автор решил заморочиться и выйти за пределы интервью.
Текст начинается не с постановки проблемы, а с терминологии. Даются определения payment gateway и payment processor (первое о передачи данных между устройством и банком, второе — о проведении платежа). Далее автор описывает то, что будет проектирование: проведение платежей, регулярные платежи, рефанды и разрешение споров. Плюсом задаются характеристики (миллионы запросов, 4 «девятки», масштабируемость и так далее). Далее описывается три слоя из которых будет система: фронтенд, бек (конечно же на сервисах с кафкой) и как хранить данные данные. Понравилось, что показывается схема данных для каждого из сервисов. Ближе к концу описывается flow транзакций в 8 шагов, включая антифрод. А в конце описываются quality тактики, которые автор выбрал вокруг reliability, scalability и security.
К границам сервисов и названию топиков кафки есть вопросы, но это дискуссионная тема статьи.
#system_design
| 2 | Пятничное чтиво
Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
How Netflix Maps Thousands of Microservices in Real-Time
Очередная статья о нетфликсе, в которой рассказано, как в компании решали технические проблемы. Сегодня текст о том, как в компании улучшали наблюдаемость системы, а именно строили граф связи сервисов. Для этого создали Service Topology, о которой и рассказывается в тексте.
Текст начинается с описания мотивации компании: повторяющиеся вопросы о структуре распределенной системы от инженеров, которые систему чинили или меняли. Плюсом, полезно было бы сразу понимать, что заденет изменения в сервисах. Для этого решили собирать информацию с трех мест: eBPF network flow logs, IPC metrics (для эндпоинтов) и распределенные трассировки. Далее положили собранную информацию в графовую бд, подключили grpc, настроили фильтрацию (включая фильтрацию по времени работы) и получили «карту» системы. Причем, данные хранятся не как снапшот, а с привязкой ко времени, что позволяет собирать временные проджекшены.
#how_it_works #observability #distributed_systems
—————————————
Fundamental concepts of plugin infrastructures
Чем дольше живу, тем больше думаю о недооцененности системы плагинов для создания софта. В частности, недооцененность microkernel архитектурного стиля. Хоть плагины распространены в редакторах, браузерах, играх и других приложениях, но считаю собственным долгом двигать эту тему в массы. Поэтому сегодня статья о четырех концепциях для реализации плагинов.
Начинается текст с примера на python, где автор решает сделать blog engine для генерации html. Далее объясняется, при чем тут плагины и показывается подход, который нравится автору: через plugin registry, хуки и discovery через загрузку модулей. Во второй части текста описываются четыре концепции, о которых стоит помнить: discovery, registration, mount points и extension API. В конце рассматривается как в mercurial и wordpress реализованы эти четыре концепции.
#microkernel #plugin_system
—————————————
Как найти медленный запрос в PostgreSQL: три инструмента мониторинга
Продолжение статьей о том, как оптимизировать запросы в постгрес. В тексте найдете описание трех инструментов:
- pg_stat_statements. Отслеживает статистику выполнения запросов к бд, попутно группируя одинаковые по структуре запросы. Как примеры использования, приводится поиск частых и медленных запросов, а также запросов с низким уровнем кеширования;
- auto_explain. Автоматически выполняет EXPLAIN ANALYZE для медленных запросов с записью плана в лог. Тут важно следить за количеством записанных логов;
- log_min_duration_statement. Записывает в лог запросы, которые выполняются медленнее, чем заданный порог. Тоже важно следить за размером лога.
Так как каждое из трех инструментов расширения — ставить каждое придется через изменение postgresql.conf (в статье описаны шаги для включения и настройки). В конце найдете «эвристику» для выбора, какое из расширений включать в зависимости от нагрузки и окружения (дев/стейдж/прод).
#psql | 1 828 |
| 3 | Пятничное чтиво
Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
Сколько стоит ваш техдолг: методики, цифры, российская специфика
В канале раз 5 упоминались статьи связанны с тех долгом, например «вводная» статья упоминалась год назад (остальные статьи по тегу). Сегодня еще один текст о долге, только авторы решили посчитать «долг» в рублях.
Текст начинается с объяснения, почему тех долг не видит бизнес и наоборот. Авторы связывают отчетность и фокус внимания бизнеса, куда не попадает техническая составляющая, не говоря уже о долге. Далее предлагается три способа подсветить долг бизнесу: прямые опросы людей, добавление тега «tech dept» в «джиру» и git churn (показывает процент перезаписанного кода за время). В конце предлагается три способа «оценки» долга в деньга:
- Считаем время, потраченное на затупы из-за тех долга и умножаем на часовую ставку. Берем цифру и показываем, сколько денег можно сохранить;
- Берем SonarQube и SQALE, полученное значение умножаем на часовую ставку, идем к бизнесу и повторяем первый вариант;
- Считаем cost of delay. Тут нужно посчитать задержку выхода фичи, в итоге получаем два числа: сколько времени фича реально делалась и сколько делалась бы без задержек.
P.S.: Учтите, что статья в блоге компании, которая «продает» собственное приложение. На базовую информацию не влияет, но мало ли.
#tech_debt
—————————————
PostgreSQL 19: Native Graph Queries Are Here
Случайно узнал, что осенью поменяю планы и буду ковыряться с постгресом. Связанно это с тем, что в сентябре выходит 19 версия, где главная, для меня, фича — нативная поддержка графов (хотя возможно гта победит графы). Почему-то уверен, что графы появились благодаря RAG и LLM. Синтаксис запросов уже описан в ISO SQL:2023 Part 16, а язык запросов назвали SQL/PGQ (Property Graph Queries). Статья выше объясняет как будет выглядеть работа с графами в пг.
Пересказывать статью не буду, кратно расскажу как работает. Для начала работы с графами определяем property graph. Делается это через CREATE PROPERTY GRAPH, где явно указываются vertex (ноды, вершины) и edges (связи) таблицы (причем таблиц может быть больше одной). А что бы сделать запрос, используется SELECT * FROM GRAPH_TABLE (property_graph MATCH ...). Плюс стандарта в том, что язык запроса похож на cypher.
В статье найдете примеры и, что радует, автор описал ограничения: fixed-depth pattern matching. Ну и другие фичи 19 версии тоже описываются.
#psql #graph
—————————————
What Is the 3-2-1 Backup Rule and Why It's Evolved to 3-2-1-1-0?
Я не DBA, поэтому о правиле 3-2-1 слышал, но использую только для 3 наборов данных и это не о коде. Если что, 3-2-1 о том, что нужны 3 копии, на 2 видах носителей и 1 копия должна быть в другом гео месте. Поэтому удивился, когда увидел 3-2-1-1-0 схему, думая что 3-2-1 уже заморочена для 80% проектов, но киберпреступления повлияли на бекапы.
Начинается текст с объяснения 3-2-1 подхода, быстро переходя в ответ на вопрос — почему такого подхода уже не хватает (спойлер: с шифровальщиками не помогает). Поэтому, как эволюция подхода, предлагается добавить 1 иммутабельную копию, отключенную от интернета и 0 ошибок от проверки восстановления (поэтому 3-2-1-1-0). Далее рассказывается, как реализовать новое правило: локальный бекап на диске, второй бекап на другом носителе, cloud copy, копия на ленте/в облаке с object lock и автоматизация накатки бекапов. В конце описываются best practices и FAQ (вопросы — пересказ статьи).
Русский перевод
#db #backups | 1 920 |
| 4 | Пятничное чтиво
Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
Scaling ArchUnit with Nebula ArchRules
Статья от нетфликса, в которой инженеры делятся опытом решения проблем с обратной совместимостью совместимостью библиотек. А так как нетфликс использует джаву, то для решения взяли ArchUnit («тесты» для структуры проекта на джаве).
Текст начинается с проблемы: библиотека обновилась с breaking changes, из-за чего развалились сервисы на джаве. Как решение управления жизненным циклом библиотек выбрали archnunit, потому что работает поверх байткода (т.е. работает в jvm стеке), позволяет добавлять правила и содержит низкоуровневый API для сложных правил. В самом начале работы, инженеры, решили настроить работу с централизованным стором правил для проектов (чтобы не копировать правила из проекта в проект). Далее описывается как запускаются правила и как работать с артефактами библиотеки. В конце описываются некоторые примеры правил (безопасность, применение nullable аннотаций и так далее)
Отдельно отмечу, что в русском переводе встречаются комментарии от джава разработчика, который раскрывает части статьи для людей вне джава экосистемы. Отдельно упомяну первый комментарий (в тексте), где дается ссылка на реддит с обсуждением использования модулей, вместо archunit.
Русский перевод
#archUnit #fitness_functions
—————————————
A Field Guide to Alternative Storage Engines for PostgreSQL
Статья из серии «а что, так можно было?» (я не настоящий DBA). В 2019 году в 12 постгресе сделали table access method API. Предполагалось, что будут добавляться новые способы для хранения данных (колонки для аналитики, undo-log для OLTP и так далее). Автор текста выше решил написать, что из себя представляет экосистема.
Текст начинается с объяснения принципов работы API. Тут важно, что TAM API не является «настоящим» pluggable storage layer, только tuple-shaped abstraction. При этом, индексы тоже не работают. Ну и механизмы разбиваются на 4 группы:
- Heap replacements;
- Columnar;
- Lakehouse-backed (тут постгрес — интерфейс запросов поверх внешнего колоночного механизма);
- Специализированные TAM модели (тут автор упоминает три решения, одно связана с TimescaleDB и уже умерло).
Для каждой группы автор приводит примеры реальных проектов, кратко объясняя как TAM работает. А в конце делится советами по выбору подходящего TAM (если конечно решитесь).
#psql
—————————————
Building a mental model for Stripe payments
Мне нравятся статьи в которых описывается реализация домена (8 лет жду аналога книги Фаулера). Статья выше — почти такая статья, потому что текст, в краткой форме, описывает принципы работы и объясняет работу стейт машины для PaymentIntent.
Начинается пост с примера: делаете магазин, доходите до страницы оформления заказа — начинаются проблемы. Как минимум, придется думать о взаимодействии с платежными системами, банком клиента, anti fraud процессах, соблюдении нормативов и так далее. Далее рассказывается о PaymentIntent объекте: намерение получить платеж от клиента. Сам объект отслеживает жизненный цикл платежа от старта и до конца (картинка с sequence diagram прилагается). Далее описываются пять этапов, через которые проходит платеж (оформление заказа, токенизация, аунтификация, capture и расчет со сверкой). В конце описывается, как работать с вебкухами страйпа, что бы знать что с платежом происходит.
Если устанете читать — на сайте сделали «терминал», где запускается змейка (вызывается на <c>).
#payments #domain_implementation | 1 998 |
| 5 | Пятничное чтиво
Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
A Promising New Metric To Track Maintainability
Стараюсь пропагандировать ADD, где ключевая идея — принятие решений на основе характеристик. В случае с исчисляемыми метриками — вопросов нет. Сложности начинаются с «субъективными» и не исчисляемыми метриками, например с maintainability или modifiability. Поэтому сегодня статья, где предлагается математическую модель для расчета maintainability.
Начинается текст с предположения, что coupling и cyclic dependencies помогут с расчетом, но, из-за вертикального и горизонтального разбиения, значения считать сложно. Как решение вводится понятие verticalization, благодаря которому, получается Maintainability Level через работу с циклами графа. Во следующей версии метрики, вводится штраф за «длину» цикла. После чего автор занимается fine tuning метрики. Для систем с малым количеством компонентов, метрика работала плохо. Вторая ситуация возникла, когда метрика показала «хорошее» значение, но разработчики были не удовлетворены поддерживаемостью. Проблема оказалась в структуре модулей, которую решили дополнительным условием.
#maintainability
—————————————
Why senior developers fail to communicate their expertise
Проблемы в коммуникации между техническим отделом и «бизнесом» — база. Причин много: отличия в «важности» (у одних — сложность реализации фичи, у вторых — как инвестора на деньги разорить), разные цели от системы и так далее. Причин много, но автор статьи решил пойти по пути разбивки «бизнеса» на два цикла: вывод продукта на рынок и работа с платящими клиентами.
Начинается текст с ситуации, когда бизнес приходит с гениальной идеей: «меняем разработчиков на LLM». От подобной идеи у разработчиков дергается глаз из-за сложности (complexity). Через конфликт, автор вводит первый цикл (в котором находятся продажники, продакт-менеджеры, CEO): компания выводит продукт на рынок и получает фидбек. В таком цикле главная проблема — неопределенность, которая решается скоростью получения фидбека. Во втором цикле, где компания предоставляет услугу пользователю и получает деньги, главное — стабильность, а со сложностью проблема. Далее автор связывает два цикла через «компанию» из-за чего получается несогласованность между людьми в разных циклах. В конце предлагаются решения, о чем уже прочтете в статье.
Русский перевод
#ppl_communications
—————————————
On mashing up modelling techniques for fun and profit
Статья заинтересовала идеей смешивания context map из ddd и c4 в одну модель. Если что, идея context map в отображении bounded context из DDD и связей между контекстами. А главная ценность — отображение паттернов коммуникаций из DDD. Добавив информацию о «типах» коммуникаций контекстов в с4, получаем больше информации о взаимодействии частей системы не только на техническом, но и на социо уровне (а software system — socio-tech system).
Начинается текст с показа автором модели совмещенного context map и c4, которую сделали для воркшопа. А после объяснения плюсов подхода показывается как подобные модели делать. Сначала делается c4 level 1 с интеграциями, после чего добавляется level 2. Далее добавляются паттерны коммуникации на level 2 (open host, anti-corruption и так далее). После чего добавляются контексты и объясняется в чем плюсы и минусы подхода. В конце дается название подходу (Model Storming). Единственное что огорчило — нет конкретных инструментов, а статья сугубо идейная.
#c4 #ddd | 1 945 |
| 6 | Пятничное чтиво
Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
Seeing like a spreadsheet
Надо признаться — я фанат таблиц (которые sheets). И с каждым годом больше и больше верю, что если бизнес модель нельзя описать в таблицах, то лучше два раза подумать, перед тем как связываться с таким бизнесом. Автор статьи описывает собственные размышления о том, как таблицы поменяли бизнес в америки.
Начинается текст с того, как работали до появления таблиц: как страдали коммуникации и почему бизнес был чаще семейным. Далее появляются заводы, следовательно требования к контролю увеличиваются, что приводит к развитию инструментов координации. Но проблемы проверки и расчетов никуда не девались, что привело к появлению таблиц в 60-70тых годах. Далее автор описывает появление VisiCalc (визуальный калькулятор) — прародителя современных таблиц, благодаря которому появился сначала lotus, а потом и excel. В последней части автор описывает как таблицы повлияли на симуляцию и финансы и в конце подвязывает нейронки.
#sheets
—————————————
Путеводитель по матанализу, который скрывали от вас в вузе
На прошлой неделе упоминал статью с попыткой автора «натянуть» концепции из матанализа на код. Пока читал статью, понял, что матан уже забыл, поэтому сегодня — краткое интро в матанализ. Причем не список терминов, а логика развития идей Аристотеля, которые в конце придут к матанализу (в институте был только Коши, поэтому статья и появилась в канале). Сразу скажу, по ссылке лонгрид, также отмечу, что комментарии посмотреть тоже стоит (всего их 325 штук).
Текст целиком пересказывать не буду из-за объема (3 части и 11 глав в сумме). Вместо этого расскажу о том, что самому было интересно прочитать. Во первых, понравилась, сама идея объяснения анализа через логические рассуждения, без эпсилон-дельта приколов (пример логического доказательства найдете в самом начале). Также понравилось, как размышления философов подвязали с бесконечностью и множествами. Плюсом, понравилось как вывелось определение производной через «о-малое».
#math
—————————————
Payment systems don’t move money. They move promises.
Статья из серии «как работает Х». В тексте выше, автор, объясняет как работает payment processing, при чем тут две системы («быстрая» и «медленная», которые называет clocks) и почему в момент оплаты ничего, кроме «обещания оплаты» не происходит.
Начинается текст с объяснения того, как работает «быстрая» система (говорит, что клиент намерен что-то сделать с доступным балансом). При этом, банк, в этот момент, не включается в процесс. В него только уходит намерение, которое может обрабатываться от секунд, до дней. «Медленная» система уже получает событие из банка и работает с ledger. Далее описывается «стандартная» ошибка: posting to the ledger inside the bank callback (нормального перевода не придумал, поэтому цитатой), что приводит к расхождению данных, дублям и другим проблемам. Далее описывается payout table, таблица, в которую пишутся намерения из «быстрой» системы и которую обновляет колбэк из банка. Ну а ledger уже использует payout table. А в конце, автор отвечает на популярные вопросы (зачем нужен баланс и ledger в разных местах, почему не взять CQRS или сагу и так далее).
#payment #fintech | 2 148 |
| 7 | Пятничное чтиво
Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
Selective Test Execution at Stripe: Fast CI for a 50M-line Ruby monorepo
Очередная статья, в которой компания описывает, как решала проблемы в технической системе. Сегодня страйп, который сделал один из самых больших руби монорепозиториев (50+ миллионов строк). А возникшая проблема — как перестать гонять миллионы тестов на каждый PR. Спойлер: написали собственный анализатор измененных файлов, на основе которого запускаются только нужные тесты. Мне тема интересна, потому что в топтале (когда я там работал), тесты гонялись полчаса в 60+ потоков. А для решения похожей проблемы для подобной проблемы использовались сети петри.
Текст начинается с описания проблемы: 50к сборок в неделю, 1.2 миллиона тестов, каждый раз гонять такое количество тестов возможности нет. Для решения проблемы в компании решили построить граф зависимостей, основанный на том, какие файлы вызываются во время прогона тестов (единственный способ для руби из-за «динамичности»). Сделали это с помощью библиотеки на с++, которая перехватывает «открытые» файлы на уровне ОС. Далее описываются корнер кейсы: что делать с тестами, которые только ищут файлы, что делать с областью видимости, как работает планировщик и выбирает тесты для нового кода. В конце описывается, где хранится мета по тестам (спойлер: в монге) и как хранятся «релизы».
#how_it_works #testing
—————————————
Математический анализ для разработчика: что действительно нужно понимать
В институте проходил и матанализ и линал, в реальной жизни пригодился только линал (матрицы, вектора и пересечения плоскостей). А вот с матанализом не срослось, мозги вправило, но неопределенные интегралы, градиенты и любые эпсилоны больше нуля так и остались воспоминанем. Статья выше — попытка предположить, где абстракции из матанализа могут помочь в анализе кода.
Так, автор начинает с области видимости функции. В качестве примера используется функция 1/x, которая не определена в точке 0, что приводит к ошибкам. Далее рассказывается о пределах, который привязывается к bigO. После рассматривается непрерывность и производные. Причем производная привязывается к определению «скорости» роста метрик (latency в случае текста). Далее рассматривается приближения и разложения Тейлора (когда сложная функция раскладывается на бесконечную сумму степенных функций) и многомерный анализ. Хоть текст написан нейронкой (уверен на 90%), статья дает повод подумать о том, где и как использовать абстрактные понятия в работе.
#math
—————————————
How to Pick a Database for Your System \(Without Guessing\)
Еще одна статья о том, как выбирать базу данных, на основе требуемых свойств. В отличии от других статей, упоминавшихся в канале, автор решил выбирать по PACELC, а не CAP. Хотя текст и начинается с объяснения CAP теоремы, автор приходит к обсуждению ситуации, при которой availability и consistency не достижимы одновременно. Благодаря этому происходит переход к PACELC. А после показывается как выбирать между 6 бд (упоминается кассандра, монга, постгрес, редис, динамоДБ и cockroachDB). Для этого автор предлагает в основе выбора использовать характеристики из PACELC и вид бд. А в качестве дополнительных критериев — internal mechanisms и юзкейсы каждой из бд.
#db | 2 174 |
| 8 | Пятничное чтиво
Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
How Instacart Built a Search for Billions of Products
Статья от компании instacart (аналог купера), в которой рассказывается о том, как решалась проблема поиска. Идея в том, что люди по разному ищут продукты. Запросы выглядят как «здоровые продукты», «соус для пасты 227г» и так далее. При этом, результат семантического поиска и поиска по ключевым словам должен соответствовать ожиданиям. Для этого, в компании, решили сделать два параллельных способа поиска, о чем в статье рассказывается.
Текст начинается с описания проблемы с параллельными флоу поиска. Причем, особенность поиска в том, что товары быстро появляются и также быстро «пропадают» со склада. Для этого ввели два параметра для оценки поиска — полнота и точность. Далее описывается, почему отказались от elasticsearch (переиндексация на изменения подвела) и как переезжали в постгрес. Следующий этап — добавление семантического поиска с помощью FAISS, который заменили на pgvector. В конце найдете информацию о проблемах подхода и рассуждения о скейлинге поиска.
#how_it_works #search
—————————————
Going Critical
С начала этого года разбираюсь в network science, поэтому сегодняшняя статья по теме. Текст выше о диффузиях в сетях, т.е. о том, как «информация» распределяется в сети (пожары, мемы в интернете, сплетни, вирусы и так далее). Причем статья интерактивная, что редкость для подобных текстов. А если думаете зачем читать о сетях — подобным образом можно симулировать отказы в software systems.
Начинается текст с создания «простой» модели в виде сети 7х7, в центре которой «зараженная» нода. При этом, «заражение» происходит с 100% вероятностью для заражений. Далее вводится понятие SIR model, которая состоит из нод в трех состояниях (восприимчивый, зараженный, удаленный). Но такая модель не симулирует ситуации, когда «зараженная» нода перестает быть зараженной и становится снова восприимчивой. В таких случаях помогает SIS simulation (вместо удаления, нода снова становится восприимчивой). Далее рассказывается о critical threshold, точке «перелома» между субкритической и сверхкритической сетью. Также рассказывается о том, как симулируются «заражения» в разных частях сети, иммунитеты у нод, влияние degree (количество связей у ноды, причем, через degree можно «симулировать» города). Ближе к концу найдете примеры симуляции «знаний». А в конце автор рассматривает feedback loop между технологиями и знаниями (знания создают технологии, которые увеличивают знания).
#network_science
—————————————
The Map of System Topologies
Текст выше — не статья в привычном смысле, скорее это попытка систематизировать архитектурные стили и паттерны вокруг структуры кода. Т.е. автор раскидал паттерны на плоскости, в результате чего получил пять «регионов», о которых и рассказывается в статье.
В начале текста описывается методология, которой придерживался автор. Так предлагается делить паттерны на техническое разделение (слои), бизнес разделение (сервисы) и шардирование. В результате чего, от шардирования пришлось отказаться, как и от экзотики (в итоге я насчитал 40 паттернов). Далее, автор выделяет пять групп:
- Monolithic, система целиком — один компонент;
- Layered, система делится технически на слои;
- Services, система делится по бизнес функциям;
- Fragmented systems, система состоит из множества мелких частей;
- Plugins, система состоит из cohesive core и модулей.
В самом тексте подробно описывается каждая группа, причем с разбивкой на виды. Так монолиты бывают с плагинами, с auxiliary layers и так далее. А в конце найдете выводы автора по топологии.
#patterns | 2 128 |
| 9 | Пятничное чтиво
Буду рад предложениям, вопросам и идеям связанным с каналом или архитектурными/техническими вопросами. Можно написать в личку, а можно анонимно. А ответы на вопросы можно прочитать на сайте.
—————————————
Why Root Cause Analysis doesn't work in Complex Systems
Главная идея Root Cause Analysis — у каждой проблемы существует причина. Поймете причину — проблема больше не повториться. Звучит логично, но для «сложных» систем причины не явно связаны между собой, о чем рассказывает автор в статье выше.
Текст начинается с объяснения идей и подходов из Root Cause Analysis. Тут найдете упоминание диаграмм Исикавы (если видели диаграммы в виде скелета рыбы — это оно). А также описываются «5 why?» и другие методы. Далее описываются недостатки RCA: наличие проблем возникающих из суммы причин, а RCA в такие проблемы не умеет. Эта мысль раскрывается через feedback loops, где изменения в одном месте, усиливает/ослабляет эффекты в других частях системы.
В качестве альтернативного подхода, к анализу проблем, автор предлагает рассмотреть теорию ограничений (которую автор называет протосистемным подходом), flow diagrams и карты feedback loops. А в последней части текста автор предлагает 3 подхода к улучшающему вмешательству (PDSA и эксперименты)
#system_analysis #system_thinking
—————————————
Anti-patterns in event modelling - Passive-Aggressive Events
Отсутствие событий — ситуация, с которой сталкиваюсь в каждом первом проекте, где реализуют асинхронную коммуникацию. Под «отсутствием событий» подразумевается то, что сообщения, которые передаются либо являются данными (UserEvent), либо командами (CalculatePrice), а не событием (фактом того, что что-то произошло). Статья выше о «скрытых» командах, т.е. «событиях», которые автор называет пассивно-агрессивными.
Начинает автор с аналогий из реального мира, где встречается пассивно-агрессивный тон. Далее подводится идея, что подобный тон в событиях говорит о «скрытых командах», т.е. сообщение передает информацию, но ждет, что будет что-то сделано. Подобное поведение, автор, сократил до следующей фразы: «я свою работу выполнил, теперь твоя очередь». Далее возникает утверждение, что если передаем команду, а не событие, то придется делать синхронный вызов. На что приводятся мысли Сэма Ньюмана (написал книгу о микросервисах), что синхронная от асинхронной коммуникации отличается только блокировкой. После чего появляется еще один вид сообщений — документ (если курсы проходили, то это репликация). Ну и в конце рассказывается где использовать события, команды и документы.
#event_driven
—————————————
Why scrum is stressing you out
Модели жизненного цикла принято критиковать за то, что модели перестали быть тем, что изначально закладывали авторы. Такая судьба постигла waterfall, аджайл и другие подходы. По ссылке выше, автор решил описать собственные мысли, почему скрам вызывает столько стресса. Важный момент: в тексте описывается не «каноничный» скрам, а то, что сейчас называют скрамом.
В тексте найдете четыре причины почему скрам вызывает стресс:
- спринты не кончаются. Т.е. нет периодов нагрузки и отдыха, как в том же waterfall;
- отсутствие контроля у команд с какой скоростью надо деливерить и работать;
- игнорирование подготовительной работы (обдумывание, обучение, отдых, рефакторинг и так далее);
- создание scrumfall, гибрида scrum со спринтами и нагрузки из waterfall в «важный» дедлайн (релиза).
Русский перевод
#ppl_managment | 2 099 |
