Получи случайную криптовалюту за регистрацию!

2pegramming

Логотип телеграм канала @pepegramming — 2pegramming 2
Логотип телеграм канала @pepegramming — 2pegramming
Адрес канала: @pepegramming
Категории: Технологии
Язык: Русский
Количество подписчиков: 3.25K
Описание канала:

Грустно об архитектуре и программировании.
https://pepegramming.site

Рейтинги и Отзывы

4.33

3 отзыва

Оценить канал pepegramming и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

2

3 звезд

0

2 звезд

0

1 звезд

0


Последние сообщения 3

2022-04-29 13:31:00 Пятничное чтиво

Старые записи стримов можно найти на ютубе. Так же буду рад предложениям, вопросам и идеям. Можно написать в личку, а можно в анонимную форму.

—————————————

Volatility Based Decomposition Example

В чате курса поделились ссылкой на вынос в отдельный сервис волативных частей кода/процессов. Автор сразу пишет что только разбирается с подходом и больше в книге, которую я не читал. Идея в том, что вынос сервисов, которые являются частью часто меняющегося бизнес процесса могут привести к проблемам в будущем ибо придется добавлять новые сервисы и менять коммуникации. Это напоминает подход, который стараюсь объяснить с выделением сервисов по бизнес процессам, а не по технической реализации этих процессов. Кроме того, кажется, что подобный подход пересекается с идеей core subdomain, который является отличающей частью бизнеса от конкурентов и часто изменяется.

#service_decomposition #ddd

—————————————

Correlation id and causation id in evented systems
Пояснения Greg Young на форуме EventStoreDB

Короткая статья, которая рассказывает correlation_id и causation_id, которые помогут с дебагом и обсервабилити событий. Идея в том, что в событии хранится три id: id события, id команды, которая вызвала событие correlation_id и id события которое связывается с прошлым событием/командой. Данный подход помогает построить цепочку событий (что за чем шло) и найти события, связанные с определенной командой в системе.

#events #eda

—————————————

After 5 years, I’m out of the serverless compute cult

У меня сложные отношения с serverless. С одной стороны я понимаю зачем нужен подход и какие проблемы решает serverless, а с другой - не видел примеров, когда весь код в serverless функциях явная необходимость, помогающая упростить или сделать систему проще для разработки/понимания.

Автор статьи описывает личные выводы, после 5 лет работы с serverless. В качестве претензий:

- сложности тестирования локально (выбор либо мокать все зависимости, либо тестировать в продакшене);
- так как говорится о serverless в экосистеме aws - появляются сложности с аккаунтами для разработчиков;
- проблемы с доступами аккаунтов;

Также, рассказывается о практиках, которые могут выстрелить в ногу:

- избегание практик программирования (KISS, DRY, etc);
- copy and paste culture
- хаос с зависимостями (как с инфраструктурой стороны, так и с практиками написания кода)
- отсутствие стандартизации API response

Статью стоит воспринимать как личный опыт автора и как список проблем которые стоит решить заранее, если выберете serverless. Рекомендую почитать комментарии, там пишут отличные от автора мнения.

#serverless
858 views10:31
Открыть/Комментировать
2022-04-22 13:31:00 Пятничное чтиво

Старые записи стримов можно найти на ютубе. Так же буду рад предложениям, вопросам и идеям. Можно написать в личку, а можно в анонимную форму.

—————————————

Handling Incompatible Schema Changes with Avro

Apache Avro - серелизатор, который позволяет серелизовать данные как в бинарный формат, так и в json. На ютубе можно найти стрим, где я рассказывал как серелизатор выглядит и как им пользоваться для описания событий. Сегодня статья - пример того, как обрабатывать ситуации, когда схема данных нарушает условие совместимости (breaking changes). Так как я авро использую для описания событий (хотя ничто не мешает взять серелизатор для rpc), то подобные проблемы решаю через версии (новая версия - изменения, ломающие уровень совместимости). В статье описывается подход в 5 шагов, включающий: предупреждение об изменении, добавлении нового поля, удалении старого поля и переименованного поля. В конце найдете таблицу с тем, что делать для 6 видов уровней совместимости.

#avro #compatibility_level

—————————————

