Все устройства разделены на группы авторизации, каждая со своим корневым устройством. Каждая из групп авторизации управляется отдельным изолированным Access-сервером, либо несколькими Access-серверами, которые работают в режиме кластера. Контроль IP-ресурсов, количества одновременных сессий сервисов производится только в пределах группы. Т.е. группы авторизации позволяют разделить предоставление услуг на не взаимосвязанные сегменты, что повышает масштабируемость.
В пределах группы авторизации может быть одна или несколько групп обработки. Каждая из групп обрабатывается своим Accounting-сервером, либо несколькими Accounting-серверами, работающими в режиме кластера. Корневой узел группы обработки должен быть выделен отдельным типом. Для простоты, корневые узлы группы авторизации и обработки могут быть объединены в один - таким во многих примерах в документации является корневое устройство "Access+Accounting".
Для корректной работы InetAccounting необходимо сконфигурировать в корневом устройстве обработчики тарификации и сброса данных в БД, представленные ниже.
В конфигурации корневого узла группы обработки (BGInetAccounting) обязательно нужно указать параметры тарификации и обработки соединений. Для этого нужно задать "worker", указав количество потоков для него, обработчики, которые будут работать в этом worker'е и их параметры. Каждый worker назначается с идентификатором, например, accounting.worker.1. и accounting.worker.2. Каждый обработчик также задаётся с идентификатором. Таким образом, может быть несколько worker'ов и несколько обработчиков в них.
От данных параметров зависит, как часто InetAccounting будет тарифицировать сессии и как быстро будет реагировать на изменения баланса, параметров тарифа и т.п, отправляя задания на изменения скорости/параметров сессий.
Параметры обработчика тарификации (tariffication):
- minDeltaAmount - минимальная сумма нетарифицированного трафика, при которой тарифицировать соединение. Включает в себя все трафики в байтах плюс время в секундах, которое ещё не было протарифицировано;
- delay - пауза между заданиями тарификации;
- batchSize - максимальное количество протарифицированных соединений за одно задание;
- checkAccountingPeriodError - флаг необходимости проверки ошибки учетного периода перед обработкой изменения опций из тарифа. Необходимость может быть вызвана прежде всего тем, что тарификатор не учитывает отсутствие учетного периода на отключенном договоре и при изменении набора опций, посылает команду на включение абонента. Возможные значения: 0 - отключено, 1 - включено. По умолчанию 0.
Параметры обработчика соединений без трафика (tracking - используется для отслеживания изменения опций модуля для соединений, у которых нет трафика):
- delay (delay.millis) - пауза между заданиями в секундах (в миллисекундах);
- batchSize - максимальное количество протарифицированных соединений за одно задание.
Параметры обработчика сервисов без соединений (serv.tracking - используется для отслеживания изменения опций модуля для сервисов, у которых нет сессии и, соответственно, нет трафика):
- delay (delay.millis) - пауза между заданиями в секундах (в миллисекундах);
- batchSize - максимальное количество протарифицированных соединений за одно задание;
- servTypeIds - типы сервисов, которые нужно обрабатывать (если не указано - то все типы);
- accountingPeriodActivate - нужно ли активировать учётные периоды при проверке. Возможные значения: 1 - активировать, 0 - не активировать. По умолчанию 0;
Параметры обработчика событий (event.tracking - предназначен для более быстрой реакции на события, например, изменение статуса договора, активация тарифной опции):
- delay (delay.millis) - пауза между заданиями в секундах (в миллисекундах);
- batchSize - максимальное количество обработанных сервисов за одно задание;
- servDeviceState - нужно ли реагировать на событие об изменении текущего состояния сервиса на устройстве после его фиксации в базе данных ( InetServDeviceStateAndOptionsModifiedEvent ). Возможные значения: 0 - отключено, 1 - включено. По умолчанию 1;
- payment - нужно ли реагировать на события изменения баланса. Возможные значения: 0 - отключено, 1 - включено. По умолчанию 1;
- capacity - размер очереди обрабатываемых событий. По умолчанию 10000;
- processDelay - задержка в миллисекундах перед обработкой каждого из событий. Необходимо для того, чтобы все приложения обновили свои кэши после внесенных изменений, которые порождают события. По умолчанию значение 1500 мс. В случае обработки события InetServDeviceStateAndOptionsModifiedEvent значение задержки увеличивает на 3100 мс.
Параметры сброса в базу (flushing):
- minDeltaAccount - минимальная сумма несброшенной наработки соединения, при которой нужно сбрасывать в базу;
- delay (delay.millis) - пауза между заданиями в секундах (в миллисекундах);
- batchSize - максимальное количество сброшенных соединений за одно задание;
- disableServs - Если не null (null возможен, если данный параметр не задан вообще в конфигурации обработчика), то обрабатываются только обычные или только сервисы для неаутентифицированных;
- lockTimeout - величина таймаута блокировки в миллисекундах. Значение по умолчанию - 15000 мс.
Параметры обработчика завершения сессий (finishing - завершает соединения, а также закрывает соединения по таймауту):
- delay (delay.millis) - пауза между заданиями в секундах (в миллисекундах);
- batchSize - максимальное количество протарифицированных соединений за одно задание;
- finishBatchSize - ограничение числа завершенных соединений. По умолчанию 0;
- lockTimeout - величина таймаута блокировки в миллисекундах. Значение по умолчанию - 15000 мс.
Пример конфигурации:
# Количество потоков на worker accounting.worker.1.thread.count=2 # Тарификатор: # минимальная сумма трафика, при которой тарифицировать соединение accounting.worker.1.tariffication.1.minDeltaAmount=0 # пауза между заданиями тарификации accounting.worker.1.tariffication.1.delay=10 # максимальное количество тарифицируемых соединений за задание accounting.worker.1.tariffication.1.batchSize=1000 # Трекер (обработка сессий без наработки): # пауза между заданиями трекинга accounting.worker.1.tracking.1.delay=10 # максимальное количество проверенных соединений за задание accounting.worker.1.tracking.1.batchSize=1000 # Трекер (обработка сервисов модуля без активных сессий, по умолчанию не требуется): # пауза между заданиями трекинга accounting.worker.1.serv.tracking.1.delay=20 # максимальное количество проверенных соединений за задание accounting.worker.1.serv.tracking.1.batchSize=100 # Трекер (обработка событий): # пауза между заданиями трекинга (в миллисекундах) accounting.worker.1.event.tracking.1.delay.millis=200 # максимальное количество проверенных сервисов за задание accounting.worker.1.event.tracking.1.batchSize=500 # Количество потоков на worker accounting.worker.2.thread.count=1 # Сброс в базу трафиков и наработки: # минимальная наработка, при которой сбрасывать соединение в базу accounting.worker.2.flushing.1.minDeltaAccount=0 # минимальная сумма трафика, при которой сбрасывать соединение в базу accounting.worker.2.flushing.1.minDeltaAmount=0 # пауза между заданиями сброса в базу accounting.worker.2.flushing.1.delay=20 # максимальное количество сброшенных соединений в базу за задание accounting.worker.2.flushing.1.batchSize=500 # Количество потоков на worker accounting.worker.3.thread.count=1 # Завершитель соединений: # пауза между заданиями accounting.worker.3.finishing.1.delay=20 # максимальное количество сброшенных соединений в базу за задание accounting.worker.3.finishing.1.batchSize=500
Пример конфигурации с несколькими обработчиками тарификации (для более частой тарификации соединений с большим трафиком):
# Количество потоков на worker accounting.worker.1.thread.count=3 # Тарификатор: # минимальная сумма трафика, при которой тарифицировать соединение accounting.worker.1.tariffication.1.minDeltaAmount=104857600 # пауза между заданиями тарификации accounting.worker.1.tariffication.1.delay=10 # максимальное количество тарифицируемых соединений за задание accounting.worker.1.tariffication.1.batchSize=1000 accounting.worker.1.tariffication.2.minDeltaAmount=10485760 accounting.worker.1.tariffication.2.delay=10 accounting.worker.1.tariffication.2.batchSize=1000 accounting.worker.1.tariffication.3.minDeltaAmount=0 accounting.worker.1.tariffication.3.delay=15 accounting.worker.1.tariffication.3.batchSize=1000 # Трекер (обработка сессий без наработки): # пауза между заданиями трекинга accounting.worker.1.tracking.1.delay=20 # максимальное количество проверенных соединений за задание accounting.worker.1.tracking.1.batchSize=1000 # Трекер (обработка событий): # пауза между заданиями трекинга (в миллисекундах) accounting.worker.1.event.tracking.1.delay.millis=200 # максимальное количество проверенных сервисов за задание accounting.worker.1.event.tracking.1.batchSize=500 # Количество потоков на worker accounting.worker.2.thread.count=1 # Сброс в базу трафиков и наработки: # минимальная наработка, при которой сбрасывать соединения в базу accounting.worker.2.flushing.1.minDeltaAccount=0 # минимальная сумма трафика, при которой сбрасывать соединение в базу accounting.worker.2.flushing.1.minDeltaAmount=0 # пауза между заданиями сброса в базу accounting.worker.2.flushing.1.delay=30 # максимальное количество сброшенных соединений в базу за задание accounting.worker.2.flushing.1.batchSize=500 # Количество потоков на worker accounting.worker.3.thread.count=1 # Завершитель соединений: # пауза между заданиями accounting.worker.3.finishing.1.delay=20 # максимальное количество сброшенных соединений в базу за задание accounting.worker.3.finishing.1.batchSize=500
Для обработки сервисов без сессий нужно добавить ещё один обработчик (а также можно увеличить количество потоков для accounting.worker.1 или вынести обработчик в отдельный worker):
# Трекер (обработка сервисов без сессий): # пауза между заданиями трекинга accounting.worker.1.serv.tracking.1.delay=60 # максимальное количество проверенных сервисов за задание accounting.worker.1.serv.tracking.1.batchSize=500 # типы сервисов, которые нужно обрабатывать, через запятую # (если пусто - будут обрабатываться сервисы всех типов!) accounting.worker.1.serv.tracking.1.servTypeIds= # нужно ли активировать учетный период при обработке # (по умолчанию учетный период активируется при авторизации по RADIUS/DHCP или появлении новой сессии) accounting.worker.1.serv.tracking.1.accountingPeriodActivate=1