13 апреля 2020

Теоретический не минимум по микросервисам

Всем привет.

Решил для себя систематизировать список литературы, которые прочитал по теме распределённых систем и, в частности, микросервисов.
Единственная тема, которая осталась не до конца изученной - это SRE и инструменты деплоймента. Скорее всего напишу отдельный пост по этой теме.

Основная проблема микросервисов в том, что люди часто начинают их строить не до конца осознавая какие проблемы им придётся решать.
Один из больнючих вопросов - это консистентность данных, наличие которой надо доказывать с математической жестокостью к себе, чуть ли не по шагам анализируя все сценарии, которые могут произойти после каждого действия. Обработка отказов - ещё один черт из табакерки, который начнёт выпрыгивать из разных непредсказуемых мест. Ну и на сладкое - это копание в кишочках всяких оркестраторов, чтобы понять какие гарантии насчёт zero downtime они вам дают. А потом вы начнёте задумываться как делать миграции баз данных и бэкапы в условиях распределённых систем ...
И закончиться это может осознанием того, что некоторые вещи, которые спокойно делаются в рамках одного процесса, не могут быть надёжно реализованы в принципе в реальных распределённых системах (чего только стоит один замечательный срач насчёт того, почему распределенные блокировки на базе Redis - говно и как они ничего не стоят в плане заявляемых гарантий) или цена будет такой, что сами проклянете тот миг, когда захотели "в эти самые микросервисы" податься.
В общем, это приключение только для крепких духом.

Сразу оставим за скобками вопросы понимания того как работают сети, linux, docker, как профилировать окружение (диск, сеть, память, cpu) с помощью разных тулов.
Без этих знаний дальше лучше вам вообще не читать, ну или вернуться к этой замечательной статье, как только изучите этот необходимый минимум, который вам обязательно пригодится когда ваша система уйдёт в прод.

В общем, если вы не готовы погружаться в весь этот хардкор - спокойно оставайтесь пилить фичи в своём уютном монолите и не комплексуйте. Поверьте, не со всеми монстрами, которые ждут вас в этом новом мире, вы захотите иметь дело. Но если вам всё-таки хочется узнать, насколько глубока кроличья нора, то welcome под кат.

Далее я приведу список из несколько книг с выделением тех тем, ради которых их стоит читать, т.к. сейчас много очень общей литературы, а специализированной по конкретным больным темам - намного меньше.

Основы микросервисной архитектуры


Building Microservices. Sam Newman

Возможно самая моя первая книга по микросервисам. Покрывает совсем базовые вещи без особой конкретики. Но вам тут расскажут про REST и прочие базовые концепции.
Вполне себе достойная вводная книга, если совсем ничего про микросервисы не слышали.

Microservices Patterns. Chris Richardson

Фундаментальная книга о микросервисах с учётом многих шишек, которые набивают люди в попытке их реализации. Описаны подходы к разделению сервисов с помощью Domain Driven Design. Более хардкорная, конкретная и практичная, чем Building Microservices. Более подробно описаны cпособы коммуникации микросервисов, достаточно большая и подробная глава о сагах, как заменителях распределённых транзакций. Есть отдельная глава про тестирование сервисов.

Работа с данными в условиях микросервисной архитектуры


Design Data Intensive Applications. Martin Kleppmann

Фундаментальная книжка о паттернах работы с большими объёмами данных. Блокировки, консистентность данных, транзакции. Автор - один из исследователей распределённых и многопоточных систем, который подходит к анализу свойств разных инструментов максимально дотошно, что позволяет понимать - на что вы реально можете рассчитывать, а на что - нет.

Monolith to Microservices. Sam Newman

Практические советы по итеративного распилу монолита на микросервисы. Большая глава про распил баз данных, как один из главных стоп-факторов на пути распила хипстерами старого говна мамонта.

Kubernetes, как де-факто стандарт оркестрации


В своё время, я потратил примерно неделю на прочтение всей его документации. И был особенно впечатлен некоторыми подходами к проектированию их внутреннего API. У авторов вполне есть чему поучиться в плане дальнозоркости и скрупулёзности в проектировании такого большого проекта, благо вся документация с предлагаемыми подходами также размещена рядом с кодом и обсуждение было в github issues.

Kubernetes Patterns.  Bilgin Ibryam

Много разных прикольных моментов о подходах с Кубером, но многие совсем по-верхам. Самое то для начала.

Design Distributed Systems. Brendan Burns

Построение production grade микросервисов на базе Кубера. Требует хорошего понимания Кубера.

Отказоустойчивость микросервисов


Release It! Design and Deploy Production Ready Software. Michael Nygard

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

Reactive Design Patterns. Roland Kuhn

Книга от одного из авторов фреймворка Akka, который использует акторную модель выполнения. Но книга не про этот фреймворк, а про то, какие проблемы вообще стоят перед авторами отзывчивых систем - систем, которые стабильно реагируют на запросы пользователей.
Что такое отзывчивые системы, как обеспечивается их работа с учётом отказов и деградаций производительности. Как проектировать такие системы.
Достаточно фундаментальная книга по вопросам контроля latency запросов, параллелизации выполнения и устойчивости к отказам.
Покрывает смежные вопросы:
  • Декомпозиция больших систем с учётом реактивности.
  • Как сокрытие явной сложности (essential complexity) предметной области разработчиками иногда ведёт к раздуванию "случайной сложности" (accidential complexity), с которой внезапно сталкивается пользователь предложенного разработчиком решения.
Прочитав книгу становится понятно: откуда в Kubernetes взялось столько компонентов и какие проблемы распределённых, высокодоступных систем они решают и о которых вы возможно раньше и не слышали, но обязательно столкнётесь на практике.
В общем, категорически рекомендую эту книгу для "прочистки" своего понимания того как строятся надёжные распределённые системы.

PS

Буквально на днях вышла книга Building Secure & Reliable Systems от гугловских инженеров с очень интригующим содержимым, но прочесть её пока не успел.

Комментариев нет:

Отправить комментарий