Enduro/X

Last updated
Enduro/X
Developer(s) Mavimax SIA
Stable release
8.0.8 / 19 August 2023;4 months ago (2023-08-19)
Repository
Written in C, C++, Go, Java
Operating system Linux, FreeBSD, IBM AIX, Oracle Solaris, Cygwin, macOS
Type Application server, Message-oriented middleware, Enterprise messaging system, SOA
License AGPL v3 or Commercial, LGPL v3 for Java and Go use
Website

Enduro/X is an open-source middleware platform for distributed transaction processing. It is built on proven APIs such as X/Open group's XATMI and XA. The platform is designed for building real-time microservices based applications with a clusterization option. Enduro/X functions as an extended drop-in replacement for Oracle Tuxedo. The platform uses in-memory POSIX Kernel queues which insures high interprocess communication throughput.

Contents

Services

The platform allows runtime system patching, without service interruption. The system monitors running processes, and restarts them after a crash or hang. System configuration can be dynamically reloaded and it provides a cluster facility, allowing two or more instances to be joined in peer-to-peer manner. Enduro/X is written in C and provides native APIs for C/C++. Mavimax provides bindings are provided for Go, Java programming languages. Community provides bindings for Python, PHP and Perl. Thus effectively Enduro/X may be used as language interoperability tool between supported programming languages.

Technology

Currently Enduro/X works on Linux kernels starting from 2.6.12. The most critical Linux feature is epoll() on POSIX queues. This Linux functionality provides the mechanism for one queue - multiple servers, where Enduro/X servers are polling over the queues. Enduro/X developers pushed the EPOLLEXCLUSIVE flag inclusion into Linux kernel mainline (starting from version 4.5). [1] The patch improved the Enduro/X response in case if hundreds of executables are providing the same service. Particularly kernel is not doing thundering herd type behavior anymore by waking up all binaries waiting on queue. Now only single receiver of the service call is woken. In some workloads the Enduro/X applications gets significant boost. The test case for the patch increased the performance of the workload from the 860 seconds to 24 sec. [2]

Starting with Enduro/X version 3.1.2 production grade support for FreeBSD, IBM AIX (versions 6.1 and 7.1) and Oracle Solaris V11 is added. V3.1.2 introduced experimental support for Apple macOS and Cygwin. Under Unix platforms where Posix queues are available, they are employed so that for every ATMI server/service pair there is separate queue open and caller service chooses queue in round robin mode. As for MacOS there is no support for Posix queues in operating system, Enduro/X uses emulated Posix queues which are based on memory mapped files in tandem with Posix thread's process shared mutexes. For FreeBSD Posix queues can be polled too, thus Enduro/X on FreeBSD works in the say way as Linux with one queue-multiple servers. The polling on FreeBSD is done with help of kqueue.

With version 6.0 System V queues are preferred IPC mechanisms for Unix platforms other than FreeBSD and Linux. The System V queues also gives single queue - multiple servers (SQMS) message distribution approach for effective load balancing. To load balance in SQMS mode with System V queues, XATMI server must be configured to use request address (logical channel/queue) on which all XATMI servers advertises same services. This Queue mode is available for Oracle Solaris and IBM AIX. For MacOS still emulated Posix queue are used, due to fact that it is not possible to adjust queue capacity on particular operating system.

Features

Performance

Several benchmarks have been made with the Enduro/X middleware and it shows that it competes with Oracle Tuxedo and ZeroMQ quite well. Enduro/X was faster than Tuxedo 30% in 56 KB data block range. [4] Enduro/X was significantly faster than ZeroMQ in 10-20KB range. [5] Also for test performed with RabbitMQ Enduro/X showed its strength and was ahead of the competitor. For the RPC calls, Enduro/X was several times ahead, for send only calls, RabbitMQ was bit closer to Enduro/X. [6]

Subsystems

Enduro/X contains different sub-modules which extends the application server and middleware functionality.

Queuing subsystem

Enduro/X provides a queuing subsystem called TMQ (Transactional Message Queue). This facility provides persistent queues that allows applications to explicitly enqueue and dequeue messages from named queues. Queues can be ordered by message en-queue time in LIFO or FIFO order. Queues are managed by an XA compliant resource manager allowing queue operations to participate in distributed transactions. An automated queue forwarding feature is provided that will remove entries from a queue and invoke an associated Enduro/X ATMI services, placing the reply message on an associated reply queue and failed messages to failure queue.

Configuration services

Enduro/X offers applications to use ini file based configuration reading via special XATMI server, provided in package, named "cconfsrv". Basically via standard tpcall() user application is able to read configuration files (can be separate ini file or folder with them). Technique allows to use the sub-sections with key/value inheritance from main section.

Trace logging services

Enduro/X introduced new set of API function named tplog. This allows user to use the same C based high-performance debug logging facilities which Enduro/X uses internally. It is possible to redirect all logging by thread bases files. Also there are APIs for "request logging", which means that user and Enduro/X can do logging in separate files for each request (e.g. log by session id, log by username, etc.)

