G-SERVICE Docs
Архитектура ISP (OSS/BSS)

Mediation Service

Netflow/IPFIX, RADIUS Accounting, нормализация UDR, агрегация трафика для биллинга.

Mediation Service

Bounded Context: Usage Data Collection & Normalization
Владелец данных: UDR (Usage Detail Record), CDR (raw + normalized)
Технологии: Go, PostgreSQL (TimescaleDB), RabbitMQ (publisher), S3/MinIO

Ответственность

Mediation — промежуточный слой между сетевыми устройствами и биллингом/аналитикой. Собирает, нормализует и агрегирует данные о потреблении. Это high-throughput компонент (миллионы записей/час), поэтому реализован на Go с zero-alloc parsing.

  • Collection: Приём Netflow v5/v9, IPFIX, sFlow потоков от маршрутизаторов (UDP listener). Поддержка sampling для снижения нагрузки.
  • RADIUS Accounting: Обработка Start/Stop/Interim-Update от FreeRADIUS — основной источник данных о сессиях абонентов.
  • Normalization: Преобразование вендор-специфичных форматов в единый UDR (Usage Detail Record). Обогащение данными из Network Inventory (subscription_id, customer_id).
  • Aggregation: Агрегация по абоненту/периоду для тарификации (usage-based billing). Hourly/daily rollups.
  • Archival: Долгосрочное хранение CDR/UDR в S3/MinIO (СОРМ-2 — 3 года, СОРМ-3 — 6 месяцев трафика).
  • Analytics: Предоставление данных для бизнес-аналитики (ARPU, traffic patterns, peak hours, capacity planning).

Объёмы данных и retention

Тип данныхИсточникОбъём (10K абонентов)Hot storage (TimescaleDB)Cold storage (S3)
RADIUS AccountingFreeRADIUS~50K записей/день90 дней3 года (СОРМ-2)
Netflow/IPFIXBRAS/Router~10M flow/час7 дней (агрегаты)6 мес (СОРМ-3)
Aggregated UDRMediation~50K записей/день1 год3 года

Архитектура

Loading diagram...

Формат UDR (нормализованный)

message UsageDetailRecord {
  string id = 1;
  string subscription_id = 2;
  string username = 3;
  string nas_ip = 4;
  string framed_ip = 5;
  int64 bytes_in = 6;
  int64 bytes_out = 7;
  int32 duration_seconds = 8;
  string source_type = 9;     // "netflow" / "radius_acct" / "snmp"
  google.protobuf.Timestamp start_time = 10;
  google.protobuf.Timestamp end_time = 11;
}

Доменные события

Exchange: mediation.events (Topic)

Routing KeyСобытиеПотребители
usage.reportedUsageReportedEventBilling (usage-based тарификация)

Событие usage.reported публикуется после агрегации — содержит суммарный трафик за период (обычно 1 час) для каждого абонента.

Хранение данных

Тип данныхХранилищеRetention
Raw CDR/UDRS3/MinIO (Parquet)3 года (СОРМ)
Normalized UDRTimescaleDB6 месяцев
Aggregated (per-hour)PostgreSQL2 года
Aggregated (per-day)PostgreSQL5 лет

TimescaleDB используется для time-series аналитики: графики потребления трафика по абоненту, peak hours, anomaly detection.

Background Jobs (river)

JobРасписаниеОписание
mediation.aggregate_hourlyКаждый часАгрегация UDR → hourly_usage
mediation.aggregate_dailyЕжедневно, 01:00Агрегация hourly → daily_usage
mediation.archive_s3Ежедневно, 04:00Архивация raw CDR в S3 (Parquet)
mediation.cleanupЕженедельноУдаление normalized UDR старше 6 месяцев
mediation.anomaly_checkКаждые 30 минДетектирование аномального трафика

Зависимости

  • Входящие: Netflow/IPFIX от BRAS, SNMP от OLT, radacct от FreeRADIUS (прямое чтение БД).
  • Исходящие: mediation.events → Billing.
  • Хранение: S3/MinIO (архив), TimescaleDB (аналитика).

Ссылки:

On this page