Базовая книга по построению микросервисной архитектуры с практическими примерами на Node.js. Также рассмотрена работа с оркестратором Kubernetes и контейнерами Docker в среде Docker Compose. Разобраны основные принципы и техники разработки распределенных систем, в частности показано, как написать и развернуть три микросервиса, управлять СУБД, настроить брокер сообщений Kafka, внедрить кэш Redis. Объяснены паттерны проектирования. Особое внимание уделено распределенным транзакциям и разворачиванию микросервисов на удаленном сервере. Показано, как обеспечить расширяемость и отказоустойчивость приложений, как успешно бороться с усложнением клиентских интерфейсов, поддерживая высокую скорость загрузки страниц и приложений и не забывая о том, чтобы сайт оставался красивым и удобным в использовании. Электронный архив на сайте издательства содержит дополнительные материалы к книге.
Для начинающих веб-разработчиков
Микросервисы на JavaScript: осваиваем аккуратную декомпозицию
Современная практика enterprise-разработки и возникающие вызовы связаны, прежде всего, с обеспечением отказоустойчивости и расширяемости приложений. Сложно рассчитывать на реализацию таких качеств без применения микросервисной архитектуры. В книге по порядку рассматривается создание целого приложения с нуля. На материале готового продукта показано, как написать и развернуть три микросервиса, управлять СУБД, настроить брокер сообщений Kafka, внедрить кэш Redis и объединить эти решения в среде Docker-Compose и оркестраторе Kubernetes. Все паттерны, актуальные при проектировании микросервисов для веб-архитектуры, разобраны на практических примерах.
Книга интересна в качестве вводной по микросервисам на Node.js и будет полезна как начинающим разработчикам, пользующимся стеком JavaScript, так и опытным архитекторам, занятым модернизацией архитектуры с применением микросервисов.
Вы узнаете, как:
- разрабатывать микросервисы на Node.js
- выстраивать синхронное и асинхронное взаимодействие между микросервисами,
- выполнять распределенные транзакции,
- организовать взаимодействие между микросервисами,
- использовать паттерны проектирования,
- разворачивать микросервисы в облаке,
- использовать и настраивать Docker, Docker-Compose,
- настраивать Kubernetes в удаленной среде.
Для кого эта книга?
Основное внимание в ней уделяется именно практическим навыкам написания микросервисов. Она пригодится тем, кто достаточно глубоко владеет знаниями о JavaScript и TypeScript. Упор делается именно на конкретный стек технологий: Node.js, NestJS, PostgreSQL, Kafka, Redis, Docker, Docker-Compose, Kubernetes и некоторые другие. Желательно, чтобы у вас был опыт написания приложений на NestJS, т. к. глубоко в сами технологии мы погружаться не станем. Главный акцент сделан на микросервисах, проблемах, с которыми вы можете столкнуться при их разработке, и путях их решения.
Книгу “Node.js: разработка приложений в микросервисной архитектуре с нуля” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Введение………………………………………………………………………………………………….. 7
Для кого эта книга?……………………………………………………………………………………………………………………… 7
Обзор Node.js………………………………………………………………………………………………………………………………… 7
Выбор фреймворка: NestJS или Express.js?……………………………………………………………………………… 10
Сравнение монолитной и микросервисной архитектуры………………………………………………………. 13
Список литературы и источников……………………………………………………………………………………………. 14
Глава 1. Разработка первого микросервиса (User)………………………………….. 15
Настройка локального окружения…………………………………………………………………………………………… 15
Редактор кода и плагины…………………………………………………………………………………………………… 15
Node.js и пакетные менеджеры…………………………………………………………………………………………. 16
NVM…………………………………………………………………………………………………………………………………….. 18
Установка NestJS………………………………………………………………………………………………………………… 19
Git…………………………………………………………………………………………………………………………………………. 21
Codestyle……………………………………………………………………………………………………………………………… 23
Docker и Docker-Compose………………………………………………………………………………………………….. 24
Тестирование API………………………………………………………………………………………………………………. 27
Вывод………………………………………………………………………………………………………………………………….. 29
Создание структуры проекта……………………………………………………………………………………………………. 29
Подключение необходимых библиотек…………………………………………………………………………………… 37
Переменные окружения……………………………………………………………………………………………………… 37
ORM…………………………………………………………………………………………………………………………………….. 39
Swagger………………………………………………………………………………………………………………………………… 45
Библиотеки сlass-transformer и class-validator………………………………………………………………… 47
Настройка ESLint………………………………………………………………………………………………………………………. 48
Проектирование базы данных PostgreSQL………………………………………………………………………………. 52
Что такое «база данных» и какие они бывают?………………………………………………………………. 52
Нормализация данных………………………………………………………………………………………………………. 54
Первая нормальная форма (1НФ)……………………………………………………………………………. 54
Вторая нормальная форма (2НФ)……………………………………………………………………………. 55
Третья нормальная форма (3НФ)…………………………………………………………………………….. 56
Разработка бизнес-логики и маршрутизации для модуля User……………………………………………… 57
Тестирование микросервиса…………………………………………………………………………………………………….. 74
Список литературы и источников……………………………………………………………………………………………. 77
Глава 2. Разработка микросервиса авторизации и аутентификации (Auth) 79
Теоретический обзор способов авторизации и аутентификации………………………………………….. 79
Аутентификация, идентификация и авторизация……………………………………………………………. 79
Аутентификация по паролю……………………………………………………………………………………………… 80
Аутентификация по сертификатам…………………………………………………………………………………… 81
Аутентификация по одноразовым паролям…………………………………………………………………….. 82
Аутентификация по ключам доступа……………………………………………………………………………….. 83
Аутентификация по токенам……………………………………………………………………………………………… 83
Базовые меры предосторожности от возможных уязвимостей……………………………………………… 85
Переполнение буфера………………………………………………………………………………………………………… 86
Состояние гонки…………………………………………………………………………………………………………………. 86
Атаки проверки ввода………………………………………………………………………………………………………… 86
Атаки аутентификации………………………………………………………………………………………………………. 87
Атаки авторизации…………………………………………………………………………………………………………….. 87
Атаки на стороне клиента…………………………………………………………………………………………………. 88
Разработка модуля Auth……………………………………………………………………………………………………………. 88
Список литературы и источников………………………………………………………………………………………….. 101
Глава 3. Способы взаимодействия между микросервисами………………….. 103
HTTP-протокол………………………………………………………………………………………………………………………… 103
Модель OSI……………………………………………………………………………………………………………………….. 103
Физический уровень……………………………………………………………………………………………….. 104
Канальный уровень………………………………………………………………………………………………… 104
Сетевой уровень……………………………………………………………………………………………………… 105
Транспортный уровень…………………………………………………………………………………………… 105
Сеансовый уровень…………………………………………………………………………………………………. 105
Уровень представления………………………………………………………………………………………….. 106
Прикладной уровень………………………………………………………………………………………………. 106
Устройство HTTP-протокола………………………………………………………………………………………….. 106
Структура HTTP-запроса………………………………………………………………………………………. 107
Cтруктура HTTP-ответа…………………………………………………………………………………………. 108
gRPC………………………………………………………………………………………………………………………………………….. 108
RabbitMQ………………………………………………………………………………………………………………………………….. 112
Apache Kafka……………………………………………………………………………………………………………………………. 115
Redis………………………………………………………………………………………………………………………………………….. 117
Разработка интеграции сервисов Auth и Account…………………………………………………………………. 118
Список литературы и источников………………………………………………………………………………………….. 136
Глава 4. Разработка модуля Transaction……………………………………………….. 137
Проектирование базы данных………………………………………………………………………………………………… 137
Нормальная форма Бойса — Кодда (НФБК) — частная форма
третьей нормальной формы…………………………………………………………………………………………….. 137
Четвертая нормальная форма…………………………………………………………………………………………. 139
Пятая нормальная форма………………………………………………………………………………………………… 139
Доменно-ключевая нормальная форма………………………………………………………………………….. 140
Шестая нормальная форма……………………………………………………………………………………………… 140
Понятия миграций и транзакций в контексте базы данных PostgreSQL……………………………… 141
Миграции………………………………………………………………………………………………………………………….. 141
Индексы…………………………………………………………………………………………………………………………….. 144
Транзакции……………………………………………………………………………………………………………………….. 150
ACID…………………………………………………………………………………………………………………………. 151
Параллельные транзакции…………………………………………………………………………………….. 151
Уровни изоляции транзакций в SQL……………………………………………………………………… 152
Разработка модуля Transaction………………………………………………………………………………………………. 153
Интеграция Transaction и Account………………………………………………………………………………………….. 167
Проблема распределенных транзакций………………………………………………………………………………… 183
Двухфазная фиксация………………………………………………………………………………………………………. 184
Saga……………………………………………………………………………………………………………………………………. 185
Реализация паттерна Saga……………………………………………………………………………………… 186
Список литературы и источников………………………………………………………………………………………….. 209
Глава 5. Развертывание микросервисов……………………………………………….. 211
Обертывание микросервисов в docker-контейнеры………………………………………………………………. 225
Масштабирование при помощи оркестратора Kubernetes………………………………………………….. 238
Заключение………………………………………………………………………………………………………………………………. 247
Список литературы и источников………………………………………………………………………………………….. 247
Приложение. Описание электронного архива………………………………………. 249
Предметный указатель…………………………………………………………………………. 251
Попова Юлия Юрьевна, практикующий инженер-программист, занимающейся разработкой коммерческих продуктов более 5 лет.