Складчина: Go: микросервисная архитектура на реальном проекте [Stepik] [Сергей Камянецкий]
Практический курс по созданию микросервисной системы на Go. За время прохождения уроков вы с нуля построите маркетплейс из четырёх сервисов: каталог товаров, корзина с Redis-кэшированием, промоакции через gRPC и оформление заказов через RabbitMQ. Каждый сервис — Clean Architecture, CQRS, PostgreSQL/MySQL. В финале — Prometheus, Grafana, нагрузочные тесты и Docker Compose для продакшена. Никакой воды — только код, архитектура и практика.
Чему вы научитесь
- Проектировать микросервисную архитектуру на Go с нуля
- Применять Clean Architecture и CQRS в реальном проекте
- Разрабатывать REST API с использованием фреймворка Gin
- Строить gRPC-сервисы и настраивать межсервисное взаимодействие
- Реализовывать событийную архитектуру через RabbitMQ
- Внедрять кэширование с Redis (паттерн Decorator)
- Работать с несколькими СУБД: PostgreSQL и MySQL
- Применять паттерны DDD: Entity, Value Object, Aggregate
- Управлять миграциями баз данных через golang-migrate
- Настраивать мониторинг с Prometheus и визуализацию в Grafana
- Проводить нагрузочное тестирование с помощью k6
- Контейнеризировать микросервисы через Docker и Docker Compose
- Организовывать Dependency Injection без фреймворков
- Реализовывать валидацию, middleware и централизованную обработку ошибок
Важно
Для прохождения этого курса вам потребуется браузер Mozilla Firefox или Safari
Цель курса
Научить вас проектировать и разрабатывать микросервисные системы на Go — не на синтетических примерах, а на реальном проекте, который растёт от пустого репозитория до готовой к продакшену системы с мониторингом.
Почему именно этот курс
Большинство курсов по микросервисам показывают готовый результат и объясняют, как он устроен. Здесь всё наоборот: вы проходите весь путь разработки — от первого go mod init до Grafana-дашбордов. Каждое архитектурное решение появляется в тот момент, когда оно действительно нужно, а не потому что «так принято».
Что вы построите
Микросервисный маркетплейс из четырёх независимых сервисов:
- Каталог товаров — REST API на Gin, PostgreSQL, пагинация и фильтрация
- Корзина покупок — Redis-кэширование, gRPC-клиент для скидок, публикация событий в RabbitMQ
- Промоакции — gRPC-сервер, MySQL, Protocol Buffers
- Оформление заказов — обработка событий из RabbitMQ, богатая доменная модель с Value Objects и агрегатами
Структура курса
Курс состоит из 5 модулей и 128 уроков:
- Модуль 1. Каталог товаров
- Модуль 2. Корзина покупок
- Модуль 3. Промоакции
- Модуль 4. Оформление заказов
- Модуль 5. Мониторинг и инфраструктура
Особенности
- Каждый урок — конкретный шаг разработки: добавили слой, написали код, запустили, проверили
- Есть задания для самостоятельной работы (ТЗ) с последующим разбором решения
- Dependency Injection реализован вручную, без магических фреймворков — вы понимаете каждую связь
- Используются разные СУБД (PostgreSQL и MySQL), разные протоколы (REST, gRPC) и разные способы взаимодействия (синхронный и асинхронный) — чтобы показать реальную картину микросервисной разработки
Программа курса
Первые шаги
Go-cтарт
Что будем делать: Marketplace-Go — обзор проекта
Каталог курсов
️ 001 Введение в проект
️ 002 Инициализация Go-модуля и Gin-сервер
️ 003 Доменные сущности: BaseEntity, Brand, Category, CatalogI
️ 004 Docker Compose и PostgreSQL
️ 005 SQL-миграции и seed-данные
️ 006 Репозиторий брендов (PostgreSQL)
️ 007 Query handler: получение брендов
️ 008 HTTP handler: эндпоинт брендов
️ 009 Маршрутизация API v1: /brands
️ 010 Конфигурация через .env и godotenv
️ 011.1 [ТЗ] Самостоятельная работа
️ 012 Репозиторий товаров с JOIN
️ 013 Query handler: список товаров
️ 014 HTTP handler: список товаров
️ 015 Маршрут /catalog-items
️ 016 Рефакторинг SQL-запросов
️ 017 Репозиторий: получение товара по ID
️ 018 Query handler: товар по ID
️ 019 HTTP handler: товар по ID
️ 020 Маршрут /catalog-items/
️ 021 Поиск по названию (ILIKE)
️ 022 Query handler: поиск по названию
️ 023 HTTP handler: поиск по названию
️ 024 Маршрут /catalog-items/title/:title
️ 025 Репозиторий: создание товара (INSERT)
️ 026 Command handler: создание товара
️ 027 HTTP handler: POST-запрос
️ 028 Маршрут POST /catalog-items
️ 029 Репозиторий: обновление товара (UPDATE)
️ 030 Command handler: обновление товара
️ 031 HTTP handler: PUT-запрос
️ 032 Маршрут PUT /catalog-items
️ 033 [ТЗ] Удаление товара
️ 034 [ТЗ] Поиск по бренду
️ 035 Пагинация: Pagination и QueryArgs
️ 036 Фильтрация и сортировка: введение
️ 037 Query handler: пагинация (V2)
️ 038 HTTP handler: пагинация (V2)
️ 039 Маршрут GET /v2/catalog-items, тестирование пагинации
️ 040 Автомиграции при старте (golang-migrate)
️ 041 Финал каталога и итоговые правки
️ Саморефлексия
Корзина покупок
️ 042 PostgreSQL для Basket в Docker Compose
️ 043 Gin-сервер и health-check для Basket
️ 044 Миграции Basket и автозапуск
️ 045 Доменные модели: ShoppingCart, ShoppingCartItem
️ 046 Репозиторий: сохранение корзины (транзакция)
️ 047 Command handler: сохранение корзины
️ 048 HTTP handler: POST /cart
️ 049 Маршрутизация API v1: /cart
️ 050 Инициализация слоёв и DI
️ 051 Валидация моделей (go-playground/validator)
️ 052 Middleware: централизованная обработка ошибок
️ 053 Интеграция ErrorHandlerMiddleware
️ 054 Репозиторий: получение корзины
️ 055 Query handler: получение корзины
️ 056 HTTP handler: GET /cart/:accountName
️ 057 Маршрут GET /cart/:accountName
️ 058 Кастомный тип NotFoundError
️ 059 [ТЗ] Удаление корзины
️ 060 Redis-контейнер для кэширования
️ 061 RedisCartRepository
️ 062 Интеграция Redis
️ 063 Dockerfile и compose-prod для Basket
️ Саморефлексия
Промоакции
️ 064 MySQL-контейнер для Promotion
️ 065 Подключение к MySQL и автомиграции
️ 066 Миграция: таблица promos и seed-данные
️ 067 Protocol Buffers: greet.proto и кодогенерация
️ 068 Реализация GreeterService (gRPC)
️ 069 gRPC-сервер с graceful shutdown
️ 070 gRPC Reflection и тестирование
️ 071.1 gRPC метод Add (практика)
️ 071.2 Proto-контракт
️ 072 Доменная модель
️ 073 Интерфейс PromotionRepository
️ 074 Реализация FindByCatalogItem
️ 075 Реализация обработчика promotion/queries
️ 076 gRPC-сервис PromoService: заглушка
️ 077 Реализация GetPromoByCatalogItem
️ 078 Интеграция PromoService в main
️ 079 Proto: CreatePromo RPC
️ 080 Репозиторий: вставка промоакции
️ 081 Command handler: создание промоакции
️ 082 gRPC эндпоинт CreatePromo
️ 083 Интеграция CreatePromoHandler и DI
️ 084 Unique-ограничение и обработка дубликатов
️ 085 UpdatePromo: полный цикл
️ 086 [ТЗ] Удаление промоакции
️ 087 gRPC-клиент в SaveCartHandler: применение скидок
️ 088 Интеграция gRPC-клиента в Basket
️ 089 Dockerfile и compose-prod для Promotion
️ 090.1 Проблема: БД не готова при старте
️ 090.2 Утилита WaitForDB с retry-логикой
️ 091 Интеграция WaitForDB во все сервисы
️ Саморефлексия
Оформление заказов
092 PostgreSQL для Checkout и миграции
093 Конфигурация и запуск миграций
094 Gin-сервер и health-check для Checkout
095 Доменная модель: Order, Value Objects, Enums
096 Интерфейс и реализация OrderRepository
097 Репозиторий: получение заказа с позициями
098 Репозиторий: поиск заказов по аккаунту
099 Репозиторий: создание заказа (транзакция)
100 Query handler: заказ по ID
101 HTTP handler: GET /orders/:id
103 [ТЗ] Заказы по аккаунту
104 RabbitMQ-контейнер в Docker Compose
105 Структура messaging: заготовки
107 RabbitMQ Publisher: exchange, queue, publish
108 Command handler: CheckoutCart и публикация события
109 HTTP handler: POST /cart/checkout
110 Маршрут checkout и интеграция RabbitMQ
112 ProcessOrderSubmissionHandler: создание заказа
113 OrderSubmittedConsumer: маппинг события в команду
114 Интеграция consumer в Checkout с graceful shutdown
115 Dockerfile и compose-prod для Checkout
Саморефлексия
Мониторинг и инфраструктура
116.1 Введение в Prometheus и Grafana
116.2 Пакет metrics: HTTP, gRPC, DB, RabbitMQ
117 Gin Middleware для Prometheus-метрик
118 gRPC-интерцепторы метрик
119 Метрики в Catalog-сервисе
120 Метрики в Promotion-сервисе
121 Конфигурация Prometheus (prometheus.yml)
122 Datasource Grafana для Prometheus
123 Prometheus и Grafana в compose-prod
124.1 Демо: дашборды Prometheus и Grafana
124.2 Grafana-дашборды: Catalog и Promotion
125 Нагрузочное тестирование с k6 (HTTP)
126 Тюнинг пула соединений PostgreSQL
127 k6: нагрузочный тест gRPC
128 Portainer: управление контейнерами
Саморефлексия
Окончание
Итоги
Скрытая ссылка