Home

Awesome

Enduro/X Core

Build (including atmi/ubf tests) status

OSStatusOSStatusOSStatus
RHEL/Oracle Linux 9Build StatusCentos 6Build StatusFreeBSD 11Build Status
Oracle Linux 7Build StatusOSX 11.4Build Statusraspbian11_arv7lBuild Status
SLES 12Build StatusSLES 15Build StatusSolaris 10Build Status
Solaris 11Build StatusUbuntu 14.04Build StatusUbuntu 18.04Build Status
RHEL/Oracle Linux 8Build StatusUbuntu 22.04Build StatusUbuntu 20.04Build Status

Overview

Enduro/X is Open Source Middleware Platform for Distributed Transaction Processing

It is modern, micro-services based middleware for writing distributed, open systems (program consists of several executables) based applications. Thus by using Enduro/X programmers do not have to worry about threads and concurrency anymore, the load balancing and multi-CPU loading is done by Enduro/X middleware by it self, administrator only have to determine how many copies of particular services should be started. Of-course Enduro/X supports multi-threaded applications too, but now system architects have a choice either to design multi-threaded executables or just configure number of executables to start.

For local inter-process-communication (IPC) Enduro/X uses kernel memory based Posix queues to avoid overhead of the TCP/IP protocol which is used in other middlewares or REST based micro-service architectures. Thus this approach greatly increases application speed, as kernel queues is basically a matter of block memory copy from one process to another (by contrast of 7 layers of TCP/IP stack and streaming nature of the sockets vs block copy).

Enduro/X provides SOA architecture for C/C++ applications and allows to cluster application in fault tolerant way over multiple physical servers. Enduro/X provides Oracle(R) Tuxedo(R) FML/FML32 library emulation, including boolean expressions. Other Tuxedo specific APIs are supported, such as tpforward() and work with distributed transactions (tpbegin(), tpcommit(), etc.).

Platform provides X/Open XATMI and XA interfaces/APIs for C/C++ applications. Enduro/X can at some level can be considered as replacement for Oracle(R) Tuxedo(R), Jboss Blacktie (Narayan), Hitachi OpenTP1 and other XATMI middlewares.

