Каталог/назад к курсам
Микросервисы на Go: HTTP, PostgreSQL, gRPC, Kafka и Docker
BackendСредний

Микросервисы на Go: HTTP, PostgreSQL, gRPC, Kafka и Docker

От работающего Go API — к взаимодействию сервисов, которому можно доверять. Разберитесь, как проектировать контракты, сохранять согласованность данных и восстанавливать обработку после сбоев. HTTP, PostgreSQL, gRPC, Kafka и Docker — через код и наглядные разборы.

11 модулей • 55 уроков185 заданий с проверкой
Код в браузере: GoСвободный темпСертификат с проверкой

О курсе

Когда запрос потерялся, а данные уже изменились

Клиент получил таймаут после 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 разбираются в уроках; заранее владеть всем стеком не требуется.
#go#golang#микросервисы

Автор курса

Петр Андреев

Меня зовут Пётр. Я занимаюсь backend-разработкой на Go. Мне важно не просто показать готовое решение, а объяснить, как оно работает, почему написано именно так и какие у него есть ограничения. Разбираю Go на разных уровнях: от базовых конструкций языка до конкурентного программирования, тестирования, проектирования приложений и работы с базами данных. Пишу для тех, кто только начинает знакомство с Go, и для разработчиков, которые хотят систематизировать или углубить свои знания.

Программа

01От Go API к вызову другой программы4 урока
1Что уже умеем и чему научимся
2Go-программа делает запрос к Article API
3Сервер и клиент работают в разных процессах
4Пустой ответ, 503, обрыв и повреждённый JSONпробный
02Решение о сервисе и цена разделения4 урока
1Когда поиск стоит вынести из Article API
2Контракт переживает независимый выпуск
3Обязательная и необязательная зависимость при отказе
4Две реплики не делят Go-память
03HTTP-контракт и его проверка3 урока
1Какие данные Recipe API передаёт Nutrition
2Невалидный состав не создаёт расчёт
3Контрактный тест обработчика и клиента
04PostgreSQL: хранение и конкуренция7 уроков
1Схема мест и бронирований
2Добавляем поле без остановки старого кода
3Go читает доступные места
4Сохраняем бронь и ищем по request_id
5Два клиента выбирают одно место
6Занимаем место одной транзакцией
7Повторный request_id возвращает прежнюю бронь
05gRPC для синхронного чтения5 уроков
1Route Planner запрашивает точку у Geo
2Сервер возвращает точку или gRPC-ошибку
3Route Planner обрабатывает статус Geo
4Передаём deadline до Geoпробный
5Меняем proto без поломки клиента
06Повторы и идемпотентность меняющей операции5 уроков
1Один request_id для вызова и выяснения результата
2Один ключ для всех попыток созданияпробный
3Какие ошибки можно повторить
4Один бюджет времени на попытки
5Не перегружаем Label при сбое
07Kafka: событие, доставка, consumer6 уроков
1Измерение становится событием
2Producer отправляет по ключу device_id
3Consumer подтверждает offset после обработкипробный
4Повтор не создаёт второго предупреждения
5Неверное сообщение не блокирует partition
6Расширяем событие без остановки consumer
08Outbox, inbox и восстановление6 уроков
1Ticket сохранён, событие потерялось
2Статус и outbox в одной транзакциипробный
3Publisher отправляет неотмеченные события
4History помнит обработанный event_idпробный
5Возвращаем застрявшее изменение
6Частичный отказ без общей транзакции
09Тесты правил, контрактов и отказов5 уроков
1Проверяем расчёт лимита загрузок
2Тестируем HTTP-обработчик с fake-storeпробный
3Интеграционный тест на PostgreSQL
4Два одновременных списания лимита
5Медленная зависимость и старый клиент
10Логи, метрики и трассировка5 уроков
1Находим обработку файла в логах
2Метрики показывают задержку и отказы
3Трасса связывает HTTP и worker
4Готовность и корректное завершение APIпробный
5Почему задача не закончилась
11Сборка, запуск и совместимый выпуск5 уроков
1Собираем Schedule API в Docker-образ
2Настройки и миграция до API
3Запускаем API, notifier, PostgreSQL и Kafka через Compose
4Выпускаем новую схему и сервис совместимо
5Прослеживаем расписание до уведомления
Дополнительные материалы и практика

Задачи

Все задачи курса

Уроки