Enduro/X

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.

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.