Enduro/X

Enduro/X ir atvērtā pirmkoda ziņojumapmaiņas starpprogrammatūras platforma starpprocesu sakaru (interprocess communication, IPC) nodrošināšanai. Platforma ir paredzēta reāllaika mikropakalpojumu lietojumprogrammu izveidei, izmantojot klasterizācijas iespēju, kas ļauj savienot divas vai vairākas instances vienādranga veidā.
Projektu attīsta Latvijas uzņēmums SIA Mavimax.

Enduro/X izmanto atmiņā uzturētas POSIX vai System V kodola rindas, kas nodrošina augstu transakciju caurlaidspēju starp procesiem un starp serveriem.
Platforma izpildlaika sistēmās ļauj uzlikt ielāpus bez pakalpojuma pārtraukuma. Sistēma pārrauga procesus un restartē tos pēc avārijas vai pakarināšanas. Sistēmas konfigurāciju var dinamiski pārlādēt.

Enduro/X ir rakstīta C valodā un nodrošina C un C++ dabiskos lietojumprogrammu saskarnes (API). 
Sistēmas pamatā ir sevi pierādījuši API, piemēram, X/Open grupas XATMI un XA. Enduro/X ir Oracle Tuxedo paplašināts aizstājējs.

Vēsture 
Enduro/X izstrāde tika sākta 2009. gadā. Tas bija slēgta pirmoda projekts Latvijas uzņēmumā SIA ATR Baltic. Pirmie klienti (galvenokārt bankas) tika iekļauti sistēmā 2012. gada beigās, kad Enduro/X sasniedza versiju 1.0.

Projekta pirmkods tika atvērts 2015. gadā ar versiju v2.3.2. No tā brīža visa izstrāde kļuva pieejama publiski. Līdz versijai 6.0 Enduro/X bija pieejams ar licenci GNU GPLv2, bet sākot ar 6.0 versiju projekts tika izlaists ar GNU AGPLv3 licenci.

2017. gada februārī ATR Baltic Enduro/X projektu pārdeva SIA Mavimax ar pilnām tiesībām uz pirmkodu un noslēgtajiem līgumiem.

Tehnoloģija 
Sākot no 2.6.12 versijas, Enduro/X darbojas uz Linux kodoliem. Viskritiskākā Linux iezīme ir epoll() POSIX rindās. Šī Linux funkcionalitāte nodrošina mehānismu "viena rinda — vairāki serveri", kur Enduro/X serveri aptaujā rindas. Enduro/X izstrādātāji panāca EPOLLEXCLUSIVE karoga iekļaušanu Linux kodolā (sākot ar versiju 4.5). Ielāps uzlaboja Enduro/X atbildi gadījumā, ja simtiem izpildītāju sniedz vienu un to pašu pakalpojumu. Īpaši kodols vairs neraisa "ganāmpulka" tipa uzvedību, sākot darboties visiem rindā gaidošajiem binārajiem kodiem. Tagad tiek pamodināts tikai viens pakalpojuma izsaukuma uztvērējs. Dažās darba slodzēs Enduro/X lietojumprogrammas saņem ievērojamu pastiprinājumu. Testa pārbaudēs ielāps palielināja darba slodzes veiktspēju no 860 sekundēm līdz 24 sekundēm.

Sākot ar Enduro/X versiju 3.1.2 tika pievienots atbalsts FreeBSD, IBM AIX (6.1 un 7.1 versija) un Oracle Solaris V11. Versijā 3.1.2 tika ieviests eksperimentāls atbalsts Apple macOS un Cygwin. Unix platformā, kur ir pieejamas Posix rindas, tās tiek izmantotas tā, lai katram ATMI servera un servisa pārim būtu atvērta atsevišķa rinda, un zvanītāja pakalpojums izvēlētos rindu apļkārtes režīmā. Tā kā MacOS operētājsistēmā nav atbalsta Posix rindā, Enduro/X izmanto emulētas Posix rindas, kuru pamatā ir atmiņas kartēti faili tandēmā ar Posix pavediena procesa koplietotiem mutesiem. FreeBSD arī var aptaujāt Posix rindas, tādējādi Enduro/X uz FreeBSD darbojas kā Linux ar "viena rinda — vairāki serveri" (SQMS) ziņojumu izplatīšanas pieeju. FreeBSD aptauja tiek veikta ar kqueue palīdzību.

