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

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

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

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

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

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

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

Биллинг обеспечивает получение данных от источников данных. Это могут быть внешние источники, которые написаны на С и общаются с операционной системой (ipq/ipfw/netflow/radius/pam/libpcap), или внутренние источники данных, реализованные на Java. На настоящий момент внешний источник реализован для Linux/FreeBSD (RemoteAgent), а из внутренних источников написано три - коллектор Cisco Netflow, обработчик пакетов с локального сетевого интерфейса посредством библиотеки PCAP, и источник опрома коммутаторов по протоколу SNMP для съёма статистики счетчиков интерфейсов. 
Netflow позволяет собирать данные о проходящем трафике с устройства, выдающего поток статистики в определенном формате. Это может быть стоящий рядом маршрутизатор Cisco, или любой Windows/Linux/FreeBSD сервер с соответствующим программным обеспечением (например ipfw2netflow из комплекта NeTAMS 3.4).
Pcap позволяет "смотреть" на проходящие мимо (или через) локального интерфейса Ethernet пакеты даных. Подходит, если сервер, на котором работает NETAMS, является ещё и маршрутизатором локальной сети, или же имеет дополнительну сетевую карту, на которую настроен вывод трафика SPAN-порта

SNMP является старым промышленным протоколом управления телекоммуникационным оборудованием. С его помощью можно получить рзличные параметры работы удалённого устройства, в нашем случае - счетчики байт и пакетов, проходящих через Ethernet-интерфейсы коммутатора доступа.  

Биллинг обеспечивает хранение (загрузку, обновление и сохранение обратно) конфигурационной информации, а также данных о статистике по трафику. Конфигурация хранится в формате XML (используется библиотека XStream), а "тяжелая" статистика - в MySQL (используется JDBC через Mysql Connector/J). Для работы необходимо иметь настроенный сервер MySQL версии 5 или выше. Подержка других СУБД реализуема легко (обращайтесь на support@netams.com).

Биллинг обеспечивает связь с серверной частью веб-интерфейса (RPC, библиотека CAJO)

И наконец, биллинг обеспечивает преобразование входящей статистики обработчиком тарифного плана, в деньги. Остановимся на этом механизме подробнее. Для начала, необходимо уяснить взаимосвязь всех объектов в системе.

Каждый объект имеет уникальный номер (id), по которому происходит взаимосвязь объектов. Также общими являются некоторые служебные метаданные, например время создания или последней модификации объекта.

Контракт (contract) описывает клиента биллинга - физическое или юридическое лицо. К нему привязаны свойства вроде контактных телефонов, почтового адреса и прочее.

Группа контрактов (contract group) дает возможность объединять записи о контрактах в группы (для удобства работы) - например, сделав группы по подразделениям предприятия.

Лицевой счет (account) описывает валюту и баланс счета.

Валюта (currency) описывает код, человеческое имя и принятое сокращение валюты, используемой для некоего счета. В настоящей реализации заблокирована возможность создавать несколько валют. Если вам мешает это ограничение - обращайтесь на support@netams.com.

Учетный элемент (acctunit) является аналогом unit из NeTAMS 3.4 и описывает объект, по которому ведется непосредственный учет (биллинг). В текущем случае - это IP адрес (подсеть) некоего устройства (абонента, клиента), или же физический порт коммутатора. Потенциально один клиент может иметь несколько закрепленных за ним учетных объектов, в том числе не-IP объекты (а, например, домены или почтовые ящики, за которые надо брать периодическую абонентскую плату).

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

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

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

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

Сервис (service), описывает экземпляр услуги. Является финальной связкой, которая объединяет:

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

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

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

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

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

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

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

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

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

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

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

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

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

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