Enduro/X Connect package

Enduro/X Connect package provides generic way for exposing XATMI services for outer world. Thus service can be invoked as REST normal services. The package provides functions for converting message internal messages to JSON format and vice versa. Web service module is extensible and provides several options for data conversion between formats. Module additionally supports file uploading, static content serving and orchestration of global transactions over the web service interface.

Enduro/X Connect package also provides module for accessing outer world web services via internal XATMI service call

Third connectivity component is in Enduro/X Connect package is generic TCP/IP connector which provides bi-directional XATMI service API to the TCP/IP sockets. Such functionality simplifies application development for IoT and Banking industries, where the data for different reasons needs to be sent in custom binary protocols, such as ISO8583. [7]

Application Server for Go (ASG)

ASG is bindings project on top of the Enduro/X. Authors considers these binding as application server for go, because Golang projects are linked statically and by default there is no such thing as components. Enduro/X allows to run separate executable binaries, which represents stateless services. These services can be reloaded on the fly without service interruption. Also platform allows to run distributed transaction processing by using Golang. Developers provides modified Oracle DB OCI8 drivers for Go, which supports XA transactions. Enduro/X ASG provides first ever distributed transaction facility for Golang..

Enduro/X Java

Enduro/X version 7.0 offers binding for Java. Full features XATMI servers and client processes may be written Java. Framework is based on multi-processing principle, so that XATMI servers and clients have its own copy of JVM. Requirements for XATMI server/service classes are minimal, thus framework may be considered as POJO application server. XA two phase commit can be used too with standard JDBC drivers. Transactions are managed by standard Enduro/X Core transaction manager to which JDBC drivers are loaded for transaction orchestration. Binding package also offer Java Linker process called exjld. It offers option to link java objects (jar files) to standard executable process with dependency to libjvm and libjava. Thus all jars may be packed in executable process, making Java software delivery simpler, now each process may contain all its dependencies, thus allowing different executables to use different versions of common jar dependencies.

As server process both java executable with classpath or linked java binaries are supported, ndrxd daemon can boot both of them.

Enduro/X-PHP

Full client bindings are available for PHP5. Client PHP processes might compile a loadable module or compile the Enduro/X process inside the PHP. When PHP process is running as client, it must be present in Enduro/X Application environment, that could be done when application is hosted under the same user where PHP app runs (Apache or so) or for the PHP user creating a micro environment which further connects to main application server via tpbridge process. Module is available here .

Enduro/X-Perl

Client and server bindings are available for Perl scripting language. Perl module is available here .

Acquisition

The Enduro/X was acquired from ATR Baltic, Ltd by Mavimax Ltd on February, 2017 with full rights to the source code and current agreements. [8]

History

Enduro/X was developed as closed source project by ATR Baltic. The development begun in December 2009 and first production customers (mainly banks) where put on the system in late 2012, at the time Enduro/X reached version 1.0. The project was open sourced in 2015, with version v2.3.2. From that event, all the development is made publicly available. Constantly new features are added with every major version release. Till version 6.0 Enduro/X was available under GNU GPLv2 license, starting from Enduro/X 6.0, project is moved to GNU AGPLv3 license. Starting with version 7.0, license is eased for middleware usage from Java and Go programming languages. The statement is that AGPL used by Enduro/X does not affect the Java or Go code which uses Enduro/X. Thanks to these changes, now Enduro/X Java and Enduro/X Go (ASG) modules now are released under LGPL v3, thus Java and Go projects may use middleware commercially with any extra license, while the support is provided commercially.

See also

Related Research Articles

The Jakarta Transactions, one of the Jakarta EE APIs, enables distributed transactions to be done across multiple X/Open XA resources in a Java environment. JTA was a specification developed under the Java Community Process as JSR 907. JTA provides for:

The Jakarta Messaging API is a Java application programming interface (API) for message-oriented middleware. It provides generic messaging models, able to handle the producer–consumer problem, that can be used to facilitate the sending and receiving of messages between software systems. Jakarta Messaging is a part of Jakarta EE and was originally defined by a specification developed at Sun Microsystems before being guided by the Java Community Process.

<span class="mw-page-title-main">Inter-process communication</span> How computer operating systems enable data sharing

In computer science, inter-process communication (IPC), also spelled interprocess communication, are the mechanisms provided by an operating system for processes to manage shared data. Typically, applications can use IPC, categorized as clients and servers, where the client requests data and the server responds to client requests. Many applications are both clients and servers, as commonly seen in distributed computing.

In computer science, message queues and mailboxes are software-engineering components typically used for inter-process communication (IPC), or for inter-thread communication within the same process. They use a queue for messaging – the passing of control or of content. Group communication systems provide similar kinds of functionality.

Message-oriented middleware (MOM) is software or hardware infrastructure supporting sending and receiving messages between distributed systems. MOM allows application modules to be distributed over heterogeneous platforms and reduces the complexity of developing applications that span multiple operating systems and network protocols. The middleware creates a distributed communications layer that insulates the application developer from the details of the various operating systems and network interfaces. APIs that extend across diverse platforms and networks are typically provided by MOM.

