
Микросервисы на Go: HTTP, PostgreSQL, gRPC, Kafka и Docker
От работающего Go API — к взаимодействию сервисов, которому можно доверять. Разберитесь, как проектировать контракты, сохранять согласованность данных и восстанавливать обработку после сбоев. HTTP, PostgreSQL, gRPC, Kafka и Docker — через код и наглядные разборы.
О курсе
Когда запрос потерялся, а данные уже изменились
Клиент получил таймаут после POST. Можно ли повторить запрос? Как понять, создал сервер запись или даже не увидел обращение? Что произойдёт, если Kafka доставит событие второй раз?
В распределённой системе такие ситуации — часть обычной работы. Этот курс учит разбирать их по шагам: от HTTP-вызова другой Go-программы до согласованной обработки данных и событий.
От API к взаимодействию сервисов
Вы пройдёте путь от границ сервиса и HTTP-контрактов к PostgreSQL, gRPC и Kafka. Затем свяжете изменения данных с доставкой событий через outbox/inbox и разберёте тестирование, наблюдаемость и выпуск через Docker Compose.
На каждом этапе важен результат: что увидит клиент, что останется в базе, какой обработчик выполнится повторно и как система восстановится после ошибки. Вы будете читать код, сравнивать исходы и писать свою реализацию.
Поведение системы становится понятным
Разбирайте не только успешный запрос: проследите потерянный ответ, конкурентные операции и повторную доставку события. Схемы и анимации показывают, что уже произошло, какие данные сохранились и где начинается восстановление.
Go-задачи проверяют отдельные функции и сценарии. Работа PostgreSQL, Kafka и нескольких процессов разбирается в примерах и командах для локального запуска. Разделы используют самостоятельные примеры — их удобно проходить последовательно и возвращаться к конкретной теме.
Курс подойдёт, если
Вы уже пишете на Go и хотите понимать, что происходит между сервисами, а не только внутри обработчика. После курса у вас будет набор разобранных решений и практический опыт проверки контрактов, повторов, транзакций и доставки событий.
Начните с первого модуля: запустите взаимодействие двух Go-программ, а затем разберите, какие новые ошибки появляются вместе с сетью.
Чему научитесь
- Выбирать границы сервисов и понимать цену разделения: сеть, независимые данные и совместимые изменения.
- Писать HTTP- и gRPC-вызовы с контрактами, дедлайнами и корректной обработкой ошибок.
- Разбирать неизвестный исход POST и повторять меняющие запросы без дублирования результата.
- Использовать ограничения и транзакции PostgreSQL, находить гонки и безопасно менять схему.
- Обрабатывать события Kafka с учётом порядка, offset и повторной доставки.
- Связывать изменения данных и события через outbox/inbox и восстанавливать обработку после сбоев.
- Проверять правила, контракты и сценарии отказа; читать логи, метрики и трассировки.
- Запускать примеры через Docker Compose и планировать совместимый выпуск сервисов.
Для кого
- Go-разработчики, которые умеют писать небольшой HTTP API и хотят перейти к взаимодействию нескольких сервисов.
- Backend-разработчики, которым нужны практические ответы про таймауты, повторы, транзакции и доставку событий.
- Разработчики, которые знакомы с названиями gRPC и Kafka, но хотят понять, когда и как их применять.
Формат
- 11 модулей и 55 уроков: текстовые объяснения, примеры Go-кода и разборы решений.
- Пишите Go-код, проверяйте решения и разбирайте, как система ведёт себя при ошибках и повторных запросах.
- Детерминированные схемы и анимации: видно, куда дошёл запрос, что сохранилось и почему возник повтор.
- Дополнительные интерактивные разборы доступны как HTML-файлы для открытия в браузере.
- Учитесь в своём темпе. В каждом разделе — самостоятельные примеры; команды для локального запуска приведены в уроках.
Что нужно на старте
- Основы Go: функции, структуры, интерфейсы, обработка ошибок и чтение небольших программ.
- Базовое понимание HTTP и JSON; опыт написания простого обработчика и запуска go test.
- Готовность самостоятельно писать код. PostgreSQL, gRPC, Kafka и Docker разбираются в уроках; заранее владеть всем стеком не требуется.
Автор курса
Петр Андреев
Меня зовут Пётр. Я занимаюсь backend-разработкой на Go. Мне важно не просто показать готовое решение, а объяснить, как оно работает, почему написано именно так и какие у него есть ограничения. Разбираю Go на разных уровнях: от базовых конструкций языка до конкурентного программирования, тестирования, проектирования приложений и работы с базами данных. Пишу для тех, кто только начинает знакомство с Go, и для разработчиков, которые хотят систематизировать или углубить свои знания.
Программа
01От Go API к вызову другой программы4 урока
02Решение о сервисе и цена разделения4 урока
03HTTP-контракт и его проверка3 урока
04PostgreSQL: хранение и конкуренция7 уроков
05gRPC для синхронного чтения5 уроков
06Повторы и идемпотентность меняющей операции5 уроков
07Kafka: событие, доставка, consumer6 уроков
08Outbox, inbox и восстановление6 уроков
09Тесты правил, контрактов и отказов5 уроков
10Логи, метрики и трассировка5 уроков
11Сборка, запуск и совместимый выпуск5 уроков
Дополнительные материалы и практика
Задачи
- Go: Принять только полный ответ о последней статье — задача с проверкой
- HTTP-клиент поиска на Go: обработка ответа и ошибок — задача
- Go: Декодирование артефакта из JSON — задача с проверкой
- Go: Обязательная и необязательная зависимость при отказе — задача с проверкой
- Go: HTTP-обработчик поиска задания через JobStore — задача с проверкой
- Go: HTTP-обработчик расчёта калорийности состава — задача с проверкой
- Go: Контрактный тест обработчика и клиента питания — задача с проверкой
- Go: Сохраняем бронь и ищем по requestid — задача с проверкой
- Go: Повторный requestid возвращает прежнюю бронь — задача с проверкой
- Go: Один requestid для вызова и выяснения результата — задача с проверкой
- Go: Один бюджет времени на попытки — задача с проверкой
- Go: Не перегружаем Label при сбое — задача с проверкой
- Go: Повтор не создаёт второго предупреждения — задача с проверкой
- Квота загрузки на Go: проверка лимита без переполнения int64
- Go: Медленная зависимость и старый клиент — задача с проверкой
- Go: Настройки и миграция до API — задача с проверкой
