Go: микросервисная архитектура на реальном проекте
О чём курс
О чём курс
Сергей Камянецкий показывает, как с нуля собрать на Go маркетплейс из четырёх микросервисов: каталога товаров, корзины, промоакций и оформления заказов. Вы начнёте с инициализации Go-модуля и постепенно добавите хранение данных, обмен между сервисами, контейнеризацию и мониторинг. Архитектурные решения разбираются по мере разработки проекта.
Что вы построите
Каталог товаров получает REST API на Gin, базу PostgreSQL, поиск, пагинацию и фильтрацию. Корзина сохраняет данные, кэширует их в Redis и обращается к сервису промоакций за скидками через gRPC. Промоакции работают с MySQL и Protocol Buffers, а оформление заказов принимает события через RabbitMQ и использует доменную модель с объектами-значениями и агрегатами.
Для сервисов автор применяет Clean Architecture и CQRS, разделяя команды и запросы. В проекте также используются миграции через golang-migrate, валидация моделей, middleware и централизованная обработка ошибок. Зависимости связываются вручную, без фреймворка для Dependency Injection.
Как проходит работа
Каждый урок соответствует шагу разработки: вы добавляете слой или обработчик, пишете код, запускаете его и проверяете результат. Есть задания для самостоятельной работы с последующим разбором решения. Курс охватывает синхронное взаимодействие по REST и gRPC, а также асинхронный обмен событиями через RabbitMQ.
В заключительной части вы настроите Prometheus-метрики для HTTP, gRPC, баз данных и RabbitMQ, подключите Grafana и проведёте нагрузочные тесты HTTP и gRPC с помощью k6. Docker Compose используется для окружений разработки и развёртывания; отдельно разбираются готовность баз данных при запуске сервисов и настройка пула соединений PostgreSQL. Для прохождения курса потребуется браузер Mozilla Firefox или Safari.
Программа обучения
Первые шаги 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: управление контейнерами Саморефлексия Окончание Итоги
Теги курса
Другие материалы автора 7
СК Сергей Камянецкий Все материалыОтзывов пока нет. Будьте первым!
Этот курс сейчас в процессе организации складчины. Нажмите кнопку «Записаться» и ожидайте старта — вам придёт уведомление. Когда складчина стартует, в карточке курса будет указан актуальный взнос. Текущая цена пока в процессе формирования и может отличаться от финальной.
Да, мы стремимся, чтобы финальный взнос был не больше ≈10% от оригинальной цены курса. Чем больше участников записывается в складчину, тем ниже выходит взнос для каждого.
Нажмите кнопку «Записаться» и авторизуйтесь на сайте через email (через ту же почту, которую будете использовать для входа). В личном кабинете вас будут ждать инструкции, как пригласить других участников — чем больше людей записалось, тем быстрее стартует складчина и тем ниже взнос. Как только складчина готова к приобретению, вам придёт уведомление.