Ar versiju 6.0 IPC mehānismu vietā tiek izmantotas System V rindas Unix platformām, izņemot FreeBSD un Linux. System V rinda arī nodrošina "viena rinda — vairāki serveri" efektīvai slodzes līdzsvarošanai. Lai ielādētu līdzsvaru SQMS režīmā ar System V rindām, XATMI serveris ir jākonfigurē, lai izmantotu pieprasījuma adresi (loģiskais kanāls / rinda), kurā visi XATMI serveri reklamē vienus un tos pašus pakalpojumus. Šis rindas režīms ir pieejams Oracle Solaris un IBM AIX. MacOS joprojām tiek izmantota emulētā Posix rinda.

Īpašības 
 Uz standartiem balstīti API -— SCA, The Open Group XATMI
 Saziņas veidi: sinhrons, asinhrons, dialogrežīms, publicēt — abonēt
 Rakstīšanas buferi
 UBF (Unified Buffer Format), kas nodrošina Tuxedo FML/FML32 formāta emulēšanu; tas ir augstas veiktspējas binārā protokola buferformāts. Buferis tiek indeksēts, izmantojot bināro meklēšanu fiksētiem datu tipiem.
 STRING (teksta) bufera formāts
 CARRAY (baitu masīva) bufera formāts
 JSON bufera formāts; pieejama automātiska formāta pārvēršana starp JSON un UBF
 VIEW buferi (sākot ar versiju 5.0+). Tas paredzēts C struktūras sūtīšanai starp procesiem starpplatformu veidā. Tas ļauj arī kartēt UBF laukus uz VIEW laukiem, tādējādi palīdzot izstrādātājiem ātrāk izstrādāt lietojumprogrammas, kombinējot UBF un VIEW buferus.
 Transakciju pārvaldība — globālās transakcijas — divfāzu izpildes protokols X/Open XA
 Klasteru veidošana – pēc vienādranga principa
 Notikumu brokeris (tiek saukts arī par "publicēšana — abonēšana" ziņapmaiņu)
 Drošība — klastera saites šifrēšana ar GNU PGP struktūru
 Sistēmas procesa monitorings un pašdziedēšana (pingi un restarti)
 SOA Service kešatmiņa. XATMI pakalpojumus var iekešot LMDB datubāzē. Tādējādi nākamais pakalpojuma izsaukums no jebkura vietējā klienta saņem rezultātus tieši no kešatmiņas (galvenokārt no tiešās atmiņas nolasīšanas).
 Dinamiskā pārkonfigurēšana
 Pielāgoti servera aptaujas paplašinājumi
 XATMI apakšsistēma spēj strādāt bez galvenā lietojumprogrammu servera dēmona (ndrxd)
 Galveno lietojumprogrammu servera dēmonu (ndrxd) var restartēt (ja tas ir bojāts). Startējot tas kādu laiku ieiet mācību režīmā, apkopojot informācija par sistēmu, par to, kādi pakalpojumi darbojas utt. Pēc mācīšanās perioda tas sāk veikt normālas operācijas
 Pieejams tpforward() izsaukums
 ATMI servera pavedieni var kļūt par klientiem, un tie var izpildīt tpcall()
 ATMI izsauc taimauta pārkonfigurēšanu, izmantojot tptoutset() API izsaukumu
 Plaša reģistrēšana un atkļūdošana. Enduro/X reģistrēšanu var konfigurēt katram binārajam kodam ar dažādiem žurnāla līmeņiem. Tā kā ATMI serverus var startēt ārpus lietojumprogrammu servera, tos ir iespējams atkļūdot no programmēšanas vides vai ar īpašiem rīkiem, piemēram, valgrind.
 Kvalitātes nodrošināšanai projekts izmanto automatizētu vienību testēšanu un integrēšanas testēšanu
 Iebūvēta ATMI pakalpojumu profilēšana
 Vides mainīgos XATMI servera procesiem var atjaunināt bez pilnas lietojumprogrammas atsāknēšanas
 Ģenēriskais klienta procesa monitors (cpm). Apakšsistēma ļauj palaist, apstādināt un monitorēt klienta izpildprogrammas. ja klienta procesā notiek avārija, cpm to atsāks.
 Sākot ar versiju 5.2 Enduro/X nodrošina konfigurācijas datu šifrēšanu, tāpēc programmatūra, kas ir iebūvēta Enduro/X augšdaļā, var atbilst maksājumu karšu nozares datu drošības standartam (Payment Card Industry Data Security Standard — PCI/DSS).

