Научись разрабатывать высокопроизводительные, масштабируемые микросервисы, как в ВК, Yandex, OZON, СБЕР, Тинькофф, и увеличь свои шансы на трудоустройство в BigTech или повышение грейда
Курс адаптирован под частые проблемы backend-a, которые встречаются на работе
Вся подкапотная микросервисов в одном обучении
- Перехожу на Go — хочу быстро адаптироваться и не писать как на старом языке
Узнаешь все необходимое про внутрянку Go и микросервисную архитектуру: HTTP, OpenAPI, gRPC, Kafka, Redis, Postgres, Prometheus, Grafana, Jagger, Elasticsearch, Kibana, Envoy, OpenTelemetry и др., чтобы сменить стек без потери в ЗП и сразу работать на интересных проектах.
- Пишу на Go, но застрял в типовых задачах — хочу расти дальше
Узнаешь лучшие практики, нюансы и лайфхаки построения микросервисов, которые применяются в бигтехах, чтобы вырасти из рутины и начать решать сложные инженерные задачи.
- Хочу уверенно проходить собесы и повысить свой грейд и зарплату
Напишешь реальный проект из 5 микросервисов, разберёшься как всё взаимодействует между собой и сможешь уверенно отвечать на вопросы по архитектуре и технологиям на собесах в топовые компании.
- Разработаешь 5 микросервисов, связанных между собой через Kafka и gRPC, с изоляцией от внешнего мира с помощью Envoy Gateway
- Обеспечишь мониторинг сервиса по стандарту OpenTelemetry с юнит-тестами, чтобы исключить ошибки в работе
- Освоишь кеширование данных с помощью Redis и асинхронное взаимодействие между микросервисами с помощью Kafka
- Освоишь работу с PostgreSQL, напишешь свою платформенную библиотеку, упрощающую разработку
- Реализуешь межсервисное взаимодействие, систему аутентификации и авторизации
- На практике научишься применять архитектурные подходы построения микросервисов
8 недель. 5 микросервисов. Production-ready стек.
Неделя 1
HTTP и gRPC: два протокола, которые должен знать каждый Go-разработчик
Неделя 2
Блок 1: gRPC — язык, на котором говорят микросервисы
Блок 2: HTTP — REST API на промышленном уровне
- Protocol Buffers с нуля — описываем контракт сервиса в ".proto"-файле
- buf — генерируем Go-код одной командой вместо ручной возни с `protoc`
- Поднимаем gRPC-сервер и клиент — полноценный CRUD для управления данными
- Интерцепторы: перехватываем каждый запрос — логирование, перехват паник и кастомная логика
- gRPC-Gateway + Swagger UI — один сервис, два протокола: REST снаружи, gRPC внутри
- Валидация входных данных — отсекаем невалидные запросы ещё до попадания в бизнес-логику
Блок 3: Go Workspace — мультимодульный проект
- Chi — самый популярный Go-роутер — маршруты, цепочки middleware, таймауты и корректное завершение работы
- Сначала контракт, потом код — описываем OpenAPI-спецификацию, получаем типизированный сервер с валидацией из коробки через Ogen
- HTTP вызывает gRPC — связываем сервисы между собой: HTTP-фронтенд обращается к gRPC-бэкенду
Домашнее задание
- go.work для нескольких сервисов — общие proto-определения, общие зависимости, единый репозиторий
Результат недели
- Реализовать 3 микросервиса: OrderService (HTTP), InventoryService (gRPC), PaymentService (gRPC). Связать их через gRPC-клиенты — заказ обращается к складу и платёжке.
- Ты с нуля напишешь 3 работающих сервиса на двух протоколах, освоишь кодогенерацию API из контрактов и научишься связывать микросервисы между собой. Это фундамент, на котором строится всё остальное.
Clean Architecture и тесты: пишем код, как в BigTech-компаниях
Неделя 3
Блок 4: Слоистая архитектура — структура, которую поймёт любой разработчик
Блок 5: Unit-тесты — от нуля до полного покрытия за 7 шагов
- API → Service → Repository → Client — чёткое разделение ответственности
- Три модели данных — модель API, доменная модель, модель хранилища: зачем их разделять и как конвертировать между собой
- Инверсия зависимостей — интерфейсы определяет тот, кто использует, а не тот, кто реализует
- Стратегия обработки ошибок — единые ошибки-маркеры на каждом слое, понятная цепочка от базы до клиента
Домашнее задание
- Первый тест на чистом Go** — `testing.T`, никаких фреймворков
- Табличные тесты — один тест, десять сценариев: описываем входы и ожидаемые результаты
- testify — читаемые проверки вместо ручных `if err != nil`
- Стабы: подменяем зависимости вручную — простая реализация в памяти вместо реальной базы
- mockery — генерируем моки автоматически — задаём ожидания, проверяем вызовы
- Тесты в Clean Architecture — мокаем репозиторий, тестируем бизнес-логику изолированно
- Параллельные тесты — запускаем тесты одновременно и не ловим гонки
Результат недели
- Рефакторинг всех 3 сервисов в Clean Architecture. Unit-тесты с моками на сервисный и API-слой. Покрытие ≥40%.
- Код разложен по чётким слоям — бизнес-логика отделена от транспорта и хранилища. Любой новый разработчик откроет проект и сразу поймёт, где что лежит. Тесты с моками ловят баги до продакшена, а не после
Docker и PostgreSQL: сервисы обретают настоящее хранилище
Неделя 4
Блок 6: Docker — упаковываем сервис в контейнер
Блок 7: PostgreSQL — SQL на Go без боли
- Многоэтапная сборка Docker-образа — 800 МБ Go SDK превращаются в 10 МБ финальный образ
- Запуск не от root — безопасно, как требуют в продакшене
- Docker Compose — база данных, миграции и сервис поднимаются одной командой
- Healthcheck и зависимости — контейнеры стартуют в правильном порядке
Блок 8: Транзакции — атомарность без компромиссов
- pgx — самый быстрый драйвер для PostgreSQL с пулом соединений (переиспользуем подключения, а не создаём новые на каждый запрос)
- Squirrel — SQL-конструктор — собираем запросы программно, без склейки строк
- Миграции через Goose — версионируем схему базы, накатываем изменения при деплое
- Практические приёмы — получаем ID сразу при вставке, работаем с nullable-полями, избегаем SQL-инъекций
Домашнее задание
- Transaction Manager — оборачиваем несколько операций в транзакцию, не протаскивая объект транзакции через все слои
- Прозрачные транзакции — репозиторий даже не знает, что работает внутри транзакции — всё скрыто в контексте
Результат недели
- Поднять PostgreSQL через Docker Compose для OrderService и InventoryService. Написать миграции, заменить хранение в памяти на реальные SQL-запросы. Интегрировать Transaction Manager для атомарного создания заказа
- Хранилище в памяти заменено на PostgreSQL. Ты умеешь поднимать инфраструктуру через Docker Compose, делать миграции, писать запросы и проектировать хранилища. Паттерн Transaction Manager — один из самых частых вопросов на собеседованиях
Конфигурация, DI и Domain-Driven Design
Неделя 5
Блок 9: Конфигурация — параметры сервиса без хардкода
Блок 10: DI-контейнер — управление зависимостями без магии
- YAML + переменные окружения через cleanenv — один конфиг-файл, переопределения через переменные окружения для каждого стенда
- Профили: local / production / docker — переключаем поведение без изменения кода
Блок 11: JSONB — гибкие структуры в PostgreSQL
- Ручной DI на Go — создаём зависимости лениво: только когда понадобятся
- Корректное завершение работы — ресурсы закрываются в обратном порядке: что открыли последним — закрываем первым
- Платформенная библиотека — проверка здоровья сервиса, логгер, менеджер закрытия ресурсов: переиспользуемые компоненты для всех сервисов
Блок 12: Domain-Driven Design — бизнес-логика, которая сама себя защищает
- JSONB-колонки — храним разнородные данные (характеристики разных типов деталей) в одной колонке без раздувания схемы
- Индексы по JSON — быстрый поиск внутри JSON-структур
Домашнее задание
- Сущности с поведением — объекты сами знают свои правила, а не просто хранят данные
- Value Objects — типизированные значения (например, «прочность корпуса»), которые нельзя создать в невалидном состоянии
- Агрегаты — группа связанных объектов с единой точкой входа, которая контролирует целостность данных
- Доменный сервис — проверка совместимости компонентов корабля перед заказом
- Резервирование деталей — Reserve/Release с защитой от невалидных состояний
Результат недели
- Внедрить конфигурацию и DI-контейнер во все сервисы. Создать платформенную библиотеку. Реализовать DDD: сущность Part с методами Reserve/Release, Value Objects для свойств компонентов в JSONB, сервис проверки совместимости при заказе
- Сервисы конфигурируются через YAML и переменные окружения, зависимости собираются через DI-контейнер, ресурсы корректно освобождаются при завершении. Бизнес-логика защищена доменной моделью — невалидное состояние невозможно создать в принципе. Ты строишь не просто сервисы, а **платформу** — как это делают в BigTech-компаниях
Kafka: асинхронная коммуникация между сервисами
Неделя 6
Блок 13: Apache Kafka — шина событий для микросервисов
Блок 14: SELECT FOR UPDATE — блокировки в PostgreSQL
- Синхронный и асинхронный продюсер — гарантия доставки каждого сообщения vs максимальная пропускная способность
- Консюмер — читаем поток событий — смещения, партиции, чтение с начала или с конца
- Consumer Groups — горизонтальное масштабирование — несколько экземпляров сервиса делят между собой поток сообщений, автоматически перераспределяя нагрузку
- Обработка сообщений пачками — накапливаем и обрабатываем группой для производительности
- Kafka в Clean Architecture — выделяем слои для асинхронных потоков так же, как для HTTP и gRPC
Домашнее задание
- Блокировка строк при чтении — «заморозить» запись в базе, пока мы с ней работаем, чтобы другой запрос не изменил её параллельно
- Правильный порядок блокировок — всегда блокируем строки в одном и том же порядке, чтобы два запроса не заблокировали друг друга навечно
- Повторная обработка событий без последствий — даже если Kafka доставит сообщение дважды, данные не сломаются
Результат недели
- Поднять Kafka. Создать AssemblyService — новый микросервис, который слушает событие оплаты, «собирает корабль» и отправляет событие завершения сборки. OrderService публикует событие при оплате и обновляет статус при получении результата сборки. Блокировка строк для безопасного резервирования деталей.
- Полная асинхронная цепочка: заказ → оплата → сборка → обновление статуса. Четвёртый микросервис (AssemblyService) работает через Kafka. Ты освоил событийную архитектуру — именно так обрабатывают миллионы событий в BigTech-компаниях вроде OZON, Яндекса и Тинькофф
Аутентификация: IAM-сервис и Redis
Неделя 7
Блок 15: Redis — быстрое key-value хранилище
Блок 16: Аутентификация на сессиях — от логина до защиты API
- Базовые операции — простые ключи, хеш-таблицы, хранение структур
- Время жизни ключей (TTL) — данные автоматически удаляются через заданное время: идеально для сессий и кеша
- Распределённая блокировка через Redis — когда несколько экземпляров сервиса должны по очереди работать с общим ресурсом
- Защита от лавины запросов — если тысяча пользователей одновременно запросила одно и то же, в базу уходит только один запрос
- Redis в Clean Architecture — кеширующий слой как отдельный репозиторий
Домашнее задание
- bcrypt — хешируем пароли правильно — почему md5 и sha256 для паролей использовать нельзя
- Сессии в Redis с временем жизни — создание, проверка, удаление
- gRPC-интерцептор для проверки сессий — список открытых методов, извлечение токена из заголовка
- HTTP middleware для аутентификации — проверяем сессию через IAM, пробрасываем ID пользователя в контекст запроса
- Передача информации о пользователе между сервисами — gRPC metadata для пробрасывания идентификатора через цепочку вызовов
Результат недели
- Создать IAM Service — пятый микросервис: Register, Login, Logout, Whoami, GetUser. Пользователи в PostgreSQL, сессии в Redis с ограниченным временем жизни. Добавить HTTP middleware в OrderService и gRPC-интерцептор в InventoryService для проверки сессий через IAM.
- Пятый микросервис — полноценный IAM с регистрацией, аутентификацией и хранением сессий в Redis. Каждый запрос проходит проверку — API больше не открыт всему миру. Плюс ты освоил распределённые блокировки и защиту от лавинных запросов — паттерны, которые спрашивают на каждом Senior-собеседовании.
Observability: логи, метрики и распределённые трейсы
Неделя 8
Блок 17: Логирование — от println до Kibana
Блок 18: Метрики — Prometheus и Grafana
- Структурированные логи через slog + OpenTelemetry — логи отправляются в единый коллектор телеметрии
- Запись сразу в два места — одновременно в консоль и в Elasticsearch, чтобы видеть логи и локально, и в централизованном хранилище
- Kibana — ищем и анализируем логи всех сервисов в одном интерфейсе
- Устойчивость к сбоям — если Elasticsearch упал, сервис продолжает работать и писать логи в консоль
Блок 19: Распределённый трейсинг — видим путь запроса насквозь
- Счётчики, гистограммы и другие типы метрик — считаем количество запросов, замеряем время ответа, отслеживаем текущую нагрузку
- Автоматический сбор метрик gRPC — подключается в одну строку, сразу видим latency и количество ошибок
- Prometheus — собирает метрики со всех сервисов через единый коллектор
- Grafana-дашборды — красивые графики бизнес-метрик: заказы, выручка, время сборки
Домашнее задание
- Сквозной идентификатор запроса — один trace-id проходит через все сервисы, позволяя восстановить полный путь
- Автоматический сбор трейсов для gRPC — подключается без изменения бизнес-кода
- Добавляем бизнес-контекст к трейсам — видим не только «запрос прошёл», но и «какой заказ, какой пользователь»
- Jaeger — визуализация полного пути запроса через все сервисы на одном таймлайне
- Инструментация Redis — подключаем трейсы, метрики и логи для каждого вызова кеша через систему хуков
Результат недели
- Развернуть полный стек наблюдаемости: коллектор телеметрии, Elasticsearch + Kibana, Prometheus + Grafana, Jaeger. Настроить логи всех сервисов в Kibana. Бизнес-метрики (заказы, выручка) в Grafana. Трассировка полного пути запроса через Order → Inventory → Payment. Вынести инструменты наблюдаемости в платформенную библиотеку.
- Полноценная система наблюдаемости: Grafana с метриками, Kibana с логами, Jaeger с трейсами. Ты видишь каждый запрос от входа до ответа через все сервисы. Это уровень, который отличает Middle от Senior.
Контейнеризация, балансировка и распределённый Rate Limiting
Блок 20:Контейнеризация и Nginx — всё в Docker, балансировка нагрузки
Блок 21: Паттерны отказоустойчивости — чтобы сервис выжил в продакшене
- Многоэтапная сборка Docker-образа для каждого сервиса — сначала компилируем, затем берём только бинарник в минимальный образ
- Docker Compose для всей системы — 5 сервисов + вся инфраструктура поднимаются одной командой
- Nginx как балансировщик — запросы равномерно распределяются между репликами OrderService
- Горизонтальное масштабирование — запускаем несколько копий сервиса, Nginx сам находит их по имени
Блок 22: Нагрузочное тестирование — проверяем, что всё работает под давлением
- Rate Limiter — ограничиваем количество запросов в секунду, чтобы сервис не захлебнулся под нагрузкой
- Retry с нарастающей задержкой — клиент автоматически повторяет запрос при временных сбоях, каждый раз ожидая чуть дольше (плюс случайный разброс, чтобы все клиенты не повторили одновременно)
- Circuit Breaker — если сервис начал падать, автоматически прекращаем к нему обращаться, даём восстановиться, затем аккуратно проверяем: заработал ли
- Распределённый Rate Limiter через Redis — единый лимит на все копии сервиса, настройка лимитов отдельно для каждого метода, если Redis недоступен — пропускаем запросы, а не блокируем
Домашнее задание
- vegeta — заливаем HTTP-трафиком, замеряем время ответа и пропускную способность
- ghz — то же самое для gRPC, проверяем rate limiter под реальной нагрузкой
Результат недели
- Контейнеризировать все сервисы. Собрать единый Docker Compose со всей инфраструктурой. Настроить Nginx для балансировки OrderService на 3 реплики. Реализовать распределённый Rate Limiter через Redis — единый лимит на все экземпляры. Провести нагрузочное тестирование
- Микросервисная система полностью собрана — от API до мониторинга, от аутентификации до балансировки нагрузки. 5 сервисов в Docker-контейнерах за Nginx, распределённый rate limiter защищает от перегрузки, нагрузочные тесты подтверждают работоспособность. Это готовый проект для портфолио и уверенный ответ на любой вопрос собеседования про микросервисы.
Скрытый текст. Доступен только зарегистрированным пользователям.Нажмите, чтобы раскрыть...
Новые складчины
Категории
Страница 1 из 34

![[IMG]](proxy14p.php?image=https%3A%2F%2Fs10.iimage.su%2Fs%2F02%2Fg0xHqQZx0SwCjBCrisdyKIhSDt6G7GJaNYC2Lc8B8.jpg&hash=8fed0959dc33db8af14e7145e47cf436&v=4)