Go: микросервисная архитектура на реальном проекте [Stepik] [Сергей Камянецкий]

Bot

Администратор
Команда форума
23 Янв 2020
206,848
3,145
113

Складчина: Go: микросервисная архитектура на реальном проекте [Stepik] [Сергей Камянецкий]​

Screenshot_20260410_143633.png

Практический курс по созданию микросервисной системы на 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 и агрегатами
Плюс полная инфраструктура: Docker Compose для dev и prod, Prometheus-метрики, Grafana-дашборды, нагрузочные тесты k6.
Структура курса
Курс состоит из 5 модулей и 128 уроков:

  • Модуль 1. Каталог товаров
  • Модуль 2. Корзина покупок
  • Модуль 3. Промоакции
  • Модуль 4. Оформление заказов
  • Модуль 5. Мониторинг и инфраструктура
Всего более 140 уроков, почти 18 часов видео
Особенности

  • Каждый урок — конкретный шаг разработки: добавили слой, написали код, запустили, проверили
  • Есть задания для самостоятельной работы (ТЗ) с последующим разбором решения
  • Dependency Injection реализован вручную, без магических фреймворков — вы понимаете каждую связь
  • Используются разные СУБД (PostgreSQL и MySQL), разные протоколы (REST, gRPC) и разные способы взаимодействия (синхронный и асинхронный) — чтобы показать реальную картину микросервисной разработки
Спойлер: Подробно
Программа курса

  1. Первые шаги
    Go-cтарт
    Что будем делать: Marketplace-Go — обзор проекта

  1. Каталог курсов
    ️ 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 Финал каталога и итоговые правки
    ️ Саморефлексия

  1. Корзина покупок
    ️ 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
    ️ Саморефлексия

  1. Промоакции
    ️ 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 во все сервисы
    ️ Саморефлексия

  1. Оформление заказов
    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
    Саморефлексия

  1. Мониторинг и инфраструктура
    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: управление контейнерами
    Саморефлексия

  1. Окончание
    Итоги

Скрытая ссылка