Eventsourcing Patterns: Multi-temporal Events

Об эвент сорсинге тоже можно найти записи стримов с объяснением того, что это такое и как реализовать паттерн на руби. Часто события сохраняются в эвент стор с временным интервалом (например recorded_at), но случаются ситуации, когда время записи события сильно расходится со временем, когда событие произошло. Пример: система страхования, в которую записывается событие об аварии, но сама авария произошла намного раньше. В статье как раз описывается подобная проблема со временем когда событие произошло и записалось в эвент стор, а для решения проблемы предлагается использовать концепцию Multi-temporal Events. Важное замечание: подобный вид событий может подойти не только для event sourcing, но и для event-driven architecture style.

#event_sourcing #eda

—————————————

The Adventures of OS: Making a RISC-V Operating System using Rust

Пост не связанный с архитектурой, проектированием или чем-то высокоуровневым, а связанный с "как через написание с нуля понять принцип работы". Автор решил написать серию статей о том, как пишет ОС для RISC-V на rust. Я далек от системного программирования (слишком сложно для меня), но каждый раз восхищаюсь подобными историями, так как это выглядит как титанический труд. Кажется, что история закончилась реализацией игры pong в описанной операционке, так как это последний пост автора, написанный в феврале 2021 года.

#operating_systems #rust
1.0K views10:31
Открыть/Комментировать
2022-04-15 13:31:00 Пятничное чтиво

Последняя неделя до старта курса по асинхронным системам. Старые записи стримов можно найти на ютубе. Так же буду рад предложениям, вопросам и идеям. Можно написать в личку, а можно в анонимную форму.

—————————————

Why I’ve Been Merging Microservices Back Into The Monolith At InVision

В интернете часто вижу статьи из серии “как распилить монолит на сервисы” и редко обратные примеры, за что подобные статьи ценю. Сегодня как раз такой пример статьи, в которой автор делиться опытом обратного собирания сервисов в монолит, по причине связанной только с изменением организации команд.

Изначально компания пыталась решить проблему человеческого менеджмента через сервисы. Т.е. когда был монолит на 3 человека, все было ок, а когда размер компонентов системы не поменялся, но количество человек возросло - компания попробовала разделить систему на сервисы. Дальше система развивалась и начался переход с легаси платформы на modern платформу, куда переходили команды разработчиков, а сервисы оставались на саппорте у команды автора. И в итоге, набралось слишком много сервисов на одну команду, что привело к проблемам.

В статье нет готовых решений о том, как собрать сервисы обратно в монолит. Ценность статьи - в примере “жизни” системы, когда один и то же подход, в зависимости от контекста (изменение структуры команд в компании), подходит или наоборот мешает жить.

#soa #monolith

—————————————

В защиту функциональных рассмотрений целевой системы

У меня сложные отношения с системным мышлением. Я не один раз пытался пройти курсы/прочитать книгу о системном мышлении, но результат сильно отличался от ожиданий. При этом, мне нравится некоторые посты, которые можно найти в ЖЖ.

Сегодняшний пример - такая статья, которая 1 в 1 описывает мои чувства в плане работы с системами. А именно: с разбором того, что должно произойти, вместо того, чтобы сразу думать об имплементации. Сам страдаю подобной проблемой, так как пока работал разработчиком - в 90% случаев сначала думал как буду реализацию делать, а потом оказывалось, что сделать надо было другую работу. А мысли о собственных проектах начинались с “было бы круто сделать вот так и так”. На данный момент процент в разы уменьшился, но все равно продолжаю себя ловить на подобных мыслях, поэтому пару раз в год возвращаюсь к статье.

Статью стоит рассматривать только как подсветку проблемы. А как самопроверку могу предложить вопрос “название функции говорит о том, что будет сделано с точки зрения пользователя, или говорит о том, что с точки зрения кода выполнит функция?”

#мысли #functional_requirements

—————————————

Очереди сообщений в PostgreSQL с использованием PgQ

На прошлой неделе опубликовал статью об outbox паттерне. На что @porfirion рассказал, что в его компании используется pgq экстеншн для постгреса как способ реализации outbox паттерна. Экстеншен был написан разработчиками из skype. Я до этого не слышал о подобном, при этом документацию сложно назвать полноценной.

