Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

В этом разделе рассказано, как устроен и работает NETAMS 4.
Сразу скажем, что к версии 3.4 новая версия никакого отношения не имеет. Ни единой строчки общего кода (кроме алгоритмов кеширования информации по потокам во внешнем агенте pcap, написанном на С). Хотя бы потому, что NETAMS 4 полностью написан на Java

Вопрос: Ну зачем так? Жава, плохой и медленный язык. Какое убожество! Писали бы на ПХП или Руби.
Ответ: На ПХП пускай пишут студенты. Java - очень гибкий язык, по сравнению с С/С++ содержит гораздо больше встроенных средств (работа с сетью, коллекциями и прочее), что в противном случае пришлось бы реализовывать самим (забудем про STL). Нет проблем с утечкой памяти и нулевыми указателями. О скорости - современные java runtime оптимизированы очень хорошо, а в процессорах мощи более чем достаточно. Проблемы с производительностью были 5-7 лет назад, сейчас их нет. Да, придется скачать и поставить JRE от Oracle - но это необходимые издержки, в сравнении с необходмостью самостоятельно собирать бинарный комплект из исходников.

Структурно NETAMS 4 состоит из следующих компонентов:

  • процесс биллинга (включает в себя сбор сырых данных, обработку тарифными планами, и их сброс в хранилище)
  • интерфейсная часть (сервер), выполняющаяся сервером приложений jetty. она же отвечает за взаимодействие с платежными системами.
  • интерфейсная часть администратора (клиент), выполняющаяся в веб-браузере
  • интерфейсная часть пользователя (клиент), выполняющаяся в веб-браузере
  • процесс генерации отчетов (реализованы встроенный в биллинг, и как внешний модуль)
  • процесс RADIUS-сервера
  • процесс сбора данных на удаленном хосте (посредством библиотеки libpcap) с возможностью блокировки (FreeBSD (pf, ipfw), Linux (ipset))

Вопрос: Под какой операционной системой это работает?
Ответ: Поскольку все написано на Java, код одинаково хорошо работает и под Windows, и под Linux, и под FreeBSD, скорее всего без проблем заработает под *BSD, Solaris и MacOS (не тестировано). Достаточно лишь наличия в системе Java Runtime (JRE) и некоторого минимального набора native java библиотек (sigar, опционально jnetpcap).

Опишем работу каждого из компонентов в деталях.

Процесс биллинга

Запускается как стационарное java приложение, и является "ядром" системы NETAMS4. Если он не работает - фактически не работает ничего.

...

Тариф (tariff), описывает тарифный план, которым производится учет. Содержит в себе такие параметры, как сроки действия, тип плана (периодический или однократно применяемый), ссылку на предыдущий тарифный план, а главное - на тип обработчика (classname) тарифного плана. В зависимости от типа обработчика, имеет ряд дополнительных параметров (размер абонентской платы, количество включенного трафика, ограничение по скорости и прочее).

Важно: обработчик тарифного плана сделан по шаблону (в терминах Java - реализует некий стандартный интерфейс), и позволяет один раз закодировать, и потом многократно использовать одну и ту же логику работы для нескольких схожих тарифных планов. Например, можно иметь линейку тарифных планов, которые имеют общий обработчик, но отличаются величиной абонентской платы и стоимостью превышения объема включенного в неё трафика.

В настоящий момент реализованы три обработчика "FlatRate2", который обсчитывает трафик линейно (тариф за килобайт отдельно на вход и выход), "PolicyBasedEngine", который позволяет создавать гибкие политики учета на базе настраиваемых критериев (при аналогичном линейном обсчете), и "PeriodicFeeIncludedVolume", который позволяет назначать фиксированную абонентскую плату за период, объем включенного в неё трафика, стоимость перерасхода. 

Важно-важно: обработчик тарифного плана можно:

...

Изначальная, поставляемая с программой конфигурация имеет по одному объекту каждого типа. Её достаточно, чтобы проверить учет трафика, и денег, по одному IP-адресу.

Интерфейсная часть (сервер)

Запускается как стационарное java приложение, при этом стартует встроенный web/application сервер Jetty. Отвечает на запросы web-клиента (ниже), перенаправляя их в сторону сервиса биллинга. Реализация такова, что вебсервер и сервис биллинга могут исполняться на разных физических серверах, или же возможен запуск всех компонентов на одном сервере. "Слушает" Jetty на порту 8080 (настраивается в netams.properties). Серверная часть интерфейса фактически занимается проброской данных между "толстым клиентом" веб-интерфейса, и процессом биллинга.

Важно: биллинг прекрасно работает, даже если серверная интерфейсная часть не запущена. Перезагрузка (останов-запуск) серверной части интерфейса, и процесса биллинга, друг на друга не влияют.

Интерфейсная часть администратора (клиент)

Запускается из веб-браузера при обращении к серверу http://localhost:8080/webadmin/webadmin.html
Написана с использованием библиотеки Google Web Toolkit, то есть является тяжеловесным AJAX/JavaScript приложением.
Интерфейс интуитивно понятен, обеспечивает в настоящий момент следующие функции:

  • настройку параметров источников данных (откуда принимать netflow-поток, на каком интерфейсе слушает pcap)
  • бэкап/восстановление/просмотр конфигурации биллинга
  • редактирование элементов конфигурации биллинга
  • работу с абонентом
  • "мастера" для удобного пополнения лицевого счета, создания нового абонента и т.д.
  • просмотр простейшей статистики (Quick Reporting)
  • создание, редактирование и запуск отчетов через Сервер Отчетов
  • работу с системами приема платежей
  • вызов подсказки

Интерфейсная часть пользователя

Предоставляет пользователям (абонентам, клиентам) системы биллинга доступ в свой "рабочий кабинет". Доступна при ображении по ссылке http://localhost:8080/ Написана как простой сервлет (исполняется там же, где и серверная часть интерфейса  администратора). Использует HTML-шаблоны, то есть допускает настройку внешнего вида кабинета (контактная информация, логотипы, расположение блоков). Обеспечивает работу с объектами (лицевыми счетами, услугами, статистикой) данного абонента, дает возможность выписать квитанцию для оплаты и т.д. Предусмотрена возможность выбора одного из нескольких типов веб-интерфейсов (тестируется).

Процесс генерации отчетов

Стационарное java-приложение, которое общается с веб-интерфейсом администратора, и процессом биллинга, и служит для генерации "тяжеловесных" отчетов, в основном посредством SQL-запросов к базе данных. Вынесен в отдельный процесс для возможного выноса на другой физический сервер, чтобы не нагружать сервер биллинга.

Процесс RADIUS-сервера

Стационарное java-приложение, реализующее функционал сервера протокола RADIUS. Вынесен в отдельный процесс для возможного выноса на другой физический сервер, чтобы не нагружать сервер биллинга. При использовании соответствующего источника данных позволяет предоставлять и контролировать услугу VPN-доступа посредством управления серверами доступа (NAS).

Вопрос: Так, всё ясно, давайте скорее запускать!
Ответ: Подождите!

Поняв, как устроен NETAMS 4.0, вам необходимо спроектировать будущую систему. Внимание, это очень важно! Пожалуйста, не пытайтесь тут же приступить к установке и настройке, предварительно не потратив пять минут на чтение и обдумывание следующего раздела. Скорее всего, полученный результат окажется не таким, как вы ожидали. Проектирование является ключевым этапом к построению сложной и успешной информационной системы. Итак, продолжим.