Книжный кружок. Рецензия на книгу «Микросервисы от архитектуры до релиза»

Всем, прив)

Дочитал недавно книжку «Микросервисы от архитектуры до релиза» (в оригинале наз: «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

© Habrahabr.ru