Полный практический курс по микросервисной архитектуре на реальном проекте - сервисе продажи билетов в кино.
В этом большом курсе мы шаг за шагом перейдём от привычного монолитного backend-приложения к полноценной микросервисной архитектуре. Курс рассчитан на разработчиков, которые уже работали с NestJS и писали монолиты, но хотят понять микросервисы с нуля, без перегруженной теории. На протяжении курса мы создадим Full Stack сервис продажи билетов в кино, разберём, как правильно делить систему на микросервисы, как они общаются между собой, как их запускать, мониторить и объединять в единую инфраструктуру. Вы увидите реальные архитектурные решения, разные подходы к данным и взаимодействию сервисов, а также получите целостное понимание того, как такие системы выглядят в реальных проектах.
Знакомство с курсом и его целями. Обсуждаем, почему микросервисная архитектура востребована, и какие преимущества она даёт при разработке масштабируемых приложений.
Рассматриваем теорию микросервисной архитектуры. Разбираем принципы проектирования, взаимодействия сервисов, управление зависимостями и разделение ответственности.
Создаём общий Core-пакет для всех микросервисов. Настраиваем конфигурацию, публикуем пакет в NPM и автоматизируем процессы с помощью Github Actions.
Поднимаем первый микросервис - Gateway. Настраиваем структуру проекта, маршруты и базовую интеграцию с другими сервисами.
Настраиваем микросервис авторизации. Подготавливаем проект к работе с gRPC.
Изучаем, что такое gRPC и Protocol Buffers. Рассматриваем их роль в микросервисной архитектуре.
Изучаем структуру сообщений, сервисов и правила проектирования контрактов для микросервисов.
Проектируем auth.proto для отправки OTP. Определяем методы, сообщения и их структуру.
Публикуем Proto-контракты в NPM. Настраиваем CI/CD, чтобы все изменения автоматически обновлялись и были доступны для сервисов.
Поднимаем gRPC-сервер в Auth-сервисе. Настраиваем его работу с внутренней логикой и подключаем обработку методов из Proto.
Реализуем gRPC-клиента для взаимодействия с Auth-сервисом. Изучаем базовые операции и обработку ответов сервера.
Поднимаем PostgreSQL в Docker.
Создаём Prisma-схему для Auth-сервиса. Настраиваем модели и связи.
Подключаем Prisma ORM к Nest.js.
Реализуем репозиторий Auth. Настраиваем базовую логику авторизации пользователей.
Подключаем Redis к Auth-сервису. Настраиваем клиент, соединение и интеграцию с логикой OTP.
Реализуем генерацию и проверку OTP.
Изучаем обработку ошибок в gRPC. Реализуем кастомные исключения и правильную передачу ошибок между клиентом и сервером.
Настраиваем кастомную валидацию переменных окружения.
Создаём единый реестр Proto-файлов для всех сервисов. Переводим gRPC-сервер в инфраструктурный модуль.
Проектируем архитектуру токенов.
Реализуем генерацию и проверку токенов.
Создаём динамический модуль Passport.
Подключаем @teacinema/passport к Auth-сервису и настраиваем использование токенов.
Настраиваем cookie-parser в Gateway. Реализуем хранение refresh токена в cookies.
Разбираем логику обновления токенов (refresh).
Реализуем Guards и Decorators для защиты маршрутов. Настраиваем доступ только для авторизованных пользователей.
Настраиваем функционал управления аккаунтом. Реализуем изменение почты и номера телефона.
Добавляем авторизацию через Telegram. Создаём бота и интегрируем с Auth-сервисом.
Изучаем RabbitMQ и возможности обмена сообщениями между микросервисами. Поднимаем RabbitMQ в Docker и знакомимся с веб-интерфейсом.
Создаём Notification сервис. Настраиваем подписку на события и обработку сообщений из очередей.
Настраиваем взаимодействие Auth и Notification через RMQ.
Реализуем отправку Email-уведомлений.
Добавляем поддержку SMS-уведомлений. Настраиваем отправку через MTS Exolve.
Реализуем уведомления для действий пользователя с аккаунтом. Настраиваем отправку сообщений при изменении данных.
Создаём Users сервис с gRPC. Настраиваем базу данных через TypeORM и реализуем хранение информации о пользователях.
Унифицируем gRPC-клиентов через GrpcModule. Обеспечиваем единый интерфейс для взаимодействия между сервисами.
Запускаем всю микросервисную систему в Docker.
Разбираемся, зачем нужна наблюдаемость в микросервисах. Изучаем сбор метрик, трассировку и централизованное логирование.
Настраиваем сбор метрик с сервисов через Prometheus. Подключаем базовые и кастомные метрики для мониторинга состояния сервисов.
Визуализируем метрики в Grafana. Создаём первый дашборд и настраиваем отображение показателей работы микросервисов.
Настраиваем Distributed Tracing через Jaeger и отслеживаем запросы между сервисами.
Реализуем централизованное логирование с помощью Loki и Promtail. Настраиваем сбор, хранение и поиск логов сервисов.
Интегрируем Media Service на Go. Настраиваем хранение и обработку медиа-файлов, включая смену аватаров пользователей. Репозиторий с готовым Media сервисом: https://github.com/TeaCoder52/teacinema-public
Создаём базовую структуру Movie-сервиса.
Подключаем Drizzle ORM к Movie-сервису. Настраиваем модели, связи и миграции для хранения информации о фильмах и категориях.
Реализуем Seeder для наполнения базы данных фильмами и категориями.
Настраиваем бизнес-логику Movie-сервиса.
Добавляем кэширование данных для Movie-сервиса через Redis.
Рассматриваем основные принципы Domain-Driven Design.
Создаём базовую структуру Theater-сервиса.
Разрабатываем Prisma-схему для Theater-сервиса. Настраиваем модели, связи и работу с данными о залах и местах.
Реализуем бизнес-логику для кинотеатров, залов и мест. Настраиваем операции по созданию и управлению ресурсами.
Создаём Screening Service для управления сеансами.
Настраиваем Payment Service и подключаем Prisma для хранения информации о платежах.
Реализуем логику обработки платежей с помощью Юкассы.
Сохраняем способы оплаты пользователей.
Реализуем логику возвратов платежей.
Создаём Booking Service для бронирования билетов.
Реализуем ручные SQL-миграции и скрипт применения изменений.
Настраиваем Postgres.js в Nest.js приложении для работы с базой данных Booking Service.
Реализуем полную логику бронирования билетов. Настраиваем создание, проверку доступности и резервирование мест для пользователей.
Проводим полное тестирование процесса покупки билета. Проверяем интеграцию между сервисами и корректность всех бизнес-процессов.
Подводим итоги 35-часового курса.
Отслеживайте прогресс, проходите уроки в удобном темпе и получайте максимум от курса
Начать просмотр