@startuml geo_architecture skinparam componentStyle rectangle skinparam backgroundColor white title Архитектура сервиса Geo (Geobalancing Server) package "Geo Service" { package "geo-backend" as backend { component [handlers.py\nHTTP обработчики] as handlers component [balancing.py\nЛогика балансировки] as balancing component [stream_request.py\nОбработка стримов] as stream component [auth.py\nАвторизация] as auth component [billing.py\nБиллинг] as billing } package "geo-api" as api { component [REST API\nУправление серверами] as rest_api component [Управление группами] as groups_api component [Управление локациями] as locations_api } package "geo-resolver" as resolver { component [IP Resolver\nГеолокация по IP] as ip_resolver component [Geo Providers\n(IP-API, MaxMind)] as geo_providers component [Resolver Cache] as resolver_cache } package "geo-web" as web { component [Web Interface\nАдмин панель] as web_ui } package "Общие компоненты" { component [ip_location.py\nIPLocation] as ip_location component [api_client.py\nGeoApiClient] as api_client component [errors.py] as errors } } package "Хранилище данных" { database "MongoDB" as mongo frame "Кэши" { component [place_cache] as place_cache component [group_cache] as group_cache component [dns_cache] as dns_cache } } ' Связи handlers --> balancing handlers --> stream handlers --> auth handlers --> billing balancing --> ip_resolver balancing --> group_cache balancing --> place_cache stream --> auth ip_resolver --> geo_providers ip_resolver --> resolver_cache web_ui --> api_client api_client ..> rest_api : HTTP rest_api --> mongo backend --> mongo backend --> place_cache backend --> group_cache handlers ..> ip_location balancing ..> ip_location note right of backend **Основные задачи:** • Обработка запросов на балансировку • Выбор оптимального сервера • Редиректы на ноды • Авторизация и биллинг end note note right of resolver **Выделен отдельно из-за** **большого потребления памяти** Позволяет запускать geo-backend в несколько процессов end note note right of mongo **Хранит:** • Серверы (nodes) • Группы серверов • Географические локации • Привязки локаций к группам • Резервации • Настройки хранилищ end note @enduml