Golang - микросервисная архитектура, проектирование API
Вы научитесь делить систему на Go-сервисы с явными контрактами: новая версия API выходит рядом со старой, и старые клиенты продолжают работать. Без этого один зависший сосед утаскивает за собой весь сервис, а клиент получает голое 500 с пустым телом. Решение вы сдаёте прямо на странице шага: платформа собирает Go и гоняет скрытые тесты, а для лабораторных поднимает настоящие nginx, Redis, PostgreSQL и Kubernetes.
Чему вы научитесь
- Разводить версии API по пути через nginx-шлюз и помечать старую версию заголовками Deprecation и Sunset
- Отличать совместимые правки контракта от ломающих в JSON и в proto3, выводить старые теги через reserved
- Описывать контракт в OpenAPI 3.0 и в .proto, из которого генерируются клиенты и серверные интерфейсы
- Отдавать ошибки в формате RFC 7807 Problem Details вместо голого текста
- Защищать платёжные POST ключом Idempotency-Key, а консьюмеров дедупликацией по ключу события
- Ставить на вызов соседа таймаут через context.WithTimeout, ретрай с экспоненциальным backoff и circuit breaker
- Связывать сервисы синхронно по HTTP и gRPC и асинхронно через RabbitMQ, Kafka и Redis Pub/Sub
- Работать с PostgreSQL из Go через database/sql, GORM и sqlx, писать миграции, кэшировать в Redis
- Писать модульные и интеграционные тесты на Testify, мокать внешние зависимости, отлаживать в delve
- Подключать JWT и OAuth 2.0, TLS между сервисами и держать секреты отдельно от кода
Готовый результат: заказ проходит шлюз и сервисы
Клиент создаёт заказ на /v2 и получает 200 с payment_id. За этим ответом стоят шлюз на nginx, order-service с отдельной базой, вызов payment-service по HTTP, gRPC к user-service и событие в брокер.
Старый клиент на /v1 получает заголовки Deprecation и Sunset. Такой контур вы научитесь проектировать и проверять: от шлюза с nginx до событий и контрактов.
Для кого
Go-разработчикам, которые уже пишут сервисы и упираются в связи между ними: версии API, ретраи, дубли событий
Бэкенд-разработчикам с монолитом, которым предстоит резать его на сервисы
DevOps- и SRE-инженерам, которым нужно понимать код сервисов: трейсы, пробы здоровья, конфиг из окружения
Что нужно знать
Базовый Go: переменные, функции, структуры, срезы, ошибки
Глубокий опыт в бэкенде или DevOps не нужен: сети, контейнеры и оркестрацию курс разбирает с нуля
Go 1.26 и Docker пригодятся, если захотите запускать решения у себя; сдача и проверка идут на платформе
Как собираем: заказ и событие, которые не потеряются
Событие записывается в таблицу outbox в одной транзакции с заказом. Relay читает неотправленные записи и отправляет их в брокер. Если он упадёт до отметки, событие уйдёт повторно, поэтому консьюмер дедуплицирует по ключу.
Так же защищают платёжный POST: заголовок Idempotency-Key возвращает сохранённый ответ вместо второго списания.
Какие условия он обязан выдержать: контракт переживает правки
Новое поле можно выкатить в текущую версию, а переименование или смену типа нельзя: старый клиент получит пустое значение или ошибку. В gRPC поле на проводе узнают по номеру тега, поэтому имя менять можно, а выведенный номер закрывают через reserved.
Старую версию выводят не молча: сначала заголовки Deprecation и Sunset, потом отключение.
Как принимаем работу: ожидание против фактического состояния
Приёмка сверяет ожидание с фактом: ответ клиенту, конечное состояние данных, повтор по ключу, время ответа. На картинке пример такого сценария на стенде: по trace видно, что таймаут 300 ms, пауза и повторная попытка не уложились в бюджет.
В курсе работу принимает платформа. Код-задачи собираются на раннере golang:1.26 и проходят скрытые тесты с крайними случаями. Лабораторные идут в настоящих контейнерах: конфиг шлюза должен пройти nginx -t, подписчик Redis должен получить ваше событие, kubectl get deployment web должен показать 2/2 в READY. Кластер и Redis к запуску решения уже подняты.
Поддержка
Вы также можете задать любой вопрос по курсу у поддержки t.me/mentorix_support
Программа курса
Модулей: 13, уроков: 79. Задачи с кодом проверяются автоматически.
Введение
- Добро пожаловать
- Из чего состоит этот курс
- Управление зависимостями с помощью Go Modules
- Структура Go-проекта и сборка
Разбираем основные сетевые протоколы
- Модель OSI
- IP
- TCP
- HTTP / HTTPS
- UDP
- DNS и обнаружение сервисов
Разработка веб-сервисов на Go
- Обзор стандартной библиотеки net/http
- Пишем первый TCP-сервер
- Использование веб-фреймворков: Gin, Echo, Fiber
- Маршрутизация и обработка запросов
- Middleware: применение и создание
- Graceful shutdown и таймауты сервера
- Работа с JSON: сериализация запросов и ответов
Основы микросервисной архитектуры
- Понятие и эволюция микросервисов
- Преимущества и недостатки микросервисной архитектуры
- Сравнение с монолитной архитектурой
- Ключевые принципы разработки микросервисов
- Декомпозиция на сервисы и границы контекста
- 12-factor app для микросервисов
Принципы SOLID
- Что такое SOLID и зачем он нужен
- Single Responsibility Principle
- Open-Closed Principle
- Liskov Substitution Principle
- Interface Segregation Principle
- Dependency Inversion Principle
- SOLID на практике: рефакторинг Go-сервиса
Проектирование API
- RESTful API: принципы и лучшие практики
- Стандарты и конвенции при проектировании API
- Работа с форматами данных JSON и XML
- Версионирование API
- Документация API с помощью Swagger / OpenAPI
- Обработка ошибок API: коды и формат тела
- Идемпотентность и пагинация
Взаимодействие микросервисов
- Синхронная и асинхронная коммуникация
- Протоколы взаимодействия: HTTP, gRPC
- Message brokers: RabbitMQ, Apache Kafka
- Паттерны коммуникации: Publish/Subscribe, Request/Reply
- Отказоустойчивость: retry, timeout, circuit breaker
- Идемпотентность и семантика доставки
Работа с базами данных
- Подключение к реляционным (PostgreSQL, MySQL) и NoSQL базам
- ORM и библиотеки доступа к данным: GORM, sqlx
- Миграции баз данных
- Кэширование с использованием Redis
- Пул соединений и таймауты запросов
- Транзакции и уровни изоляции
Тестирование и отладка
- Написание модульных и интеграционных тестов
- Использование фреймворков для тестирования: Testify
- Mocking и тестирование внешних зависимостей
- Отладка приложений с помощью delve
- Table-driven тесты в Go
- Покрытие и бенчмарки
Безопасность микросервисов
- Аутентификация и авторизация: JWT, OAuth 2.0
- Управление секретами и конфиденциальными данными
- SSL / TLS шифрование
- Обработка ошибок и логирование
- RBAC и авторизация на уровне сервиса
- Защита от типичных атак (инъекции, rate limiting)
Контейнеризация и оркестрация
- Введение в Docker: создание и управление контейнерами
- Создание Dockerfile для Go-приложений
- Оркестрация с помощью Kubernetes
- Управление конфигурацией и секретами в Kubernetes
- Kubernetes: Deployment и Service на практике
- Health probes и ресурсы
- Ingress и внешний доступ
Мониторинг и логирование
- Prometheus и Grafana для мониторинга
- Централизованное логирование с помощью ELK Stack
- Трассировка запросов: Jaeger, OpenTelemetry
- Структурированное логирование в Go
- Golden signals и алерты
Оптимизация и масштабирование
- Профилирование и оптимизация производительности Go-приложений
- Горутины и каналы для конкурентности
- Шардинг и репликация данных
- Балансировка нагрузки
- Пулы воркеров и ограничение параллелизма
- Кэширование и backpressure
Стоимость курса: 12990 ₽
Открыть курс на Mentorix · Все курсы