Enduro/X
Developer(s) | ATR Baltic |
---|---|
Stable release |
3.2.1
/ 06 Jul 2016 |
Development status | Active |
Written in | C, Go, C++ |
Operating system | Linux, FreeBSD, IBM AIX, Oracle Solaris, Cygwin, MAC OS X |
Type | Application server Message-oriented middleware Enterprise Messaging System SOA |
License | GPL v2 or Commercial |
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. Platform is designed for building real-time microservices based applications with clusterization option. Enduro/X functions as extended drop-in replacement alternative for Oracle (R) Tuxedo (R). The platform uses in-memory POSIX Kernel queues which insures high interprocess communication throughput.
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++.
Technology
Currently Enduro/X works on GNU/Linux kernels starting from 2.6.12. The most critical Linux feature is epoll() on POSIX queues. This Linux functionality allows true mechanics for one queue - multiple servers, where Enduro/X servers are polling over the queues.
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 MAC OS X 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 MAC OS X 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.
Features
- Standards based APIs - SCA, The Open Group XATMI
- Communication types - Synchronous, Asynchronous, Conversational, Publish/subscribe
- Typed buffers
- UBF (Unified Buffer Format) which provides emulation of Tuxedo's FML/FML32 format. UBF if high performance binary protocol buffer format. Buffer is indexed by binary search on fixed data types.
- STRING buffer format
- CARRAY (byte array) buffer format
- JSON buffer format, automatic conversion between JSON and UBF available
- Transaction Management - Global Transactions - Two-phase commit protocol - X/Open XA
- Clustering - on peer-to-peer basis
- Event broker (also called publish and subscribe messaging)
- Security - Cluster link encryption with GNU PGP framework
- System process monitoring and self healing (pings and restarts)
- Dynamic re-configuration
- Custom server polling extensions
- XATMI sub-system is able to work with out main application server daemon (ndrxd)
- Main application server daemon (ndrxd) can be restarted (if crashed). When started back it enters in learning mode for some period of time, in which in gathers information about system, what services are running, etc. After learning period, it starts to do normal operations
- Available tpforward() call
- ATMI server threads may become clients, and can do tpcall()
- Extensive logging & debugging. Enduro/X logging can be configured per binary with different log levels. As ATMI servers can be started outside of appserver, it is possible to debug them from programming IDE or with tools like valgrind.
- For quality assurance project uses automated unit-testing and integration-testing
- Built in ATMI service profiling.
- Environment variables can be updated for XATMI server processes with out full application reboot.
- Generic client process monitor (cpm). Subsystem allows to start/stop/monitor client executables. At client process crashes, cpm will start it back.
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.)
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-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