Транспорт

Материал из DPA
Перейти к навигации Перейти к поиску

Архитектура Транспорта DPA

Транспорт DPA отвечает за пересылку данных по событиям драйверов от DPA сервера в DPA хост.

Так как частота опроса оборудования может составлять 100-500 миллисекунд, количество снапшотов на один драйвер может составлять 10-20 штук, и на один DPA сервер может приходиться до 100 драйверов, то суммарная частота и объем пересылаемых данных между DPA сервером и DPA хостом может быть существенной. Поэтому Транспорт DPA использует механизмы оптимизации трафика.

TransportArch.png

Минимальной единицей обмена является Событие, которое содержит данные одного Снапшота или одного Состояния драйвера.

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

Перед отправкой, Событие попадает во внутреннюю FIFO очередь Транспорта. Из очереди событие будет отправлено получателю - DPA хосту.

По различным источникам данных частота обновления может быть совершенно разной. Например, Событие, отвечающее за данные Нагрузки на шпиндель, будет получать новые значения текущей нагрузки при каждом чтении с оборудования. То есть частота изменения этих данных может быть очень высокой.

С другой стороны, События, отвечающие, например, за данные по Режиму работы или Корректору скорости подачи, будут получать обновленные данные не так часто.

В целях оптимизации, Событие помещается во внутреннюю FIFO очередь Транспорта только тогда, когда по нему приходит значение, отличное от предыдущего. Это позволяет существенно сократить объем пересылаемых данных, и избежать отправку повторных значений.

Отдельная пересылка индивидуального События так же была бы крайне не эффективной. Объем "полезных" данных по Событию был бы меньше или сравним с накладными расходами самого протокола. Поэтому для отправки События объединяются в Пакеты ("Package"). На количество Событий, которые попадут в один Пакет отправки влияет настройка Период отдыха.

SystemMenu.png => MonitoringMenu.png => DPAhost \ DPAserver \ Транспорт \ WCF

По умолчанию, Период отдыха составляет 1 секунду, то есть между отправками Пакетов должно пройти не менее 1 секунды. Именно в течение этого времени внутренняя FIFO очередь Транспорта будет наполняться Событиями, прежде чем будет сформирован и отправлен очередной Пакет.

TransportRelaxOption.png

Отследить работу Транспорта можно по счетчикам производительности:

SystemMenu.png => MonitoringMenu.png => DPAhost \ DPAserver \ Транспорт \ WCF => Счетчики производительности

Выбрать счетчики Package Size, Sent packages total per second.

TransportMainCounters.png

В данном примере Пакет в среднем содержит от 50 до 150 Событий. Отправка одного Пакета происходит каждую секунду.

Инициатором отправки данных по Транспорту DPA всегда выступает DPA сервер. DPA хост выступает в роли пассивного получателя Пакетов.

Протоколы

WCF

WCF протокол Транспорта DPA - это бинарный протокол, использующий стек TCP/IP. В настройках WCF протокола два ключевых параметра - IP-адрес и порт подключения. DPA сервер использует эти параметры, чтобы установить соединение к получателю Событий, которым, как правило, выступает DPA хост.

В качестве IP-адреса получателя можно указать localhost (если DPA хост и DPA сервер установлены на одну машину), а так же сетевое имя. По умолчанию используется TCP-порт 45618.

WCF протокол используется в DPA по умолчанию, как основной протокол. WCF обеспечивает максимально быструю передачу от DPA сервера к DPA хосту. Хотя WCF протокол не имеет встроенных средств гарантии доставки, частично этот вопрос решается архитектурой Транспорта, что описано далее в этой статье.

MSMQ

Протокол MSMQ использует Microsoft Message Queue для доставки Событий получателю.

Внимание! Перед тем как настраивать Транспорт DPA на использование протокола MSMQ, убедитесь, что компоненты Microsoft Message Queue установлены в операционной системе.

MsmqFeaturesOn.png

Установить компоненты Microsoft Message Queue можно выполнив следующую команду с привилегиями администратора:

Dism /online /Enable-Feature /FeatureName:MSMQ-Container /FeatureName:MSMQ-Server

Протокол MSMQ использует приватные очереди на локальной или удаленной машине. Очередь на удаленной машине применяется при развертывании DPA сервера и DPA хоста на разных машинах. В таком случае используется очередь на машина DPA хоста.

Для настройки протокола MSMQ необходимо указать два ключевых параметра - имя машины и имя очереди. В качестве имени машины возможно использовать сетевое имя, доменное имя, IP-адрес или символ "." для локальной очереди.

Внимание! Перед тем как настраивать Транспорт DPA на использование протокола MSMQ, создайте приватную очередь и настройте права доступа. Учетная запись, из под которой работает служба DPA сервера, должна иметь права на запись в очередь. Учетная запись, из под которой работает служба DPA хоста, должна иметь права на извлечение из очереди.

