Эндуро/Х
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2018 г. ) |
Разработчик(и) | Мавимакс ООО |
---|---|
Стабильная версия | 8.0.10
/ 26 ноября 2023 г |
Репозиторий | |
Написано в | C , С++ , Го , Java |
Операционная система | Linux , FreeBSD , IBM AIX , Oracle Solaris , Cygwin , macOS |
Тип | Сервер приложений , Промежуточное ПО, ориентированное на сообщения , Корпоративная система обмена сообщениями , SOA |
Лицензия | AGPL v3 или коммерческая версия, LGPL v3 для использования на Java и Go |
Веб-сайт | [1] [2] [3] |
Enduro/X — это платформа с открытым исходным кодом промежуточная для распределенной обработки транзакций . Он построен на проверенных API, таких как X/Open группы XATMI и XA . Платформа предназначена для создания приложений на основе микросервисов реального времени с возможностью кластеризации. Enduro/X функционирует как расширенная замена Oracle Tuxedo . Платформа использует ядра POSIX очереди в памяти , что обеспечивает высокую пропускную способность межпроцессного взаимодействия .
Услуги
[ редактировать ]Платформа позволяет вносить исправления в систему во время выполнения без прерывания обслуживания. Система отслеживает запущенные процессы и перезапускает их после сбоя или зависания. Конфигурацию системы можно динамически перезагружать, и она обеспечивает возможность кластеризации, позволяя объединять два или более экземпляров в одноранговой сети. Enduro/X написан на C и предоставляет собственные API для C/ C++ . Mavimax предоставляет привязки для языков программирования Go и Java. Сообщество предоставляет привязки для Python, PHP и Perl. Таким образом, Enduro/X можно эффективно использовать в качестве инструмента языкового взаимодействия между поддерживаемыми языками программирования.
Технология
[ редактировать ]В настоящее время Enduro/X работает с ядрами Linux , начиная с 2.6.12. Наиболее важной функцией Linux является epoll() в очередях POSIX. Эта функциональность Linux обеспечивает механизм для одной очереди — нескольких серверов, где серверы Enduro/X опрашивают очереди. Разработчики Enduro/X включили флаг EPOLLEXCLUSIVE в основную ветку ядра Linux (начиная с версии 4.5). [1] Патч улучшил реакцию Enduro/X в случае, если одну и ту же услугу предоставляют сотни исполняемых файлов. В частности, ядро больше не выполняет громоподобное стадное поведение, пробуждая все двоичные файлы, ожидающие в очереди. Теперь просыпается только один получатель сервисного вызова. В некоторых рабочих нагрузках приложения Enduro/X получают значительный прирост. Тестовый пример патча увеличил производительность рабочей нагрузки с 860 секунд до 24 секунд. [2]
поддержка промышленного уровня для FreeBSD , IBM AIX (версии 6.1 и 7.1) и Oracle Solaris Начиная с Enduro/X версии 3.1.2 добавляется V11. В версии 3.1.2 представлена экспериментальная поддержка Apple macOS и Cygwin . На платформах Unix, где доступны очереди Posix, они используются таким образом, что для каждой пары сервер/служба ATMI открыта отдельная очередь, и вызывающая служба выбирает очередь в режиме циклического перебора. Что касается MacOS, то в операционной системе нет поддержки очередей Posix, Enduro/X использует эмулированные очереди Posix, которые основаны на файлах, отображаемых в памяти, в тандеме с общими мьютексами процесса потока Posix. Для FreeBSD также можно опрашивать очереди Posix, поэтому Enduro/X во FreeBSD работает так же, как Linux с одной очередью и несколькими серверами. Опрос во FreeBSD выполняется с помощью kqueue .
Начиная с версии 6.0 очереди System V являются предпочтительными механизмами IPC для платформ Unix, отличных от FreeBSD и Linux. Очереди System V также обеспечивают подход распределения сообщений «одна очередь — несколько серверов» (SQMS) для эффективной балансировки нагрузки. Для балансировки нагрузки в режиме SQMS с очередями System V сервер XATMI должен быть настроен на использование адреса запроса (логического канала/очереди), по которому все серверы XATMI рекламируют одни и те же услуги. Этот режим очереди доступен для Oracle Solaris и IBM AIX. Для MacOS по-прежнему используются эмулированные очереди Posix, поскольку невозможно настроить емкость очереди в конкретной операционной системе.
Функции
[ редактировать ]- API на основе стандартов — SCA , Открытая группа XATMI
- Типы связи — синхронный, асинхронный, диалоговый, публикация/подписка.
- Типизированные буферы
- UBF (унифицированный формат буфера), который обеспечивает эмуляцию формата FML/FML32 Tuxedo. UBF — высокопроизводительный формат буфера двоичного протокола. Буфер индексируется посредством двоичного поиска по фиксированным типам данных. Начиная с версии v8.0, добавлена поддержка рекурсивных буферов UBF, полей PTR и VIEW.
- Формат буфера STRING.
- Формат буфера CARRAY (массив байтов).
- Формат буфера JSON , доступно автоматическое преобразование между JSON и UBF.
- Буфер VIEW (начиная с версии 5.0+). Это предлагает отправку структуры C между процессами кросс-платформенным способом. Также это позволяет сопоставлять поля UBF с полями VIEW, тем самым помогая разработчику быстрее разрабатывать приложения за счет объединения буферов UBF и VIEW.
- Управление транзакциями — глобальные транзакции — протокол двухфазной фиксации — X/Open XA
- Эмуляция интерфейса XA для PostgreSQL
- Кластеризация - на одноранговой основе
- Брокер событий (также называемый обменом сообщениями публикации и подписки)
- Мониторинг системных процессов и самовосстановление (пинги и перезапуски)
- Кэш службы SOA. Службы XATMI можно кэшировать в базе данных LMDB . В результате следующий вызов службы от любого локального клиента получает результаты непосредственно из кеша (в основном из прямого чтения из памяти).
- Динамическая реконфигурация
- Пользовательские расширения опроса сервера
- Подсистема XATMI способна работать без демона основного сервера приложений (ndrxd)
- Демон главного сервера приложений (ndrxd) можно перезапустить (в случае сбоя). При повторном запуске он на некоторое время переходит в режим обучения, в котором собирается информация о системе, о том, какие службы работают и т. д. После периода обучения он начинает выполнять обычные операции.
- Доступный вызов tpforward()
- Потоки сервера ATMI могут стать клиентами и могут выполнять tpcall().
- Настройка таймаута вызова ATMI через вызов API tptoutset()
- Обширное ведение журнала и отладка. Ведение журнала Enduro/X можно настроить для каждого двоичного файла с разными уровнями журнала. Поскольку серверы ATMI можно запускать вне сервера приложений, их можно отлаживать из среды программирования IDE или с помощью таких инструментов, как valgrind .
- Для обеспечения качества в проекте используется автоматизированное модульное тестирование и интеграционное тестирование.
- Встроенное профилирование сервисов ATMI.
- Переменные среды можно обновлять для процессов сервера XATMI без полной перезагрузки приложения.
- Общий монитор процессов клиента (cpm). Подсистема позволяет запускать/останавливать/мониторинг исполняемых файлов клиента. При сбое клиентского процесса cpm запустит его заново. Массивная функция администрирования клиентов позволяет легко определять множество похожих исполняемых файлов (с диапазонами подразделов) и таким же образом очень легко управлять ими всеми вместе с помощью масок регулярных выражений.
- Начиная с версии 5.2 Enduro/X обеспечивает функцию шифрования данных конфигурации, поэтому программное обеспечение, созданное на базе Enduro/X, может соответствовать стандарту безопасности данных индустрии платежных карт (PCI/DSS).
- Начиная с версии 6.0.17 для серверных и клиентских процессов XATMI можно установить максимальный предел резидентной и виртуальной памяти. Таким образом, когда лимит достигнут, процессы корректно перезапускаются. Эта конкретная функция приветствуется в средах, где поставщики поставляют двоичные файлы с утечками памяти, поэтому в производственных средах эти ограничения могут помочь временно справиться с ситуацией, пока она не будет решена разработчиком.
- TMIB API для сбора системной информации.
- Агент NetXMS для мониторинга клиентских и серверных процессов, очередей, служб, компьютеров и кластеров.
- Полная поддержка инструментов сборки (buildserver, buildclient, buildtms). [3]
- Потоки диспетчеризации службы XATMI.
- Поддержка маршрутизации, зависящей от данных, для буферов UBF.
- Автоматические транзакции для серверов XATMI.
- Обработка приоритета обслуживания.
- Изменение настроек журнала на лету и ротация журналов для любой программы, связанной с Enduro/X.
- Скрытая командная платформа для публикации пользовательских команд в процессах в реальном времени.
Производительность
[ редактировать ]С промежуточным программным обеспечением Enduro/X было проведено несколько тестов, которые показывают, что оно довольно хорошо конкурирует с Oracle Tuxedo и ZeroMQ . Enduro/X был быстрее Tuxedo на 30% в диапазоне блоков данных размером 56 КБ. [4] Enduro/X был значительно быстрее ZeroMQ в диапазоне 10–20 КБ. [5] Также в тесте, проведенном с RabbitMQ, Enduro/X показал свою силу и опередил конкурента. Для вызовов RPC Enduro/X был в несколько раз впереди, а для вызовов только для отправки RabbitMQ был немного ближе к Enduro/X. [6]
Подсистемы
[ редактировать ]Enduro/X содержит различные подмодули, которые расширяют функциональность сервера приложений и промежуточного программного обеспечения.
Подсистема массового обслуживания
[ редактировать ]Enduro/X предоставляет подсистему организации очередей под названием TMQ (Очередь транзакционных сообщений). Это средство обеспечивает постоянные очереди, которые позволяют приложениям явно ставить сообщения в очередь и извлекать из нее сообщения из именованных очередей. Очереди можно упорядочить по времени нахождения сообщений в очереди в порядке LIFO или FIFO. Очередями управляет XA-совместимый менеджер ресурсов, позволяющий операциям очереди участвовать в распределенных транзакциях. Предусмотрена функция автоматической пересылки очереди, которая удаляет записи из очереди и вызывает связанные службы Enduro/X ATMI, помещая ответное сообщение в связанную очередь ответов, а сообщения с ошибками — в очередь ошибок.
Услуги по настройке
[ редактировать ]Enduro/X предлагает приложениям использовать чтение конфигурации на основе INI-файла через специальный сервер XATMI, поставляемый в пакете, с именем «cconfsrv». По сути, через стандартное пользовательское приложение tpcall() можно читать файлы конфигурации (это может быть отдельный ini-файл или папка с ними). Техника позволяет использовать подразделы с наследованием ключ/значение от основного раздела.
Службы регистрации трассировки
[ редактировать ]Enduro/X представил новый набор функций API под названием tplog. Это позволяет пользователю использовать те же высокопроизводительные средства ведения журнала отладки на базе C, которые Enduro/X использует внутри себя. Есть возможность перенаправить все логирование по файлам баз потоков. Также существуют API для «регистрации запросов», что означает, что пользователь и Enduro/X могут вести журнал в отдельных файлах для каждого запроса (например, журнал по идентификатору сеанса, журнал по имени пользователя и т. д.).
Пакет Enduro/X Connect
[ редактировать ]Пакет Enduro/X Connect предоставляет универсальный способ предоставления услуг XATMI для внешнего мира. Таким образом, сервис можно вызывать как обычные сервисы REST. Пакет предоставляет функции для преобразования внутренних сообщений сообщения в формат JSON и наоборот. Модуль веб-сервиса является расширяемым и предоставляет несколько вариантов преобразования данных между форматами. Модуль дополнительно поддерживает загрузку файлов, предоставление статического контента и оркестрацию глобальных транзакций через интерфейс веб-сервиса.
Пакет Enduro/X Connect также предоставляет модуль для доступа к веб-сервисам внешнего мира через внутренний сервисный вызов XATMI.
Третий компонент подключения находится в пакете Enduro/X Connect и представляет собой универсальный соединитель TCP/IP, который обеспечивает двунаправленный API-интерфейс службы XATMI для сокетов TCP/IP. Такая функциональность упрощает разработку приложений для Интернета вещей и банковской отрасли, где данные по разным причинам необходимо отправлять в специальных двоичных протоколах, таких как ISO8583. [7]
Сервер приложений для Go (ASG)
[ редактировать ]ASG — это проект креплений на базе Enduro/X. Авторы рассматривают эти привязки как сервер приложений для go, поскольку проекты Golang линкуются статически и по умолчанию не существует такого понятия, как компоненты. Enduro/X позволяет запускать отдельные исполняемые двоичные файлы, которые представляют собой сервисы без сохранения состояния. Эти сервисы можно перезагружать на лету без прерывания обслуживания. Также платформа позволяет запускать распределенную обработку транзакций с помощью Golang. Разработчики предоставляют модифицированные драйверы Oracle DB OCI8 для Go, которые поддерживают транзакции XA. Enduro/X ASG предоставляет первое в мире средство распределенных транзакций для Golang.
Эндуро/X Ява
[ редактировать ]Enduro/X версии 7.0 предлагает привязку для Java. Полнофункциональные серверы XATMI и клиентские процессы могут быть написаны на Java. Фреймворк основан на принципе многопроцессорности, поэтому серверы и клиенты XATMI имеют собственную копию JVM. Требования к классам серверов/сервисов XATMI минимальны, поэтому инфраструктуру можно рассматривать как сервер приложений POJO . Двухфазную фиксацию XA можно использовать и со стандартными драйверами JDBC . Транзакции управляются стандартным менеджером транзакций Enduro/X Core, в который JDBC загружаются драйверы для оркестрации транзакций. Пакет привязки также предлагает процесс Java Linker, называемый exjld. Он предлагает возможность связать объекты Java (файлы jar) со стандартным исполняемым процессом с зависимостью от libjvm и libjava. Таким образом, все jar-файлы могут быть упакованы в исполняемый процесс, что упрощает доставку программного обеспечения Java. Теперь каждый процесс может содержать все свои зависимости, что позволяет различным исполняемым файлам использовать разные версии общих jar-зависимостей.
Поскольку серверный процесс поддерживает как исполняемый файл Java с путем к классам, так и связанные двоичные файлы Java, демон ndrxd может загружать оба из них.
Эндуро/X-PHP
[ редактировать ]Полные привязки клиента доступны для PHP5 . Клиентские процессы PHP могут скомпилировать загружаемый модуль или скомпилировать процесс Enduro/X внутри PHP. Когда процесс PHP выполняется в качестве клиента, он должен присутствовать в среде приложения Enduro/X, что может быть сделано, когда приложение размещается под тем же пользователем, где запускается приложение PHP (Apache или что-то подобное), или для пользователя PHP, создающего микросреду, которая далее подключается к основному серверу приложений через процесс tpbridge. Модуль доступен здесь [4] .
Эндуро/X-Perl
[ редактировать ]Привязки клиента и сервера доступны для Perl языка сценариев . Модуль Perl доступен здесь [5] .
Приобретение
[ редактировать ]Enduro/X был приобретен у ATR Baltic, Ltd компанией Mavimax Ltd в феврале 2017 года с полными правами на исходный код и действующими соглашениями. [8]
История
[ редактировать ]Enduro/X был разработан ATR Baltic как проект с закрытым исходным кодом. Разработка началась в декабре 2009 года, и первые серийные клиенты (в основном банки) внедрили систему в конце 2012 года, когда Enduro/X достигла версии 1.0. Проект был открыт с открытым исходным кодом в 2015 году, версия v2.3.2. С этого события все разработки становятся общедоступными. Постоянно добавляются новые функции с каждым выпуском основной версии. До версии 6.0 Enduro/X была доступна под лицензией GNU GPLv2 , начиная с Enduro/X 6.0, проект переведен на лицензию GNU AGPLv3 . Начиная с версии 7.0, лицензия упрощена для использования промежуточного программного обеспечения из языков программирования Java и Go. Утверждается, что AGPL, используемый Enduro/X, не влияет на код Java или Go, использующий Enduro/X. Благодаря этим изменениям модули Enduro/X Java и Enduro/X Go (ASG) теперь выпускаются под лицензией LGPL v3 , таким образом, проекты Java и Go могут использовать промежуточное программное обеспечение на коммерческой основе с любой дополнительной лицензией, в то время как поддержка предоставляется на коммерческой основе.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Пэчворк epoll: добавить флаг EPOLLEXCLUSIVE» . patchwork.kernel.org . Джейсон Бэрон.
- ^ «EPOLLEXCLUSIVE Тестирование исправлений ядра Linux» . mvitolin.wordpress.com . мвитолин.
- ^ «Выпуск Enduro/X 7.5» . mavimax.com . Мавимакс.
- ^ «Эталон производительности Enduro/X VS Oracle Tuxedo» . publicwork.wordpress.com . Общественная работа.
- ^ «Войны высокопроизводительного промежуточного программного обеспечения: тест ZeroMQ против Enduro/X» . publicwork.wordpress.com . Общественная работа.
- ^ «Обзор и тест Enduro/X против RabbitMQ» . publicwork.wordpress.com . Общественная работа.
- ^ «Эндуро/Х Коннект» . www.mavimax.com . Мавимакс.
- ^ «Приобретение промежуточного программного обеспечения Enduro/X компании ATR Baltic» . www.mavimax.com . ООО "Мавимакс"