Книжный кружок. Рецензия на книгу «Микросервисы от архитектуры до релиза»
Всем, прив)
Дочитал недавно книжку «Микросервисы от архитектуры до релиза» (в оригинале наз: «Microservices Up & Running») Вышла она в конце 2020, а недавно ее перевели. В издательстве «Питер» периодически делают щедрые скидосы на книжки, и я решил порадовать себя и накупил кучу). Вообще люблю книги в бумажном виде, особенно фундаментальные книги — те, к которым я еще неоднократно возвращаюсь и из которых черпаю идеи. Более хардовые и с кодом я предпочитаю электронные.
И еще гора непрочитанных)
«Microservices Up & Running» написали два чувака: Ронни Митра и Иракли Надареишвили. Оба они не понаслышке поели финтех энтерпрайза и имеют очень богатый опыт, занимаются консалтингом и пишут книги. Ронни — соавтор «Continuous API Management», а также вместе с Иракли участвовал в написании «Microservices Architecture». Ронни занимается консалтингом финтех компаний, а Иракли сейчас Banking Platform Managing Director в JPMorgan Chase & Co, а до этого был вице-президентом по инновациям в Capital One Financial и возглавлял команды, ответственные за создание современной банковской платформы. В общем, это все можно посмотреть в их профиле в Линкедине. Им явно есть чем поделиться.
В целом, книжка мне очень понравилась, поэтому и решил сделать этот обзор. В качестве примера берется создание системы бронирования билетов на самолеты.
Если прям очень коротко, то тут поднимаются вопросы:
микросервисы, их плюсы, минусы, DDD, Event Storming
как вести ADR (architecture decision record)
как построить команды, работающие с системой
процесс создания сервисов от проектирования до деплоя (фреймворк SEEDs от авторов)
инфраструктура как код
GitOps
Книга не тупо пошаговая инструкция, или что-то в стиле «нарисуем сову», или какая-то абстрактная вещь в вакууме. На примере с системой бронирования авиабилетов показывается весь процесс от проектирования системы до развертывания. Понятно, что это всего лишь пример, и в реальности все куда сложнее, но он позволяет почувствовать многие актуальные вещи. Рассматриваются различные проблемы, с которыми предстоит столкнуться, выстраивая эту систему с нуля, в смысле прям совсем-совсем с нуля) Причем, каждый выбранный шаг, каждое решение грамотно обосновывается, крутится с разных сторон, что оно даст и на какие компромиссы придется пойти.
Для реализации авторы выбрали микросервисную архитектуру, обсудили плюсы минусы, почему Event Storming проще, чем DDD для определения границ сервисов, а также про CAP теорему и как «ее обойти». Рассказали про то, как принимать архитектурные решения, почему важно их прописывать и сохранять так же как и сам код. Порассуждали про оптимальный выбор размера команды, типы команд и построили их топологию, естественно, не обошлось без Team Topologies и закона Конвея:) Вообще, когда читал, параллельно лазил и искал еще всякие полезняшки по тем вещам, что затрагиваются в книге. Наткнулся еще вот на отличную статью на Хабре про размер команд: https://habr.com/ru/companies/edison/articles/272483/
Еще вот тут рассказывается про доклад Сергея Баранова о Event Storming: https://habr.com/ru/companies/oleg-bunin/articles/537862/
А дальше авторы на основе своего опыта выстроили для себя фреймворк эволюции создания сервисов и назвали его SEEDs (Seven Essential Evolutions of Design for Services) Немного спойлерну, SEEDs состоит из следующих шагов:
1. Определение клиентов системы
2. Определение JTBD (jobs to be done)
3. Создание UML-диаграмм взаимодействий между сервисами системы
4. Выделение из JTBD высокоуровневых действий и запросов
5. Описание каждого запроса в виде спецификации OpenAPI
6. Получение обратной связи по написанному API
7. Реализация микросервисов
В общем, все реально сложно уместить в книге, в Гитхабе есть исходники всего, что тут создается. После реализации микросервисов авторы занимаются развертыванием и инфрой. Нафигачивают инфру Терраформом, с кластером Куба, AgroCD, Траефиком и приводят большие куски кода) Тут конечно новички изрядно ох…т удивятся. Авторы проделали очень приличную работу. Причем, они все это развернули в облаке Амазона. Понятно, что выбор Куба и прочие вещи должны быть в реальности очень оправданы и взвешены, авторы тоже об это напоминают. В общем, сам код в книге приносит мало пользы, разве что дает просто визуальную наглядность процесса. Из забавного: со сложными вещами параллельно объясняются простые вещи, что вот curl — это чтобы подергать API, а вот Helm — это пакетный манагер для Куба. Но на мой взгляд, «Microservices Up & Running» не совсем для новичков и не только для разработчиков, а очень полезна будет техлидам, продвинутым инженерам и архитекторам. А из примера в книге можно вообще запилить серию тренингов.
В конце авторы подводят выводы и рассуждают о сложностях систем. В общем, это было очень интересно, очень рекомендую полистать ;)
Sergey Sabbath