
Базовая книга по построению микросервисной архитектуры с практическими примерами на языке Go. Также рассмотрена работа с оркестратором Kubernetes и контейнерами Docker в среде Docker Compose. Разобраны основные принципы и техники разработки распределенных систем, в частности показано, как написать и развернуть четыре микросервиса, управлять СУБД, настроить брокер сообщений Kafka, внедрить кэш Redis. Объяснены паттерны проектирования. Особое внимание уделено распределенным транзакциям и разворачиванию микросервисов на удаленном сервере. Показано, как обеспечить расширяемость и отказоустойчивость приложений, поддерживая высокую скорость загрузки страниц и приложений.
Электронный архив на сайте издательства содержит дополнительные материалы к книге.
Для начинающих веб-разработчиков
Микросервисы на Go: осваиваем аккуратную декомпозицию
Современная практика enterprise-разработки и возникающие вызовы связаны, прежде всего, с обеспечением отказоустойчивости и расширяемости приложений. Сложно рассчитывать на реализацию таких качеств без применения микросервисной архитектуры. В книге по порядку рассматривается создание целого приложения с нуля. На материале готового продукта показано, как написать и развернуть четыре микросервиса, управлять СУБД, настроить брокер сообщений Kafka, внедрить кэш Redis и объединить эти решения в среде Docker-Compose и оркестраторе Kubernetes. Все паттерны, актуальные при проектировании микросервисов для веб-архитектуры, разобраны на практических примерах.
Книга интересна в качестве вводной по микросервисам на Golang и будет полезна как начинающим разработчикам, так и архитекторам, занятым модернизацией архитектуры с применением микросервисов.
Вы узнаете, как:
- разрабатывать микросервисы на языке Go;
- выстраивать синхронное и асинхронное взаимодействие между микросервисами;
- выполнять распределенные транзакции;
- организовать взаимодействие между микросервисами;
- использовать паттерны проектирования;
- разворачивать микросервисы в облаке;
- использовать и настраивать Docker, Docker-Compose;
- настраивать Kubernetes в удаленной среде.
Книгу “Go: разработка приложений в микросервисной архитектуре с нуля” можно купить в нашем интенет-магазине.
Введение………………………………………………………………………………………………….. 7
Для кого эта книга?……………………………………………………………………………………………………………………… 7
Обзор Golang………………………………………………………………………………………………………………………………… 7
Сравнение монолитной и микросервисной архитектуры………………………………………………………… 9
Список литературы и источников……………………………………………………………………………………………. 11
Глава 1. Разработка первого микросервиса (User)………………………………….. 13
Настройка локального окружения…………………………………………………………………………………………… 13
Редактор кода…………………………………………………………………………………………………………………….. 13
Go…………………………………………………………………………………………………………………………………………. 14
GVM…………………………………………………………………………………………………………………………………….. 17
Установка Protobuf…………………………………………………………………………………………………………….. 18
Git…………………………………………………………………………………………………………………………………………. 19
Codestyle……………………………………………………………………………………………………………………………… 21
Docker и Docker-Compose………………………………………………………………………………………………….. 22
Тестирование API………………………………………………………………………………………………………………. 24
Создание структуры проекта……………………………………………………………………………………………………. 27
Подключение необходимых библиотек…………………………………………………………………………………… 34
Переменные окружения……………………………………………………………………………………………………… 34
Логирование……………………………………………………………………………………………………………………….. 36
ORM…………………………………………………………………………………………………………………………………….. 40
Swagger………………………………………………………………………………………………………………………………… 43
Проектирование базы данных PostgreSQL………………………………………………………………………………. 47
Что такое база данных и какие они бывают?………………………………………………………………….. 47
Нормализация данных………………………………………………………………………………………………………. 48
Первая нормальная форма (1НФ)……………………………………………………………………………. 48
Вторая нормальная форма (2НФ)……………………………………………………………………………. 50
Третья нормальная форма (3НФ)…………………………………………………………………………….. 51
Разработка бизнес-логики и маршрутизации для модуля User……………………………………………… 52
Тестирование микросервиса…………………………………………………………………………………………………….. 79
Список литературы и источников……………………………………………………………………………………………. 86
Глава 2. Разработка микросервиса авторизации и аутентификации (Auth) 87
Теоретический обзор способов авторизации и аутентификации………………………………………….. 87
Аутентификация, идентификация и авторизация……………………………………………………………. 87
Аутентификация по паролю……………………………………………………………………………………………… 88
Аутентификация по сертификатам…………………………………………………………………………………… 89
Аутентификация по одноразовым паролям…………………………………………………………………….. 90
Аутентификация по ключам доступа……………………………………………………………………………….. 91
Аутентификация по токенам……………………………………………………………………………………………… 91
Базовые меры предосторожности от возможных уязвимостей……………………………………………… 93
Переполнение буфера………………………………………………………………………………………………………… 94
Состояние гонки…………………………………………………………………………………………………………………. 94
Атаки проверки ввода………………………………………………………………………………………………………… 94
Атаки аутентификации………………………………………………………………………………………………………. 95
Атаки авторизации…………………………………………………………………………………………………………….. 95
Атаки на стороне клиента…………………………………………………………………………………………………. 96
Разработка модуля Auth……………………………………………………………………………………………………………. 96
Список литературы и источников………………………………………………………………………………………….. 110
Глава 3. Способы взаимодействия между микросервисами………………….. 111
HTTP-протокол………………………………………………………………………………………………………………………… 111
Модель OSI……………………………………………………………………………………………………………………….. 111
Физический уровень……………………………………………………………………………………………….. 112
Канальный уровень………………………………………………………………………………………………… 112
Сетевой уровень……………………………………………………………………………………………………… 113
Транспортный уровень…………………………………………………………………………………………… 113
Сеансовый уровень…………………………………………………………………………………………………. 113
Уровень представления………………………………………………………………………………………….. 114
Прикладной уровень………………………………………………………………………………………………. 114
Устройство HTTP-протокола………………………………………………………………………………………….. 114
Структура HTTP-запроса………………………………………………………………………………………. 115
Cтруктура HTTP-ответа…………………………………………………………………………………………. 116
gRPC………………………………………………………………………………………………………………………………………….. 116
RabbitMQ………………………………………………………………………………………………………………………………….. 120
Apache Kafka……………………………………………………………………………………………………………………………. 123
Redis………………………………………………………………………………………………………………………………………….. 125
Разработка сервиса Gateway………………………………………………………………………………………………….. 126
Список литературы и источников………………………………………………………………………………………….. 156
Глава 4. Разработка модуля Transaction……………………………………………….. 157
Проектирование базы данных………………………………………………………………………………………………… 157
Частная форма третьей нормальной формы: нормальная форма Бойса — Кодда (НФБК) 157
Четвертая нормальная форма…………………………………………………………………………………………. 159
Пятая нормальная форма………………………………………………………………………………………………… 159
Доменно-ключевая нормальная форма………………………………………………………………………….. 160
Шестая нормальная форма……………………………………………………………………………………………… 160
Понятия миграций и транзакций в контексте базы данных PostgreSQL……………………………… 161
Миграции………………………………………………………………………………………………………………………….. 161
Индексы…………………………………………………………………………………………………………………………….. 163
Транзакции……………………………………………………………………………………………………………………….. 166
ACID…………………………………………………………………………………………………………………………. 166
Параллельные транзакции…………………………………………………………………………………….. 167
Уровни изоляции транзакций в SQL……………………………………………………………………… 168
Разработка модуля Transaction………………………………………………………………………………………………. 169
Интеграция Transaction и Account………………………………………………………………………………………….. 187
Проблема распределенных транзакций………………………………………………………………………………… 227
Двухфазная фиксация………………………………………………………………………………………………………. 228
Saga……………………………………………………………………………………………………………………………………. 229
Реализация паттерна Saga……………………………………………………………………………………… 231
Список литературы и источников………………………………………………………………………………………….. 265
Глава 5. Развертывание микросервисов……………………………………………….. 267
Обертывание микросервисов в docker-контейнеры………………………………………………………………. 294
Масштабирование при помощи оркестратора Kubernetes………………………………………………….. 306
Заключение………………………………………………………………………………………………………………………………. 311
Список литературы и источников………………………………………………………………………………………….. 311
Приложение. Описание файлового архива…………………………………………… 313
Предметный указатель…………………………………………………………………………. 315
