Краткое описание
Система представляет собой набор микросервисов (далее нод), которые обладают следующими свойствами:
- каждая нода, представляет собой отдельный процесс OS
- ноды работают используют async IO
- все ноды объединены между собой единым low-latency транспортом
- нет единого брокера сообщений, все ноды доступны друг другу напрямую. При этом можно настроить роутинг сообщений, исходя из определенных правил, описываемых на языке C (например рассылка сообщений, распределение нагрузки и т.д.)
- все ноды мониторятся и управляются супернодой xroad_init. Суперпроцесс связывает ноды в единое целое (далее называемое система)
- всем нодам доступен low-latency кэш данных. Кэш представляет собой набор таблиц, реализованных на основе memory mapped files Это, своего рода, упрощенная база данных, которая поддерживает операции добавления, изменения записей. Каждая запись это бинарный образ C структуры. Доступ к бинарным данным осуществляется при помощи C или Python API напрямую, минуя лишние операции записи и чтения данных. Каждая нода имеет возможность создавать, изменять и обмениваться записями таблиц
- Warning
- Операции удаления и вставки (в середину таблицы) не поддерживаются
- все ноды регистрируются в, свое рода, реестре, что позволяет каждой ноде получить список всех сконфигурированных нод
- ноды делятся на ноды, которые запускаются при старте системы и ноды, которые запускаются пользователем вручную (stand alone mode)
- Warning
- Stand Alone ноды не мониторятся суперпроцессом
Состав системы
Система поставляется в виде набора исполняемых файлов, скриптов и файлов конфигурации:
Рис. 1
- bin - директория, где находятся все исполняемые бинарные файлы. Расположение бинарных файлов именно в этой директории не является обязательным требованием. Директория, помимо чисто прикладных модулей (коннекторы к биржам, алгоритмы и т.д.), содержит самые важные части самой системы:
- xroad_init - основная нода системы, которая запускается самой первой при старте системы. Ее задача запуск и мониторинг всех остальных нод (за исключением stand alone нод). В зависимости от настроек и в случае аварийной остановки нод, xroad_init производит их перезапуск. Так же xroad_init управляет временем работы нод, исходя из настроенного расписания (см. Конфигурирование системы)
- xroad_log_reader - консольная утилита для чтения бинарных логов. Пример: bin/xroad_log_reader -f data/node1/logs/20170327.log
- Note
- bin/xroad_log_reader -h показывает возможные опции запуска утилиты
- .cache - скрытая директория, в которой хранятся таблицы кэша системы (инструменты, состояние FIX сессий и т.д.)
- config - директория, где хранятся все файлы конфигурации. Все файлы конфигурации должны лежать именно в этой директории (см. Конфигурирование системы)
- data - директория, в которой хранятся все лог файлы и является рабочей для всех нод системы. При запуске, для каждой ноды создается рабочая директория c таким же именем, как и у ноды, которая в свою очередь, содержит директорию логов. Например рабочая директория ноды ctl
- deps - всевозможные 3rdParty зависимости (библиотеки) от которых зависит система, но которые не являются частью OS
- lib - директория, содержащая динамические библиотеки
- pbin - директория в которой находятся все Python исполняемые файлы. Расположение Python файлов именно в этой директории не является обязательным требованием. Наиболее важной утилитов в pbin является xroad_ctl.py (см. Интерфейс коммандной строки)
- ngui - набор файлов и библиотек для работы Web UI
- sdk - набор библиотек и заголовков для разработки модулей для системы
- sql - набор sql скриптов (если они необходимы)
- archive_logs.sh - скрипт, который выполняет архивирование и удаление старых логов
- check_cfg.sh - скрипт, который выполняет проверку валидности файлов конфигурации и сборку библиотеки роутинга (dll.c)
- clear.sh - скрипт, который производит очистку системы (удалет логи, очищает кэш системы)
- reconfig.sh - скрипт, который посылает reconfig сигнал всем нодам
- reload_symbols.sh/reload_timesheet.sh - скрипты, которые загружают инструменты из внешних источников в кэш системы
- reset.sh - скрипт, который посылает reset сигнал модулям системы. Этот сигнал, например, может использоваться для ресета FIX сессии, состояния, и т.д.
- restart_clean.sh - скрипт, который перезапускает систему с очисткой состояния
- restart_ui.sh - скрипт, который перезапускает WebUI
- start.sh - скрипт, который запускает систему
- stop.sh - скрипт, который останавливает систему
- ui_start.sh - скрипт, который запускает WebUI
- ui_stop.sh - скрипт, который останавливает WebUI
- view.sh - скрипт, который позволяет посмотреть состояние системы