Отвечает за:
Маршрутизацию и проксирование клиентских запросов к внутренним сервисам.
Предоставляет API:
- REST API для внешних клиентов (мобильные, веб-клиенты), проксирует запросы на Auth, Users, Friends, Chat сервисы.
Отвечает за:
Регистрацию и авторизацию пользователей (email+пароль и OAuth).
Хранит:
- Password hash
- OAuth ID
- User ID (ссылка на Users service)
База данных:
- PostgreSQL (для обеспечения ACID)
- Redis (кэширование токенов, сессий пользователей и результатов частых запросов для снижения нагрузки на основную БД)
Взаимодействует:
- Асинхронно публикует события для Users service через Kafka.
Предоставляет API:
- gRPC:
RegisterLoginLogout
События:
- Публикует:
UserRegistered (UserID)
Отвечает за:
Хранение и управление профилем пользователя, поиск пользователя по никнейму.
Хранит:
- UserID
- Nickname (уникальный)
- Description (bio)
- Avatar URL
База данных:
- PostgreSQL (для обеспечения ACID)
- Redis (кэширование профилей активных пользователей и результатов поиска для ускорения доступа к часто запрашиваемым данным)
Взаимодействует:
- Подписывается на события от Auth service через Kafka.
- Предоставляет данные по gRPC для других сервисов (Friends, Chat).
Предоставляет API:
- gRPC:
GetUserProfile(UserID)GetUserProfileByNickname(Nickname)UpdateUserProfile(UserID, ProfileData)
События:
- Подписывается:
UserRegistered
Отвечает за:
Управление списком друзей, отправку и подтверждение заявок в друзья.
Хранит:
- UserID
- FriendID
- Status (
Requested,Accepted,Rejected) - CreatedAt, UpdatedAt
База данных:
- PostgreSQL (хранение реляционных данных и статусов дружбы)
- Redis (кэширование списков друзей, активных запросов на дружбу и статусов онлайн для быстрого доступа)
Взаимодействует:
- Запрашивает данные пользователя по gRPC из Users service.
- Асинхронно публикует события через Kafka.
Предоставляет API:
- gRPC:
GetFriendsList(UserID)SendFriendRequest(UserID, FriendNickname)AcceptFriendRequest(UserID, FriendNickname)RejectFriendRequest(UserID, FriendNickname)RemoveFriend(UserID, FriendNickname)
Отвечает за:
Создание чатов и обмен сообщениями между пользователями.
Хранит (MongoDB):
- ChatID
- Participants:
[UserID1, UserID2] - Messages:
- MessageID
- AuthorID
- Content
- Timestamp
База данных:
- MongoDB (удобна для неструктурированных данных, истории сообщений и быстрого чтения больших коллекций)
- Redis (кэширование активных чатов, последних сообщений и статусов доставки для ускорения доступа и уменьшения задержек)
Взаимодействует:
- Запрашивает данные пользователей по gRPC из Users service.
- Проверяет статус дружбы по gRPC из Friends service.
- Асинхронно публикует события через Kafka.
Предоставляет API:
- gRPC:
CreateChat(Participants)GetUserChats(UserID)SendMessage(ChatID, AuthorID, Content)GetChatHistory(ChatID)
-
Клонирование репозитория:
git clone https://github.com/your-username/messenger-app.git cd messenger-app -
Запуск всех сервисов через Makefile:
make build make up
Напрямую через Docker Compose:
docker-compose build docker-compose up -d
-
Проверка работоспособности: Все сервисы будут доступны по следующим адресам:
- Auth Service: http://localhost:8001
- Chat Service: http://localhost:8002
- Friends Service: http://localhost:8003
- Users Service: http://localhost:8004
-
Остановка сервисов:
make down
Приложение поддерживает разные стратегии деплоя в Kubernetes: Blue-Green и Canary.
Для быстрого развёртывания всего приложения в Kubernetes одной командой:
# Полный автоматический деплой (все шаги)
make k8s-deploy-allЭта команда выполняет все необходимые шаги:
- Проверяет и запускает Minikube (если не запущен)
- Включает Ingress addon
- Собирает и загружает Docker-образы
- Выполняет Blue-Green деплой
- Добавляет запись в /etc/hosts
- Выводит URL'ы для доступа к сервисам
Стратегия Blue-Green позволяет безопасно обновлять версии приложения, обеспечивая нулевое время простоя.
# Деплой в Kubernetes
make k8s-blue-green
# Переключение на green версию
make k8s-apply-green
# Переключение на blue версию
make k8s-apply-blueСтратегия Canary позволяет постепенно увеличивать трафик на новую версию, минимизируя риски.
# Деплой в Kubernetes с канареечным релизом
make k8s-canary
# Постепенный переход к новой версии
make k8s-canary-migrate
# Мгновенное переключение на новую версию
make k8s-canary-apply
# Откат к старой версии
make k8s-canary-rollbackДля дополнительной информации о Kubernetes-деплое см. Kubernetes Deployment Instructions.
