Архитектура ISP (OSS/BSS)
Network Inventory Service
Устройства, порты, IPAM, топология сети, резервирование и учёт ресурсов.
Network Inventory Service
Bounded Context: Network Resource Management
Владелец данных: Device, Port, LogicalResource (IP, VLAN, MAC), Pool
Технологии: NestJS (Bun 1.3+), Drizzle ORM, PostgreSQL, ConnectRPC, RabbitMQ, BullMQ
Ответственность
Network Inventory — единый источник правды о сетевых ресурсах. Аналог модулей Networking в Splynx и Сетевые ресурсы в Hydra Billing, но с полноценным IPAM и topology management.
- Device Registry: OLT, Switch, Router, BRAS, CPE — модель, vendor, firmware, статус, геолокация. Полный жизненный цикл устройства (procurement → active → maintenance → decommission).
- Port Management: Физические порты, их занятость, резервирование с TTL (автоосвобождение при неиспользовании). Каскадный учёт: OLT port → splitter → ONT.
- IPAM (IP Address Management): Управление IP-пулами (IPv4/IPv6), VLAN, MAC. Автоматическое выделение из пула при активации, освобождение при деактивации. Мониторинг утилизации пулов.
- Topology: Связи между устройствами (uplink chains), расположение, зоны покрытия. Визуализация сетевой топологии.
- Availability Check: Проверка техвозможности подключения по адресу — ключевая операция для Lead-to-Cash pipeline.
- Capacity Planning: Мониторинг заполненности портов OLT, утилизации IP-пулов, алерты при приближении к лимитам.
Ключевые бизнес-сценарии
| Сценарий | Описание | API метод |
|---|---|---|
| Проверка техвозможности | Клиент оставил заявку → есть ли свободный порт/ресурсы по адресу? | CheckAvailability |
| Резервирование порта | OMS создал заказ → порт бронируется на 48ч с автоосвобождением | ReservePort (TTL) |
| Привязка ресурсов | Provisioning завершил активацию → порт + IP + VLAN привязываются к подписке | BindServiceInstance |
| Освобождение | Расторжение/компенсация → все ресурсы возвращаются в пул | ReleasePort, ReleaseIP |
| Алерт: ресурсы заканчиваются | Утилизация пула > 85% → событие resource.exhausted | Background job |
Агрегаты
Device
Loading diagram...
LogicalResource (IP, VLAN)
Loading diagram...
ConnectRPC API
service InventoryService {
rpc ListDevices(ListDevicesRequest) returns (ListDevicesResponse);
rpc GetDevice(GetDeviceRequest) returns (GetDeviceResponse);
rpc GetPortStatus(GetPortStatusRequest) returns (GetPortStatusResponse);
rpc CheckAvailability(CheckAvailabilityRequest) returns (CheckAvailabilityResponse);
rpc ReservePort(ReservePortRequest) returns (ReservePortResponse);
rpc ReleasePort(ReleasePortRequest) returns (ReleasePortResponse);
rpc BindServiceInstance(BindServiceInstanceRequest) returns (BindServiceInstanceResponse);
rpc AllocateIP(AllocateIPRequest) returns (AllocateIPResponse);
rpc ReleaseIP(ReleaseIPRequest) returns (ReleaseIPResponse);
}| Метод | RBAC | Idempotent | Описание |
|---|---|---|---|
CheckAvailability | isp-viewer+ | — | Есть ли свободный порт/ресурс по адресу |
ReservePort | isp-operator+ | ✅ | Зарезервировать порт (TTL, auto-release) |
ReleasePort | isp-operator+ | ✅ | Освободить порт (Saga compensation) |
AllocateIP | isp-operator+ | ✅ | Выделить IP из пула |
ReleaseIP | isp-operator+ | ✅ | Вернуть IP в пул |
Доменные события
Exchange: inventory.events (Topic)
| Routing Key | Событие | Потребители |
|---|---|---|
port.reserved | PortReservedEvent | — (audit) |
port.released | PortReleasedEvent | — (audit) |
resource.exhausted | ResourceExhaustedEvent | Notification (алерт операторам) |
device.status_changed | DeviceStatusChangedEvent | Notification (алерт) |
Port Reservation с TTL
Loading diagram...
Background Jobs (BullMQ)
| Job | Расписание | Описание |
|---|---|---|
inventory.expire_reservations | Каждый час | Освободить порты с истёкшим TTL |
inventory.capacity_check | Каждые 4 часа | Проверка ёмкости (% занятости по устройствам) |
inventory.firmware_audit | Еженедельно | Проверка версий firmware, алерт при расхождении |
Ссылки:
- Protobuf-контракт: inventory/v1/inventory_service.proto
- Слой OSS: OSS Layer