IBM MQ is a family of message-oriented middleware products that IBM launched in December 1993. It was originally called MQSeries, and was renamed WebSphere MQ in 2002 to join the suite of WebSphere products. In April 2014, it was renamed IBM MQ. The products that are included in the MQ family are IBM MQ, IBM MQ Advanced, IBM MQ Appliance, IBM MQ for z/OS, and IBM MQ on IBM Cloud. IBM MQ also has containerised deployment options.

Tuxedo is a middleware platform used to manage distributed transaction processing in distributed computing environments. Tuxedo is a transaction processing system or transaction-oriented middleware, or enterprise application server for a variety of systems and programming languages. Developed by AT&T in the 1980s, it became a software product of Oracle Corporation in 2008 when they acquired BEA Systems. Tuxedo is now part of the Oracle Fusion Middleware.

Stratus VOS is a proprietary operating system running on Stratus Technologies fault-tolerant computer systems. VOS is available on Stratus's ftServer and Continuum platforms. VOS customers use it to support high-volume transaction processing applications which require continuous availability. VOS is notable for being one of the few operating systems which run on fully lockstepped hardware.

The Advanced Message Queuing Protocol (AMQP) is an open standard application layer protocol for message-oriented middleware. The defining features of AMQP are message orientation, queuing, routing, reliability and security.

<span class="mw-page-title-main">Message broker</span> Computer program module

A message broker is an intermediary computer program module that translates a message from the formal messaging protocol of the sender to the formal messaging protocol of the receiver. Message brokers are elements in telecommunication or computer networks where software applications communicate by exchanging formally-defined messages. Message brokers are a building block of message-oriented middleware (MOM) but are typically not a replacement for traditional middleware like MOM and remote procedure call (RPC).

MessagePlus/Open is a communication platform for medium to large organizations designed specifically to handle high volumes of traffic within a high-availability environment. Currently supported communication channels include fax, fax over IP, e-mail and SMS, together withvarious options for integration with business applications. The product has been developed by INTERCOPE GmbH, Germany and is sold by both Intercope and IBM. It was previously known as FaxPlus/Open.

A message queueing service is a message-oriented middleware or MOM deployed in a compute cloud using software as a service model. Service subscribers access queues and or topics to exchange data using point-to-point or publish and subscribe patterns.

<span class="mw-page-title-main">Unisys OS 2200 distributed processing</span> Aspect of Unisys OS 2200 operating system

OS 2200 supports all commonly used, and many not so commonly used, distributed processing protocols, APIs, and development technology.

The Application Interface Specification (AIS) is a collection of open specifications that define the application programming interfaces (APIs) for high-availability application computer software. It is developed and published by the Service Availability Forum and made freely available. Besides reducing the complexity of high-availability applications and shortening development time, the specifications intended to ease the portability of applications between different middleware implementations and to admit third party developers to a field that was highly proprietary in the past.

ZeroMQ is an asynchronous messaging library, aimed at use in distributed or concurrent applications. It provides a message queue, but unlike message-oriented middleware, a ZeroMQ system can run without a dedicated message broker; the zero in the name is for zero broker. The library's API is designed to resemble Berkeley sockets.

Middleware is a type of computer software program that provides services to software applications beyond those available from the operating system. It can be described as "software glue".

Apache Kafka is a distributed event store and stream-processing platform. It is an open-source system developed by the Apache Software Foundation written in Java and Scala. The project aims to provide a unified, high-throughput, low-latency platform for handling real-time data feeds. Kafka can connect to external systems via Kafka Connect, and provides the Kafka Streams libraries for stream processing applications. Kafka uses a binary TCP-based protocol that is optimized for efficiency and relies on a "message set" abstraction that naturally groups messages together to reduce the overhead of the network roundtrip. This "leads to larger network packets, larger sequential disk operations, contiguous memory blocks [...] which allows Kafka to turn a bursty stream of random message writes into linear writes."

appserver.io is an application server for PHP-based web environments. The project consists of middleware which delivers classical PHP web applications and provides additional services.

References

  1. "Patchwork epoll: add EPOLLEXCLUSIVE flag". patchwork.kernel.org. Jason Baron.
  2. "EPOLLEXCLUSIVE Linux Kernel patch testing". mvitolin.wordpress.com. mvitolin.
  3. "Enduro/X 7.5 Release". mavimax.com. Mavimax.
  4. "Enduro/X VS Oracle Tuxedo performance benchmark". publicwork.wordpress.com. Publicwork.
  5. "High performance middleware wars: ZeroMQ vs Enduro/X benchmark". publicwork.wordpress.com. Publicwork.
  6. "Enduro/X vs RabbitMQ review and benchmark". publicwork.wordpress.com. Publicwork.
  7. "Enduro/X Connect". www.mavimax.com. Mavimax.
  8. "ATR Baltic's Enduro/X middleware Acquisition". www.mavimax.com. Mavimax Ltd.