Dual licensed under Affero General Public License Version 3 for use in Open Source project or Commercial license Acquired from Mavimax Ltd (https://www.mavimax.com),

EnduroX have bindings for:

Enduro/X provides following features:

Alt text

Load balancing

Alt text

Supported operating system: GNU/Linux, starting from 2.6.12 kernel (needed for POSIX Queues). Starting with Enduro/X Version 3.1.2 IBM AIX (6.1 and 7.1), Oracle Solaris 11, MAC OS X (experimental) and Cygwin (experimental) support is added. Supported compilers: gcc, LLVM clang, IBM xlC.

Call/message forwarding

Instead of doing calls to each server separately...

Alt text

This is typciall way for example if doing micro-services with HTTP/REST. You need to do the calls to each service separately. And that is extra overhead to system (multiple returns) and the caller must orchestrate the all calls.

...Enduro/X offers much effective way - tpforward() where request is

passed around the system

Alt text

In this case the destination service orchestrates the system, it is up to service to choose the next service which will continue the call processing. The caller is not aware of final service which will do the reply back (tpreturn()).

Note that service after doing "tpforward()" becomes idle and can consume next call.

High availability and self healing

Enduro/X is capable of detecting stalled/hanged XATMI servers and gracefully can reboot them. The ping times are configurable on per server basis. In case if main daemon dies, it is possible to configure special XATMI server named "tprecover" which monitors "ndrxd" and vice versa, ndrxd can monitor tprecover. Thus if any of these services are not cleanly shut down, then system will heal it self, and boot service/daemons back.

The ndrxd learning mode is some period of time (configurable) in which ndrxd will request all the system for active servers and their services, to get back the view of the system and be in control. Note that system is able to work even without ndrxd, but at that time no server healing and management will be done.

Alt text

Real time system patching

It is possible to patch the Enduro/X system (update stateless XATMI servers) without service interruption. This is achieved by following scheme:

Alt text

Monitoring

Enduro/X provides TM_MIB API for information reading. Out of the box NetXMS monitoring suite uses this API to monitor application. Thus full featured monitoring is possible. Presentation here (video):

Enduro/X monitoring with NetXMS

Performance

Due to fact that Enduro/X uses memory based queues, performance numbers are quite high:

ATMI client calls server in async way (tpacall(), no reply from server)

Alt text

Local one client calls server, and gets back response:

Alt text

Multiple clients calls multiple servers

Alt text

Single client calls single server via network (two app servers bridged)

Alt text

Persistent storage (message enqueue to disk via tpenqueue())

The number here are lower because messages are being saved to disk. Also internally XA transaction is used, which also requires logging to stable storage. This benchmark uses default Enduro/X setting for data flushing to disk which is fflush() Unix system call. Fflush() does not guarantee data consistence at power outage event. For fully guaranteed data consistence, flags (FSYNC/FDATASYNC/DSYNC) can be set for XA resource. However expect much lower TPS performance.

Alt text

Tpcall cache benchmark

This benchmark shows the performance of cached XATMI service calls.

Alt text

Migration from Oracle Tuxedo to Enduro/X

The migration is as simple as this (ideal scenario):

Configuration migration example (ubb_config1 is Tuxedo UBB configuration file):

$ ubb2ex ubb_config1 -P ./test_dir
UBB2EX Tool

Enduro/X 7.5.36, build Dec 17 2021 22:33:46, using epoll for LINUX (64 bits)

Enduro/X Middleware Platform for Distributed Transaction Processing
Copyright (C) 2009-2016 ATR Baltic Ltd.
Copyright (C) 2017-2021 Mavimax Ltd. All Rights Reserved.

This software is released under one of the following licenses:
AGPLv3 (with Java and Go exceptions) or Mavimax license for commercial use.


$ cd test_dir/user90/conf

$ ls -1

app.test1.ini
ndrxconfig.test1.xml
settest1

$ source settest1

$ xadmin start -y
Enduro/X 7.5.36, build Dec 17 2021 22:33:46, using epoll for LINUX (64 bits)

Enduro/X Middleware Platform for Distributed Transaction Processing
Copyright (C) 2009-2016 ATR Baltic Ltd.
Copyright (C) 2017-2021 Mavimax Ltd. All Rights Reserved.

This software is released under one of the following licenses:
AGPLv3 (with Java and Go exceptions) or Mavimax license for commercial use.

* Shared resources opened...
* Enduro/X back-end (ndrxd) is not running
* ndrxd PID (from PID file): 57479
* ndrxd idle instance started.
exec cconfsrv -k C4Lwt7G4 -i 1 -e /tmp/test_dir/user90/log/cconfsrv.1.log -r --  :
	process id=57481 ... Started.
exec cconfsrv -k C4Lwt7G4 -i 2 -e /tmp/test_dir/user90/log/cconfsrv.2.log -r --  :
	process id=57482 ... Started.
exec tpadmsv -k C4Lwt7G4 -i 3 -e /tmp/test_dir/user90/log/tpadmsv.3.log -r --  :
	process id=57483 ... Started.
exec tpadmsv -k C4Lwt7G4 -i 4 -e /tmp/test_dir/user90/log/tpadmsv.4.log -r --  :
	process id=57484 ... Started.
exec tpevsrv -k C4Lwt7G4 -i 5 -e /tmp/test_dir/user90/log/tpevsrv.5.log -r --  :
	process id=57485 ... Started.
exec tmsrv -k C4Lwt7G4 -i 8 -e /tmp/test_dir/user90/log/tmsrv.8.log -r -- -t1 -l /tmp/test_dir/user90/tmlogs/rm8 :
	process id=57491 ... Started.
exec tmsrv -k C4Lwt7G4 -i 9 -e /tmp/test_dir/user90/log/tmsrv.9.log -r -- -t1 -l /tmp/test_dir/user90/tmlogs/rm8 :
	process id=57503 ... Started.
exec tmqueue -k C4Lwt7G4 -i 40 -e /tmp/test_dir/user90/log/tmqueue.40.log -r -- -s1 -p10 -f10 :

...

Releases

Build configurations

Configure make with:

$ cmake -DCMAKE_INSTALL_PREFIX:PATH=pwd/dist .

Flags: