Hi kollha! Jisimni Sergey Kostanbaev, fl-Iskambju qed niżviluppa l-qalba tas-sistema tal-kummerċ.
Meta l-films ta 'Hollywood juru l-Borża ta' New York, dejjem tidher hekk: folol ta 'nies, kulħadd qed jgħajjat xi ħaġa, ixejjer karti, kaos sħiħ qed jiġri. Dan qatt ma ġara hawn fuq il-Borża ta 'Moska, minħabba li l-kummerċ sar b'mod elettroniku mill-bidu nett u huwa bbażat fuq żewġ pjattaformi ewlenin - Spectra (suq forex) u ASTS (suq tal-kambju, istokk u flus). U llum irrid nitkellem dwar l-evoluzzjoni tal-arkitettura tas-sistema tal-kummerċ u l-ikklerjar tal-ASTS, dwar diversi soluzzjonijiet u sejbiet. L-istorja se tkun twila, għalhekk kelli nkissirha f'żewġ partijiet.
Aħna wieħed mill-ftit skambji fid-dinja li jinnegozjaw assi tal-klassijiet kollha u nipprovdu firxa sħiħa ta 'servizzi ta' skambju. Pereżempju, is-sena l-oħra kklassifikajna fit-tieni post fid-dinja f'termini ta 'volum ta' kummerċ tal-bonds, il-25 post fost il-boroż kollha, it-13-il post fil-kapitalizzazzjoni fost l-iskambji pubbliċi.
Għal parteċipanti kummerċjali professjonali, parametri bħall-ħin tar-rispons, l-istabbiltà tad-distribuzzjoni tal-ħin (jitter) u l-affidabbiltà tal-kumpless kollu huma kritiċi. Bħalissa qed nipproċessaw għexieren ta’ miljuni ta’ tranżazzjonijiet kuljum. L-ipproċessar ta 'kull transazzjoni mill-qalba tas-sistema jieħu għexieren ta' mikrosekondi. Naturalment, l-operaturi tal-mowbajl lejlet l-Ewwel tas-Sena jew il-magni tat-tiftix nfushom għandhom ammont ta 'xogħol ogħla minn tagħna, iżda f'termini ta' xogħol, flimkien mal-karatteristiċi imsemmija hawn fuq, ftit jistgħu jqabblu magħna, jidhirli. Fl-istess ħin, huwa importanti għalina li s-sistema ma tonqosx għal sekonda, taħdem b'mod assolut b'mod stabbli, u l-utenti kollha jkunu fuq l-istess livell.
Ftit storja
Fl-1994, is-sistema Awstraljana ASTS ġiet imnedija fuq il-Moska Interbank Currency Exchange (MICEX), u minn dak il-mument tista 'tingħadd l-istorja Russa tal-kummerċ elettroniku. Fl-1998, l-arkitettura tal-iskambju ġiet modernizzata biex tintroduċi l-kummerċ bl-Internet. Minn dak iż-żmien 'l hawn, il-veloċità tal-implimentazzjoni ta' soluzzjonijiet ġodda u bidliet arkitettoniċi fis-sistemi u s-sottosistemi kollha ilha biss qed tikseb momentum.
F'dawk is-snin, is-sistema ta 'skambju ħadmet fuq ħardwer hi-end - servers HP Superdome 9000 ultra-affidabbli (mibnija fuq il-
Iżda minn madwar l-2010, tfaċċa fenomenu msejjaħ kummerċ ta 'frekwenza għolja (HFT), jew kummerċ ta' frekwenza għolja - fi kliem sempliċi, robots tal-borża. F'2,5 snin biss, it-tagħbija fuq is-servers tagħna żdiedet 140 darba.
Kien impossibbli li tiflaħ tagħbija bħal din bl-arkitettura u t-tagħmir l-antik. Kien meħtieġ li b'xi mod tadatta.
Bidu
It-talbiet lis-sistema tal-iskambju jistgħu jinqasmu f'żewġ tipi:
- Transazzjonijiet. Jekk trid tixtri dollari, ishma jew xi ħaġa oħra, tibgħat transazzjoni lis-sistema tal-kummerċ u tirċievi tweġiba dwar is-suċċess.
- Talbiet ta' informazzjoni. Jekk trid issir taf il-prezz kurrenti, ara l-ktieb tal-ordnijiet jew l-indiċi, imbagħad ibgħat talbiet għall-informazzjoni.
Skematikament, il-qalba tas-sistema tista 'tinqasam fi tliet livelli:
- Il-livell tal-klijent, li fih jaħdmu s-sensara u l-klijenti. Kollha jinteraġixxu ma' servers ta' aċċess.
- Servers Gateway huma servers caching li lokalment jipproċessaw it-talbiet kollha għall-informazzjoni. Trid tkun taf bi liema prezz qed jinnegozjaw bħalissa l-ishma ta’ Sberbank? It-talba tmur lis-server tal-aċċess.
- Imma jekk trid tixtri ishma, allura t-talba tmur lis-server ċentrali (Trade Engine). Hemm server wieħed bħal dan għal kull tip ta 'suq, għandhom rwol vitali, huwa għalihom li ħloqna din is-sistema.
Il-qalba tas-sistema tal-kummerċ hija database għaqlija fil-memorja li fiha t-tranżazzjonijiet kollha huma tranżazzjonijiet ta 'skambju. Il-bażi kienet miktuba f'C, l-uniċi dipendenzi esterni kienu l-librerija libc u ma kien hemm l-ebda allokazzjoni ta 'memorja dinamika. Biex tnaqqas il-ħin tal-ipproċessar, is-sistema tibda b'sett statiku ta 'arrays u b'rilokazzjoni statika tad-dejta: l-ewwel, id-dejta kollha għall-ġurnata kurrenti titgħabba fil-memorja, u ma jitwettaq l-ebda aċċess għad-diska, ix-xogħol kollu jitwettaq biss fil-memorja. Meta s-sistema tibda, id-data ta 'referenza kollha hija diġà magħżula, għalhekk it-tfittxija taħdem b'mod effiċjenti ħafna u tieħu ftit ħin fir-runtime. It-tabelli kollha huma magħmula b'listi u siġar intrużivi għal strutturi dinamiċi tad-dejta sabiex ma jeħtiġux allokazzjoni tal-memorja waqt ir-runtime.
Ejja ngħaddu fil-qosor fuq l-istorja tal-iżvilupp tas-sistema tal-kummerċ u tal-ikklerjar tagħna.
L-ewwel verżjoni tal-arkitettura tas-sistema tal-kummerċ u tal-ikklerjar kienet mibnija fuq l-hekk imsejħa interazzjoni Unix: intużaw memorja, semafori u kjuwijiet kondiviżi, u kull proċess kien jikkonsisti f'ħajt wieħed. Dan l-approċċ kien mifrux fil-bidu tad-disgħinijiet.
L-ewwel verżjoni tas-sistema kien fiha żewġ livelli ta 'Gateway u server ċentrali tas-sistema tal-kummerċ. Il-fluss tax-xogħol kien bħal dan:
- Il-klijent jibgħat talba, li tilħaq il-Gateway. Tiċċekkja l-validità tal-format (iżda mhux id-dejta nnifisha) u tirrifjuta tranżazzjonijiet mhux korretti.
- Jekk tkun intbagħtet talba għall-informazzjoni, din tiġi eżegwita lokalment; jekk qed nitkellmu dwar tranżazzjoni, allura hija ridiretta lejn is-server ċentrali.
- Il-magna tal-kummerċ imbagħad tipproċessa t-tranżazzjoni, timmodifika l-memorja lokali, u tibgħat tweġiba għat-tranżazzjoni u t-tranżazzjoni nnifisha għar-replikazzjoni bl-użu ta 'magna ta' replikazzjoni separata.
- Il-Gateway jirċievi r-rispons min-nodu ċentrali u jibgħatha lill-klijent.
- Wara xi żmien, il-Gateway jirċievi t-tranżazzjoni permezz tal-mekkaniżmu ta 'replikazzjoni, u din id-darba jesegwixxiha lokalment, u jibdel l-istrutturi tad-dejta tiegħu sabiex it-talbiet għall-informazzjoni li jmiss juru l-aħħar data.
Fil-fatt, jiddeskrivi mudell ta 'replikazzjoni li fih il-Gateway irreplika kompletament l-azzjonijiet imwettqa fis-sistema tal-kummerċ. Kanal ta 'replikazzjoni separata żgurat li t-tranżazzjonijiet kienu esegwiti fl-istess ordni fuq nodi ta' aċċess multipli.
Peress li l-kodiċi kien b'ħajt wieħed, intużat skema klassika bi frieket tal-proċess biex taqdi ħafna klijenti. Madankollu, kien jiswa ħafna flus biex id-database kollha kemm hi, għalhekk intużaw proċessi ta 'servizz ħfief li ġabru pakketti minn sessjonijiet TCP u ttrasferihom għal kju wieħed (SystemV Message Queue). Gateway u Trade Engine ħadmu biss ma 'dan il-kju, u ħadu tranżazzjonijiet minn hemm għall-eżekuzzjoni. Ma kienx aktar possibbli li tintbagħat tweġiba għaliha, għax ma kienx ċar liema proċess tas-servizz kellu jaqrah. Allura aħna rrikorrejna għal trick: kull proċess forked ħoloq kju ta 'rispons għalih innifsu, u meta talba daħlet fil-kju deħlin, tikketta għall-kju ta' rispons ġiet miżjuda immedjatament magħha.
L-ikkupjar kostanti ta' ammonti kbar ta' dejta minn kju għal kju ħoloq problemi, speċjalment tipiċi għal talbiet għal informazzjoni. Għalhekk, użajna trick ieħor: minbarra l-kju tar-rispons, kull proċess ħoloq ukoll memorja kondiviża (SystemV Shared Memory). Il-pakketti nfushom tpoġġew fiha, u tikketta biss kienet maħżuna fil-kju, li tippermetti li wieħed isib il-pakkett oriġinali. Dan għen biex tinħażen id-dejta fil-cache tal-proċessur.
SystemV IPC jinkludi utilitajiet biex tara l-istat tal-kju, il-memorja u l-oġġetti tas-semafori. Użajna dan b'mod attiv biex nifhmu x'kien qed jiġri fis-sistema f'mument partikolari, fejn akkumulaw il-pakketti, x'kien imblukkat, eċċ.
L-ewwel modernizzazzjonijiet
L-ewwelnett, neħles mill-Bieb ta 'proċess wieħed. L-iżvantaġġ sinifikanti tagħha kien li setgħet tieħu ħsieb jew tranżazzjoni ta' replikazzjoni waħda jew talba waħda ta' informazzjoni minn klijent. U hekk kif it-tagħbija tiżdied, Gateway se jieħu aktar żmien biex jipproċessa t-talbiet u mhux se jkun jista 'jipproċessa l-fluss ta' replikazzjoni. Barra minn hekk, jekk il-klijent bagħat tranżazzjoni, allura għandek bżonn biss li tiċċekkja l-validità tagħha u tibgħatha aktar. Għalhekk, sostitwijna l-proċess Gateway wieħed b'komponenti multipli li jistgħu jaħdmu b'mod parallel: informazzjoni b'ħafna ħajt u proċessi ta 'tranżazzjoni li jaħdmu b'mod indipendenti minn xulxin fuq żona ta' memorja kondiviża bl-użu ta 'qfil RW. U fl-istess ħin daħħalna proċessi ta’ dispaċċ u replikazzjoni.
Impatt tal-Kummerċ ta' Frekwenza Għolja
Il-verżjoni ta 'hawn fuq tal-arkitettura kienet teżisti sal-2010. Sadanittant, ma konna aktar sodisfatti bil-prestazzjoni tas-servers HP Superdome. Barra minn hekk, l-arkitettura PA-RISC kienet prattikament mejta; il-bejjiegħ ma offra l-ebda aġġornament sinifikanti. Bħala riżultat, bdejna nimxu minn HP UX/PA RISC għal Linux/x86. It-tranżizzjoni bdiet bl-adattament tas-servers ta 'aċċess.
Għaliex kellna nerġgħu nbiddlu l-arkitettura? Il-fatt hu li l-kummerċ ta 'frekwenza għolja biddel b'mod sinifikanti l-profil tat-tagħbija fuq il-qalba tas-sistema.
Ejja ngħidu li għandna tranżazzjoni żgħira li kkawżat bidla sinifikanti fil-prezz - xi ħadd xtara nofs biljun dollaru. Wara ftit millisekondi, il-parteċipanti kollha tas-suq jinnutaw dan u jibdew jagħmlu korrezzjoni. Naturalment, it-talbiet jingħaqdu fi kju enormi, li s-sistema se tieħu ħafna żmien biex tikklerja.
F'dan l-intervall ta '50 ms, il-veloċità medja hija ta' madwar 16-il elf transazzjoni kull sekonda. Jekk innaqqsu t-tieqa għal 20 ms, niksbu veloċità medja ta '90 elf tranżazzjoni kull sekonda, b'200 elf tranżazzjoni fil-quċċata. Fi kliem ieħor, it-tagħbija mhix kostanti, b'tifqigħ f'daqqa. U l-kju tat-talbiet għandu dejjem jiġi pproċessat malajr.
Imma għaliex hemm kju għal kollox? Għalhekk, fl-eżempju tagħna, ħafna utenti nnotaw il-bidla fil-prezz u bagħtu tranżazzjonijiet kif xieraq. Jaslu għand Gateway, jisserializzahom, jistabbilixxi ċertu ordni u jibgħathom lin-netwerk. Ir-routers iħaffu l-pakketti u jgħadduhom. Li l-pakkett tiegħu wasal l-ewwel, dik it-tranżazzjoni "rebħet". Bħala riżultat, il-klijenti tal-kambju bdew jinnutaw li jekk l-istess tranżazzjoni ntbagħtet minn diversi Gateways, allura ċ-ċansijiet tal-ipproċessar rapidu tagħha żdiedu. Dalwaqt, robots tal-iskambju bdew jibbumbardjaw Gateway b'talbiet, u qamet valanga ta 'tranżazzjonijiet.
Rawnd ġdid ta 'evoluzzjoni
Wara testijiet u riċerka estensivi, aħna qalbu għall-qalba tas-sistema operattiva f'ħin reali. Għal dan għażilna RedHat Enterprise MRG Linux, fejn MRG tfisser grid ta' messaġġi f'ħin reali. Il-vantaġġ tal-irqajja f'ħin reali huwa li jottimizzaw is-sistema għall-eżekuzzjoni l-aktar mgħaġġla possibbli: il-proċessi kollha huma allinjati fi kju FIFO, il-qlub jistgħu jiġu iżolati, l-ebda ejections, it-tranżazzjonijiet kollha huma pproċessati f'sekwenza stretta.
Aħmar - taħdem bi kju f'qalba regolari, aħdar - taħdem f'qalba f'ħin reali.
Iżda l-kisba ta' latenza baxxa fuq servers regolari mhix daqshekk faċli:
- Il-mod SMI, li fl-arkitettura x86 hija l-bażi biex taħdem ma 'periferali importanti, tinterferixxi ħafna. L-ipproċessar ta 'kull tip ta' avvenimenti ta 'hardware u l-ġestjoni ta' komponenti u apparati jitwettaq mill-firmware fl-hekk imsejjaħ mod trasparenti SMI, li fih is-sistema operattiva ma tarax x'qed jagħmel il-firmware xejn. Bħala regola, il-bejjiegħa ewlenin kollha joffru estensjonijiet speċjali għal servers tal-firmware li jippermettu li jitnaqqas l-ammont ta 'proċessar SMI.
- M'għandux ikun hemm kontroll dinamiku tal-frekwenza tal-proċessur, dan iwassal għal ħin ta 'waqfien addizzjonali.
- Meta r-reġistru tas-sistema tal-fajl jitlaħlaħ, ċerti proċessi jseħħu fil-qalba li jikkawżaw dewmien imprevedibbli.
- Trid tagħti attenzjoni għal affarijiet bħal CPU Affinity, Interrupt affinity, NUMA.
Irrid ngħid li s-suġġett tat-twaqqif ta 'hardware u kernel Linux għall-ipproċessar f'ħin reali jistħoqqlu artikolu separat. Għaddejna ħafna ħin nesperimentaw u nirriċerkaw qabel ma ksibna riżultat tajjeb.
Meta nimxu minn servers PA-RISC għal x86, prattikament ma kellniex għalfejn nibdlu ħafna l-kodiċi tas-sistema, aħna biss addattajna u kkonfigurajna mill-ġdid. Fl-istess ħin, irranġajna diversi bugs. Pereżempju, il-konsegwenzi tal-fatt li PA RISC kienet sistema Big endian, u x86 kienet sistema Little endian, ħarġu malajr: pereżempju, id-dejta nqrat ħażin. Il-bug aktar diffiċli kien li PA RISC juża
Wara li qalbet għal x86, il-prestazzjoni żdiedet kważi tliet darbiet, il-ħin medju tal-ipproċessar tat-tranżazzjonijiet naqas għal 60 μs.
Ejja issa nagħtu ħarsa aktar mill-qrib lejn liema bidliet ewlenin saru fl-arkitettura tas-sistema.
Riżerva epika sħuna
Meta qlib għal servers tal-komoditajiet, konna konxji li kienu inqas affidabbli. Għalhekk, meta ħoloq arkitettura ġdida, aħna a priori assumejna l-possibbiltà ta 'falliment ta' nodu wieħed jew aktar. Għalhekk, kienet meħtieġa sistema ta 'standby sħuna li tista' taqleb malajr ħafna għal magni tal-backup.
Barra minn hekk, kien hemm rekwiżiti oħra:
- Taħt l-ebda ċirkostanza m'għandek titlef tranżazzjonijiet ipproċessati.
- Is-sistema trid tkun assolutament trasparenti għall-infrastruttura tagħna.
- Il-klijenti m'għandhomx jaraw konnessjonijiet waqgħu.
- Ir-riżervi m'għandhomx jintroduċu dewmien sinifikanti minħabba li dan huwa fattur kritiku għall-iskambju.
Meta ħloqna sistema ta 'standby sħuna, aħna ma kkunsidrawx xenarji bħal dawn bħala fallimenti doppji (per eżempju, in-netwerk fuq server wieħed waqaf jaħdem u s-server prinċipali ffriżat); ma kkunsidrax il-possibbiltà ta' żbalji fis-softwer minħabba li huma identifikati waqt l-ittestjar; u ma kkunsidrax l-operat ħażin tal-ħardwer.
Bħala riżultat, wasalna għall-iskema li ġejja:
- Is-server prinċipali interaġixxa direttament mas-servers tal-Gateway.
- It-tranżazzjonijiet kollha riċevuti fuq is-server prinċipali ġew istantanjament replikati fis-server backup permezz ta 'kanal separat. L-arbitru (Gvernatur) ikkoordina l-bidla jekk inqalgħu xi problemi.
- Is-server prinċipali pproċessa kull tranżazzjoni u stenna konferma mis-server tal-backup. Biex iżżomm il-latenza għal minimu, evitajna li nistennew it-tranżazzjoni biex titlesta fuq is-server tal-backup. Peress li ż-żmien li damet biex tranżazzjoni tivvjaġġa tul in-netwerk kien komparabbli mal-ħin tal-eżekuzzjoni, ma ġiet miżjuda l-ebda latenza addizzjonali.
- Aħna nistgħu niċċekkjaw biss l-istatus tal-ipproċessar tas-servers prinċipali u ta 'backup għat-tranżazzjoni preċedenti, u l-istatus tal-ipproċessar tat-tranżazzjoni attwali ma kienx magħruf. Peress li konna għadna nużaw proċessi b'ħajt wieħed, l-istennija għal rispons minn Backup kien inaqqas il-fluss kollu tal-ipproċessar, għalhekk għamilna kompromess raġonevoli: ivverifikajna r-riżultat tat-tranżazzjoni preċedenti.
L-iskema ħadmet kif ġej.
Ejja ngħidu li s-server ewlieni jieqaf jirrispondi, iżda l-Biebijiet ikomplu jikkomunikaw. Isseħħ timeout fuq is-server tal-backup, jikkuntattja lill-Gvernatur, li jassenjah ir-rwol tas-server prinċipali, u l-Biebijiet kollha jaqilbu għas-server prinċipali ġdid.
Jekk is-server prinċipali jerġa 'jiġi onlajn, iqajjem ukoll timeout intern, minħabba li ma kien hemm l-ebda sejħiet lis-server mill-Gateway għal ċertu żmien. Imbagħad idur ukoll lejn il-Gvernatur, u jeskludih mill-iskema. Bħala riżultat, l-iskambju jaħdem ma 'server wieħed sa tmiem il-perjodu tal-kummerċ. Peress li l-probabbiltà ta' falliment tas-server hija pjuttost baxxa, din l-iskema kienet ikkunsidrata pjuttost aċċettabbli; ma kienx fiha loġika kumplessa u kienet faċli biex tiġi ttestjata.
Għandha titkompla.
Sors: www.habr.com