Микросервисная система для обработки событий социальной сети (лайки, посты, комментарии) с аналитикой и уведомлениями.
Клиент (Web/Mobile)
│
├── REST API (API Gateway) ─┐
│ │
└── WebSocket (API Gateway) │
│
Kafka (Центральный брокер) │
├── topic: user-actions │
└── topic: notifications │
│
┌────────────────────────────────────────────────────────────┤
│ │──┐
│ Микросервис 1: API Gateway (Nest.js) │ │
│ - REST: Приём событий (POST /api/events) │ │
│ - WebSocket: Рассылка уведомлений клиентам │ │
│ - JWT Auth / Rate Limiting │ │
│ - Kafka Producer (user-actions) │ │
│ │ │
├──────────────────────────────────────────────────────--────│ │
│ │ │
│ Микросервис 2: Event Processor (Nest.js) │ │
│ - Kafka Consumer (user-actions) │ ◀┘
│ - Аналитика: агрегация данных в PostgreSQL │
│ - Real-time счётчики в Redis (например, топ постов) │
│ - Отправка алертов в Kafka (notifications) │───┐
│ │ │
└──────────────────────────────────────────────────────--────┘ │
│ │
Grafana Dashboard ◀── [PostgreSQL (история) + Redis (realtime)] │
│ │
│ │
Alert Engine (в составе Event Processor)
- Анализ данных → Kafka (notifications)1. API Gateway Service
-
REST API:
- Валидация входящих событий (например, схема лайка:
{ userId, postId, type: 'like' }). - Аутентификация через JWT.
- Rate Limiting (например, не более 100 запросов/мин с одного IP).
- Отправка событий в Kafka топик
user-actions.
- Валидация входящих событий (например, схема лайка:
-
WebSocket:
- Поддержка подключений клиентов через WS.
- Подписка на топик Kafka
notifications. - Рассылка уведомлений в реальном времени (например, "Ваш пост получил 100 лайков").
2. Event Processor Service
-
Kafka Consumer:
- Чтение событий из
user-actions. - Обработка и обогащение данных (например, добавление timestamp).
- Чтение событий из
-
Работа с данными:
- Сохранение сырых событий в PostgreSQL.
- Агрегация данных (например, подсчёт лайков за день через SQL оконные функции).
- Обновление Redis-счётчиков (например,
INCR post:123:likes,ZADD top_posts 150 post:123).
-
Alert Engine:
- Мониторинг аномалий (например, резкий рост лайков → проверка на накрутку).
- Генерация уведомлений → отправка в Kafka
notifications.
-
PostgreSQL Data Source:
- Дашборд "Историческая аналитика":
- График активности по часам:
SELECT COUNT(*), date_trunc('hour', timestamp) FROM events GROUP BY .... - Топ-10 постов за месяц.
- График активности по часам:
- Дашборд "Историческая аналитика":
-
Redis Data Source:
- Дашборд "Real-time метрики":
- Текущее количество лайков:
GET post:123:likes. - Топ постов:
ZREVRANGE top_posts 0 9 WITHSCORES.
- Текущее количество лайков:
- Дашборд "Real-time метрики":
-
Kafka Monitoring:
- Lag потребителей, throughput топиков (через Prometheus + JMX Exporter).
- Infrastructure (docker-compose.yml):
services:
zookeeper:
image: confluentinc/cp-zookeeper
kafka:
image: confluentinc/cp-kafka
redis:
image: redis
postgres:
image: postgres
grafana:
image: grafana/grafana- Микросервисы:
# API Gateway
cd api-gateway && npm run start:dev
# Event Processor
cd event-processor && npm run start:dev- Разделение ответственности между микросервисами.
- Паттерны взаимодействия: API Gateway → Kafka → Event Processor.
- Синхронизация данных между PostgreSQL и Redis.
- Реализация WebSocket + Kafka для real-time.
- Оптимизация запросов: кеширование в Redis, batch-обработка в PostgreSQL.
-
Добавить третий микросервис:
- Notification Service: Отправка email/push-уведомлений на основе алертов.
-
Тестирование:
- Нагрузочные тесты API Gateway (Artillery).
- Интеграционные тесты Kafka (Testcontainers).
-
Безопасность:
- Шифрование данных в Kafka (SSL/SASL).
- Роли в Redis (ACL).