«Распределённые системы на Go» (Distributed Systems in Go) — практическое руководство по проектированию, разработке и развёртыванию надёжных распределённых систем с использованием языка Go. Книга основана на реальном опыте автора в создании и эксплуатации облачных распределённых систем и охватывает весь путь от разработки отдельных HTTP-сервисов до построения полноценной микросервисной архитектуры.
Рано или поздно каждый Go-разработчик сталкивается с ситуацией, когда одного приложения становится недостаточно. Возникает необходимость создавать несколько взаимодействующих сервисов, обеспечивать аутентификацию, организовывать хранение данных, настраивать обмен сообщениями и поддерживать стабильную работу системы даже при возникновении сбоев.
Знание теоремы CAP и основных принципов распределённых вычислений — лишь отправная точка. Настоящие сложности начинаются в реальных условиях, когда потребители Kafka не успевают обрабатывать сообщения, межсервисные запросы завершаются по тайм-ауту, а определить источник проблемы становится всё сложнее.
Эта книга помогает преодолеть разрыв между теорией и практикой. Автор последовательно демонстрирует создание полноценной распределённой системы, рассматривая аутентификацию, базы данных, очереди сообщений, gRPC, механизмы отказоустойчивости и распределённую трассировку.
Каждая глава посвящена определённому архитектурному шаблону, который затем реализуется в виде повторно используемых компонентов платформенного SDK. К 15-й главе читатель создаст готовую к развёртыванию систему из шести сервисов и собственный SDK, упрощающий разработку последующих приложений.
Что вы изучите и создадите
- HTTP-сервисы: разработка HTTP-сервисов на Go с использованием компонуемых промежуточных обработчиков (middleware) без необходимости подключения дополнительных фреймворков.
- Аутентификация и безопасность: реализация JWT-аутентификации с цифровой подписью ECDSA и подключаемыми агентами аутентификации.
- PostgreSQL и управление данными: организация работы с базами данных, выполнение миграций без остановки системы и реализация паттерна Transactional Outbox.
- Apache Kafka: создание производителей и потребителей сообщений, управление обратным давлением (backpressure) и использование очередей недоставленных сообщений (Dead Letter Queue).
- gRPC и межсервисное взаимодействие: настройка взаимодействия между сервисами с механизмами повторных попыток, тайм-аутами и автоматическими выключателями (Circuit Breaker).
- Распределённая согласованность: применение паттерна Saga, ключей идемпотентности и механизмов сверки данных (Reconciliation).
- Мониторинг и наблюдаемость: внедрение структурированного логирования с помощью slog, сбор метрик через Prometheus и распределённая трассировка с использованием OpenTelemetry.
- Тестирование и отказоустойчивость: тестирование компонентов на реальной инфраструктуре с помощью Testcontainers, моделирование сбоев и применение подходов хаос-тестирования.
- Развёртывание в Kubernetes: подготовка конфигурационных манифестов и развёртывание полноценной распределённой системы, состоящей из шести сервисов.
Практический результат
Главная особенность книги — последовательное создание реальной системы, а не изучение отдельных инструментов в отрыве от практики.
Каждый пример кода является полным и самодостаточным. По мере изучения материала читатель не только осваивает архитектурные подходы, но и формирует собственную библиотеку повторно используемых компонентов.
В результате вы получите работающую распределённую систему из шести сервисов, готовую к развёртыванию, а также платформенный SDK, который позволит быстрее и эффективнее создавать новые сервисы.
Для кого эта книга
Книга предназначена для Go-разработчиков, которые уже умеют создавать отдельные приложения и сервисы, но хотят перейти к проектированию полноценных распределённых систем.
Она будет особенно полезна инженерам, работающим с микросервисами, облачной инфраструктурой, базами данных и асинхронной обработкой сообщений.
Если вам приходилось копировать middleware без полного понимания его устройства, разбираться с ошибками context deadline exceeded или искать причины сбоев сразу в нескольких взаимодействующих сервисах, эта книга поможет систематизировать знания и освоить практические инструменты для решения подобных задач.