3.4 KiB
3.4 KiB
Архитектура сервера симуляции (Village Sim)
1. Технический стек
Phase 1 (MVP)
- Core: Python 3.11+
- API: FastAPI
- Hot State / Broker: Redis (используется и как БД, и как очередь сообщений)
- Analytics: JSON Logs (файловая система)
Phase 2 (Target Production)
- Analytics: ClickHouse. Для хранения логов каждого хода (Time-Series) и ML-обучения.
- Broker: RabbitMQ / Kafka. Для связи с внешними микросервисами (Внешняя торговля, Auth).
- Metrics: Prometheus + Grafana.
2. Принципы проектирования (Clean Architecture)
Чтобы легко перейти от Phase 1 к Phase 2, жестко соблюдаем слои:
- Domain Layer (Core): Чистый Python.
- Бизнес-правила (Entity, Value Objects).
- Никаких зависимостей от внешних библиотек.
- Application Layer (Services): Оркестрация.
- Use Cases ("Сделать ход", "Создать игру").
- Работает с интерфейсами (
IEventBus,IRepository), а не конкретными БД.
- Infrastructure Layer (Adapters): Грязная реализация.
- Здесь лежат драйверы Redis, ClickHouse, RabbitMQ.
- Именно этот слой мы будем менять при масштабировании.
3. Компоненты системы
4.1. API Gateway (FastAPI)
- Входная точка для клиентов.
- Конвертирует HTTP запросы в
Commands.
4.2. Game Engine (Domain)
- TimeSystem: Абстракция времени.
- EntityManager: ECS-структура.
- MarketCore: Логика сведения ордеров.
4.3. Infrastructure Adapters
- RedisGameRepository: Реализация
IGameRepository. - RedisEventBus: Реализация
IEventBus(в Phase 2 заменим наKafkaEventBus). - FileAnalyticsRepository: Реализация
IAnalyticsRepository(в Phase 2 заменим наClickhouseRepository).
5. Поток данных (Data Flow)
- Action: Клиент шлет
POST /action. - Bus: API кладет команду в
IEventBus(Redis). - Worker:
- Поднимает состояние из
IGameRepository. - Применяет логику Домена.
- Генерирует события (
FoodEaten,ItemCrafted).
- Поднимает состояние из
- Analytics: События асинхронно пишутся в
IAnalyticsRepository(ClickHouse/Files).
6. Структура проекта
/app
/domain # ЧИСТАЯ ЛОГИКА
/entities # Agent, Resource
/interfaces # Абстракции: IGameRepository, IEventBus, IAnalytics
/events # Domain Events
/application # СЦЕНАРИИ
/commands # DTO
/use_cases # GameLoopService
/infrastructure # РЕАЛИЗАЦИЯ
/redis # RedisRepo, RedisBus
/clickhouse # (Заготовка) ClickhouseAnalytics
/fs # FileAnalytics
/web # API
/api # Routes
main.py # Dependency Injection Container