Сам экстеншен состоит из продьюсера и консьюмера, все работает через функции БД: SELECT * FROM pgq.create_queue(queue_name); . Консьюмер работает аналогично. При этом, присутствуют ретраи и распределение нагрузки (через другой экстеншен, pgq_coop).

#postgreSQL #performance

——— одной строкой ———

- Так как я перестал писать о руби - попросили пошарить рассылку по языку
1.9K views10:31
Открыть/Комментировать
2022-04-14 20:38:03 Запись стрима
1.8K views17:38
Открыть/Комментировать
2022-04-14 20:34:00 Live stream finished (1 hour)
17:34
Открыть/Комментировать
2022-04-14 19:03:17 Если что - чат для общения в комментариях под этим сообщением
1.9K views16:03
Открыть/Комментировать
2022-04-14 19:00:48 Live stream started
16:00
Открыть/Комментировать
2022-04-11 13:31:00 Так как третий поток курса по проектированию асинхронных систем начнется через неделю - меня попросили провести стрим с ответами на вопросы.

Перед каждым запуском курса, мы с Федей проводили встречи, где отвечали на вопросы по курсу или просто обсуждали темы связанные с асинхронными системами, ддд, менеджментом и прочим. В этот раз Федя занят, поэтому мне придется отдуваться одному.

Стрим будет в четверг (14 апреля), в 19:00 по московскому времени, в телеграмме. Будем обсуждать вопросы связанные с курсом, архитектурой, ддд, опен сорсом, обучением, развитием, факторио и так далее.

P.S.: технические опасения - так как в тг я таким не занимался самостоятельно - скорее всего буду тупить. Думал на ютубе сделать нормальный стрим, но моральных сил на это не хватило
3.1K views10:31
Открыть/Комментировать
2022-04-08 13:31:00 Пятничное чтиво

—————————————

Sending Reliable Event Notifications with Transactional Outbox Pattern

В канале уже было несколько статей о transactional outbox pattern (по поиску можно найти 2 или 3 штуки). Суть паттерна в использовании outbox таблице, в которую попадают сообщения из системы, которые потом автоматически отправляются в брокер. Это позволяет “отправлять” события в одной транзакции БД + гарантировать порядок событий (через средства БД в которой находится outbox таблица). Есть готовые решения, а можно написать свое.

В статье найдете подробное объяснение проблемы, которую решает паттерн, пример схемы outbox таблицы, заметки о возможных проблемах (двойная запись, что делать, как избежать отправки события при откате транзакции и так далее). В конце три юзкейса паттерна. Если хотите разобраться в паттерне - наверно самая полная статья из того, что я видел (если знаете лучше - пишите в комментариях, буду рад найти статьи лучше).

#events #transactional_outbox

—————————————

Migrations Done Well: Typical Migration Approaches

Миграции (сервисов, данных, версий технологий) рискованный процесс, который, без опыта, превращается в русскую рулетку. Автор приводит примеры 4 случаев, когда планы разошлись с реальностью. Статья заинтересовала списком видов миграции, а так же рассуждениями, как, с наименьшими потерями, произвести каждый из видов миграции. Что описывается:

- Замена сервиса со старой версии на новую;
- Интеграция нового сервиса;
- Вынос сервиса из части кода;
- Миграция кода с одного языка или фреймворка на другой;
- Миграция данных (тут о базе данных, схеме и так далее);
- Инфраструктурные миграции (привет переезд в k8s кластер);
- Апгрейд инструментов. Самый неочевидный для меня пункт, так как не задумывался, что это новая версия системы и следовательно тоже миграция;

#data_migration #service_extraction #migration

—————————————

Five Easy to Miss PostgreSQL Query Performance Bottlenecks

Пять примеров, как использовать EXPLAIN ANALYZE постгреса для поиска ботлнеков в запросах. Из примеров:

- поиск функций, замедляющих запрос (на примере lower());
- что делать с медленными LIKE и ILIKE;
- замедления из-за пустых значений;
- null_indexes;
- что делать с долгими транзакциями и почему стоит избегать таких транзакций;

#postgreSQL #performance
3.2K views10:31
Открыть/Комментировать