Микросервисы на GO 3.0
О чём курс
Олег Козырев разбирает разработку микросервисов на Go: вы создадите пять связанных сервисов и настроите их взаимодействие, хранение данных, проверку доступа и наблюдаемость.
Для кого
Курс рассчитан на разработчиков, которые переходят на Go, уже пишут на нём и хотят разобраться с архитектурой сервисов, а также готовятся к техническим собеседованиям. Задания построены вокруг задач backend-разработки: разделения кода на слои, работы с базой данных, обмена событиями и настройки инфраструктуры. Программа рассчитана на восемь недель.
Что вы соберёте
Работа начинается с HTTP- и gRPC-сервисов для заказов, склада и платежей. Вы опишете контракты API, свяжете сервисы между собой, разделите транспортный, сервисный и репозиторный слои, напишете тесты. Затем добавите PostgreSQL, миграции, транзакции и конфигурацию через YAML и переменные окружения.
Следующий этап — событийное взаимодействие через Kafka: сервис сборки получает событие об оплате и сообщает о завершении работы. Для учётных записей вы создадите IAM-сервис с регистрацией и входом, а сессии разместите в Redis. В заданиях также есть кеширование, блокировки и защита от повторной обработки событий.
Инструменты и инфраструктура
Для работы с сервисами используются Docker и Docker Compose. Автор разбирает платформенную библиотеку с общими компонентами, управление зависимостями, доменную модель и работу с JSONB в PostgreSQL. На завершающих этапах вы настроите сбор логов в Elasticsearch и Kibana, метрик в Prometheus и Grafana, а также распределённую трассировку в Jaeger через OpenTelemetry.
В программе есть балансировка нагрузки через Nginx и горизонтальное масштабирование сервисов. Все эти инструменты применяются к одному проекту с заказами, складом, платежами, сборкой и проверкой пользователей.
Программа обучения
- Неделя 1. HTTP и gRPC: два протокола, которые должен знать каждый Go-разработчик
- Неделя 2. Clean Architecture и тесты: пишем код, как в BigTech-компаниях
- Неделя 3. Docker и PostgreSQL: сервисы обретают настоящее хранилище
- Неделя 4. Конфигурация, DI и Domain-Driven Design
- Неделя 5. Kafka: асинхронная коммуникация между сервисами
- Неделя 6. Аутентификация: IAM-сервис и Redis
- Неделя 7. Observability: логи, метрики и распределённые трейсы
- Неделя 8. Контейнеризация, балансировка и распределённый Rate Limiting
- Блок 1. gRPC — язык, на котором говорят микросервисы
- Protocol Buffers с нуля — описываем контракт сервиса в ".proto"-файле
- buf — генерируем Go-код одной командой вместо ручной возни с
protoc - Поднимаем gRPC-сервер и клиент — полноценный CRUD для управления данными
- Интерцепторы: перехватываем каждый запрос — логирование, перехват паник и кастомная логика
- gRPC-Gateway + Swagger UI — один сервис, два протокола: REST снаружи, gRPC внутри
- Валидация входных данных — отсекаем невалидные запросы ещё до попадания в бизнес-логику
- Блок 2. HTTP — REST API на промышленном уровне
- Chi — самый популярный Go-роутер — маршруты, цепочки middleware, таймауты и корректное завершение работы
- Сначала контракт, потом код — описываем OpenAPI-спецификацию, получаем типизированный сервер с валидацией из коробки через Ogen
- HTTP вызывает gRPC — связываем сервисы между собой: HTTP-фронтенд обращается к gRPC-бэкенду
- Блок 3. Go Workspace — мультимодульный проект
- go.work для нескольких сервисов — общие proto-определения, общие зависимости, единый репозиторий
- Блок 4. Слоистая архитектура — структура, которую поймёт любой разработчик
- API → Service → Repository → Client — чёткое разделение ответственности
- Три модели данных — модель API, доменная модель, модель хранилища: зачем их разделять и как конвертировать между собой
- Инверсия зависимостей — интерфейсы определяет тот, кто использует, а не тот, кто реализует
- Стратегия обработки ошибок — единые ошибки-маркеры на каждом слое, понятная цепочка от базы до клиента
- Блок 5. Unit-тесты — от нуля до полного покрытия за 7 шагов
- Первый тест на чистом Go —
testing.T, никаких фреймворков - Табличные тесты — один тест, десять сценариев: описываем входы и ожидаемые результаты
- testify — читаемые проверки вместо ручных
if err != nil - Стабы: подменяем зависимости вручную — простая реализация в памяти вместо реальной базы
- mockery — генерируем моки автоматически — задаём ожидания, проверяем вызовы
- Тесты в Clean Architecture — мокаем репозиторий, тестируем бизнес-логику изолированно
- Параллельные тесты — запускаем тесты одновременно и не ловим гонки
- Блок 6. Docker — упаковываем сервис в контейнер
- Многоэтапная сборка Docker-образа — 800 МБ Go SDK превращаются в 10 МБ финальный образ
- Запуск не от root — безопасно, как требуют в продакшене
- Docker Compose — база данных, миграции и сервис поднимаются одной командой
- Healthcheck и зависимости — контейнеры стартуют в правильном порядке
- Блок 7. PostgreSQL — SQL на Go без боли
- pgx — самый быстрый драйвер для PostgreSQL с пулом соединений (переиспользуем подключения, а не создаём новые на каждый запрос)
- Squirrel — SQL-конструктор — собираем запросы программно, без склейки строк
- Миграции через Goose — версионируем схему базы, накатываем изменения при деплое
- Практические приёмы — получаем ID сразу при вставке, работаем с nullable-полями, избегаем SQL-инъекций
- Блок 8. Транзакции — атомарность без компромиссов
- Transaction Manager — оборачиваем несколько операций в транзакцию, не протаскивая объект транзакции через все слои
- Прозрачные транзакции — репозиторий даже не знает, что работает внутри транзакции — всё скрыто в контексте
- Блок 9. Конфигурация — параметры сервиса без хардкода
- YAML + переменные окружения через cleanenv — один конфиг-файл, переопределения через переменные окружения для каждого стенда
- Профили: local / production / docker — переключаем поведение без изменения кода
- Блок 10. DI-контейнер — управление зависимостями без магии
- Ручной DI на Go — создаём зависимости лениво: только когда понадобятся
- Корректное завершение работы — ресурсы закрываются в обратном порядке: что открыли последним — закрываем первым
- Платформенная библиотека — проверка здоровья сервиса, логгер, менеджер закрытия ресурсов: переиспользуемые компоненты для всех сервисов
- Блок 11. JSONB — гибкие структуры в PostgreSQL
- JSONB-колонки — храним разнородные данные (характеристики разных типов деталей) в одной колонке без раздувания схемы
- Индексы по JSON — быстрый поиск внутри JSON-структур
- Блок 12. Domain-Driven Design — бизнес-логика, которая сама себя защищает
- Сущности с поведением — объекты сами знают свои правила, а не просто хранят данные
- Value Objects — типизированные значения (например, «прочность корпуса»), которые нельзя создать в невалидном состоянии
- Агрегаты — группа связанных объектов с единой точкой входа, которая контролирует целостность данных
- Доменный сервис — проверка совместимости компонентов корабля перед заказом
- Резервирование деталей — Reserve/Release с защитой от невалидных состояний
- Блок 13. Apache Kafka — шина событий для микросервисов
- Синхронный и асинхронный продюсер — гарантия доставки каждого сообщения vs максимальная пропускная способность
- Консюмер — читаем поток событий — смещения, партиции, чтение с начала или с конца
- Consumer Groups — горизонтальное масштабирование — несколько экземпляров сервиса делят между собой поток сообщений, автоматически перераспределяя нагрузку
- Обработка сообщений пачками — накапливаем и обрабатываем группой для производительности
- Kafka в Clean Architecture — выделяем слои для асинхронных потоков так же, как для HTTP и gRPC
- Блок 14. Select for update — блокировки в PostgreSQL
- Блокировка строк при чтении — «заморозить» запись в базе, пока мы с ней работаем, чтобы другой запрос не изменил её параллельно
- Правильный порядок блокировок — всегда блокируем строки в одном и том же порядке, чтобы два запроса не заблокировали друг друга навечно
- Повторная обработка событий без последствий — даже если Kafka доставит сообщение дважды, данные не сломаются
- Блок 15. Redis — быстрое key-value хранилище
- Базовые операции — простые ключи, хеш-таблицы, хранение структур
- Время жизни ключей (TTL) — данные автоматически удаляются через заданное время: идеально для сессий и кеша
- Распределённая блокировка через Redis — когда несколько экземпляров сервиса должны по очереди работать с общим ресурсом
- Защита от лавины запросов — если тысяча пользователей одновременно запросила одно и то же, в базу уходит только один запрос
- Redis в Clean Architecture — кеширующий слой как отдельный репозиторий
- Блок 16. Аутентификация на сессиях — от логина до защиты API
- bcrypt — хешируем пароли правильно — почему md5 и sha256 для паролей использовать нельзя
- Сессии в Redis с временем жизни — создание, проверка, удаление
- gRPC-интерцептор для проверки сессий — список открытых методов, извлечение токена из заголовка
- HTTP middleware для аутентификации — проверяем сессию через IAM, пробрасываем ID пользователя в контекст запроса
- Передача информации о пользователе между сервисами — gRPC metadata для пробрасывания идентификатора через цепочку вызовов
- Блок 17. Логирование — от println до Kibana
- Структурированные логи через slog + OpenTelemetry — логи отправляются в единый коллектор телеметрии
- Запись сразу в два места — одновременно в консоль и в Elasticsearch, чтобы видеть логи и локально, и в централизованном хранилище
- Kibana — ищем и анализируем логи всех сервисов в одном интерфейсе
- Устойчивость к сбоям — если Elasticsearch упал, сервис продолжает работать и писать логи в консоль
- Блок 18. Метрики — Prometheus и Grafana
- Счётчики, гистограммы и другие типы метрик — считаем количество запросов, замеряем время ответа, отслеживаем текущую нагрузку
- Автоматический сбор метрик gRPC — подключается в одну строку, сразу видим latency и количество ошибок
- Prometheus — собирает метрики со всех сервисов через единый коллектор
- Grafana-дашборды — красивые графики бизнес-метрик: заказы, выручка, время сборки
- Блок 19. Распределённый трейсинг — видим путь запроса насквозь
- Сквозной идентификатор запроса — один trace-id проходит через все сервисы, позволяя восстановить полный путь
- Автоматический сбор трейсов для gRPC — подключается без изменения бизнес-кода
- Добавляем бизнес-контекст к трейсам — видим не только «запрос прошёл», но и «какой заказ, какой пользователь»
- Jaeger — визуализация полного пути запроса через все сервисы на одном таймлайне
- Инструментация Redis — подключаем трейсы, метрики и логи для каждого вызова кеша через систему хуков
- Блок 20. Контейнеризация и Nginx — всё в Docker, балансировка нагрузки
- Многоэтапная сборка Docker-образа для каждого сервиса — сначала компилируем, затем берём только бинарник в минимальный образ
- Docker Compose для всей системы — 5 сервисов + вся инфраструктура поднимаются одной командой
- Nginx как балансировщик — запросы равномерно распределяются между репликами OrderService
- Горизонтальное масштабирование — запускаем несколько копий сервиса, Nginx сам находит их по имени
- Блок 21. Паттерны отказоустойчивости — чтобы сервис выжил в продакшене
- Rate Limiter — ограничиваем количество запросов в секунду, чтобы сервис не захлебнулся под
Теги курса
Другие материалы автора 2
ОК Олег Козырев Все материалыОтзывов пока нет. Будьте первым!
Это не розничная цена — это ваш взнос в складчину. Мы собираем группу участников и делим между ними стоимость официального доступа: каждый платит только свою долю, а получает весь материал. Чем больше участников, тем меньше взнос. После того как сумма собрана, мы оформляем официальный доступ и раздаём материалы всем, кто участвовал.
Нажмите кнопку «Получить доступ» на этой странице и следуйте инструкциям. Вас переведёт на форму оплаты — доступны все современные способы (карта, СБП, электронные кошельки). После оплаты на почту придёт письмо со ссылкой и инструкциями для доступа к материалам. Если ссылка не открывается, загляните в раздел «Помощь» или напишите в поддержку.
Да, конечно. Все материалы — видео, PDF, дополнительные файлы — можно скачать к себе на компьютер и пользоваться ими сколько угодно, без ограничений по времени. Ссылки остаются активными в вашей библиотеке «Мои складчины».