Следующий скрипт PowerShell создает приватную очередь и назначает права доступа для доменного пользователя:

PS C:\> New-MsmqQueue -Name "QueueName" -QueueType Private
PS C:\> Get-MsmqQueue -Name "QueueName" -QueueType Private | Set-MsmqQueueAcl -UserName "DOMAIN\User" -Allow Peek,Receive,Send

Обратите внимание, для использования Транспорта MSMQ между DPA сервер и DPA хост необходимо использовать очередь с предопределенным именем:

Xtensive.Project109.Host.DPA.Queue

MSMQ имеет встроенные механизмы гарантии доставки посылок получателю.

Варианты настройки

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


Можно ли для конкретного события выбрать Транспорт, который будет использован для его передачи?
Да, пример настройки:
SystemMenu.png => MonitoringMenu.png => DPAhost \ DPAserver \ Драйвера \ <Драйвер> \ Events \ <Событие> \ Транспорт

Выбрать нужный Транспорт и нажать "Сохранить":

EventSelectTransport.png


Можно ли для события указать более одного Транспорта?
Да, в таком случае копии данных по этому событию будут отправляться в каждый выбранный Транспорт.


Можно ли настроить второй Транспорт для обмена между DPA сервер и DPA хост?
Крайне не рекомендуется настраивать более одного Транспорта между конкретными экземплярами DPA сервера и DPA хоста. Это может привести к дублированию данных, искажению порядка событий и другим нежелательным эффектам.


Как изменить параметры Транспорта?
Параметры Транспорта возможно изменить только через файл конфигурации DpaServer.config.

1. Остановите службу DPA сервера.
net stop DpaServer
2. Файл конфигурации находится по следующему пути:
C:\ProgramData\X-tensive\DPA\Config\DpaServer.config 
3. Обязательно создайте резервную копию файла конфигурации.
4. Настройки транспорта находятся в узле root \ transports:
<?xml version="1.0"?>
<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ver="1">
  <drivers>
  ...
  </drivers>
  <states>
  ...
  </states>
  <transports>
    <transport transportIdentifier="0b75081d-210c-4b01-885b-154e8104503e" name="WCF" transportType="WcfTransport" restPeriod="00:00:01" resendingPeriod="00:00:15">
      <wcfTransport ipAddress="localhost" port="45618" />
    </transport>
    <transport transportIdentifier="a241a03e-a2dd-48b4-8611-e15023b07b26" name="MES-queue" transportType="MsmqTransport" restPeriod="00:00:01" resendingPeriod="00:00:15">
      <msmqTransport machine="localhost" queue="MES-queue" />
    </transport>
  </transports>
</root>
5. Измените настройки и сохраните файл конфигурации.
6. Запустите службу DPA сервера.
net start DpaServer

Гарантия доставки

Если по какой-то причине отправка данных по Транспорту не возможна, например, DPA хост временно недоступен, идет установка обновления и т.д., данные не будут утеряны. События и Пакеты будут накапливаться во внутренней FIFO очереди на отправку. В зависимости от количества драйверов, подключенных к DPA серверу, а так же в зависимости от частоты изменения данных по Событиям, очередь позволяет вместить данные от нескольких часов до нескольких дней работы.

TransportBuffering.png


При восстановлении связи накопленные данные будут переданы, очередь будет опустошена:

TransportEmptying.png


Внимание! Для работы внутренней FIFO очереди используется оперативная память. Данные не выгружаются в файловую систему, базу данных или другие хранилища. Если до отправки сообщений получателю DPA сервер будет остановлен, содержимое очереди будет утеряно.

Диагностика

На что нужно обратить внимание в первую очередь при возникновении проблем с получением данных по Транспорту из DPA сервера:

1. Лицензия должна быть установлена и активна
2. Убедиться, что События активны:

SystemMenu.png => MonitoringMenu.png => DPAhost \ DPAserver \ Драйвера \ <Драйвер> \ Events \ <Событие>

3. Убедиться, что Транспорт для Событий настроен корректно:

SystemMenu.png => MonitoringMenu.png => DPAhost \ DPAserver \ Драйвера \ <Драйвер> \ Events \ <Событие> \ Транспорт

4. При использовании протокола WCF убедиться, что IP-адрес и порт получателя установлены корректно:

SystemMenu.png => MonitoringMenu.png => DPAhost \ DPAserver \ Транспорт \ WCF

5. Используйте счетчики производительности Транспорта для анализа проблем доставки и производительности:

SystemMenu.png => MonitoringMenu.png => DPAhost \ DPAserver \ Транспорт \ WCF => Счетчики производительности