Veiktspēja 
Enduro/X starpprogrammatūrai ir izveidoti vairāki etalonuzdevumi, kas liecina, ka tā diezgan labi konkurē ar Oracle Tuxedo un ZeroMQ. Enduro/X bija par 30 % ātrāks nekā Tuxedo 56 KB datu bloku diapazonā. Enduro/X bija ievērojami ātrāks nekā ZeroMQ 10 — 20 KB diapazonā. Arī testi ar RabbitMQ parādīja Enduro/X stiprumu un apsteidza konkurentu. RPC izsaukumiem Enduro/X bija vairākas reizes priekšā, vienīgi tikai izsaukumu nosūtīšanā RabbitMQ bija nedaudz tuvāk Enduro/X.

Apakšsistēmas 
Enduro/X satur dažādus apakšmoduļus, kas paplašina lietojumprogrammu servera un starpprogrammatūras funkcionalitāti.

Rindošanas apakšsistēma 
Enduro/X nodrošina rindošanas apakšsistēmu ar nosaukumu TMQ (Transactional Message Queue). Šī iespēja nodrošina pastāvīgas rindas, kas ļauj lietojumprogrammām skaidri iekļaut rindas un dzēst ziņojumus no nosauktajām rindām. Rindas var kārtot pēc ziņojuma rindā ievietošanas laika pēc LIFO vai FIFO sistēmas. Rindas pārvalda ar XA saderīgs resursu pārvaldnieks, kas ļauj rindu operācijām piedalīties dalītās transakcijās. Tiek nodrošināts automatizēts rindas pāradresēšanas līdzeklis, kas noņems ierakstus no rindas un izsauks saistītos Enduro/X ATMI pakalpojumus, novietojot atbildes ziņojumu saistītā atbildes rindā un  neveiksmīgos ziņojumus kļūmju rindu.

Konfigurācijas pakalpojumi 
Enduro/X piedāvā lietojumprogrammām izmantot uz ini faila balstītu konfigurācijas lasīšanu, izmantojot īpašu XATMI serveri, kas ir pakotnē ar nosaukumu cconfsrv. Izmantojot standarta tpcall(), parasti lietotāja lietojumprogramma var lasīt konfigurācijas failus (var būt atsevišķi ini faili vai mape ar tiem). Metode ļauj izmantot apakšsadaļas ar atslēgas un vērtības pārmantošanu no galvenās sadaļas.

Izsekošanas reģistrēšanas pakalpojumi 
Enduro/X ieviesa jaunu API funkciju kopu ar nosaukumu tplog. Tas ļauj lietotājam izmantot tās pašas uz C balstītas augstas veiktspējas atkļūdošanas reģistrēšanas iespējas, ko Enduro/X izmanto iekšēji. Visu reģistrēšanu var novirzīt pēc pavedienu bāzes failiem. Ir arī API pieprasījumu reģistrēšanai, kas nozīmē, ka lietotājs un Enduro/X var veikt reģistrēšanu atsevišķos failos katram pieprasījumam (piemēram, reģistrēt pēc sesijas identifikatora, pēc lietotājvārda utt.).

Application Server for Go 
Application Server for Go (ASG) ir saistījumu projekts virs Enduro/X. Autori šos saistījumus uzskata par lietojumprogrammu serveri Go valodai, jo Golang projekti ir saistīti statiski, un pēc noklusējuma tiem nav tādu elementu kā komponenti. Enduro/X ļauj palaist atsevišķus izpildāmos bināros kodus, kas ir bezstatusa pakalpojumui. Šos pakalpojumus var atkārtoti ielādēt bez pakalpojuma pārtraukuma. Platforma arī ļauj veikt dalītu transakciju apstrādi, izmantojot Golang. Izstrādātāji nodrošina Go valodai modificētus Oracle DB OCI8 draiverus, kas atbalsta XA transakcijas.

Enduro/X-PHP 
PHP5 valodai ir pieejami pilna klienta saistījumi. Klienta PHP procesi var kompilēt ielādējamu moduli vai kompilēt Enduro/X procesu PHP iekšienē. Ja PHP process darbojas kā klients, tam jāatrodas Enduro/X lietojumprogrammu vidē, ko var veikt, kad lietojumprogramma tiek viesota pie tā paša lietotāja, kur darbojas PHP lietotne (piemēram Apache), vai PHP lietotājam, kas izveido mikrovidi, kura, izmantojot tpbridge procesu, tālāk savienojas ar galveno lietojumprogrammu serveri.

Enduro/X-Perl 
Perl skriptēšanas valodai ir pieejami klienta un servera saistījumi.

Ārējās saites 
 Enduro/X
 Mavimax

Ziņojumapmaiņas starpprogrammatūra
Latvijā izstrādāta programmatūra