Delta: datu sinhronizÄcijas un bagÄtinÄÅ”anas platforma
Gaidot jaunas plÅ«smas uzsÄkÅ”anu ar Ätrumu Datu inženieris Esam sagatavojuÅ”i interesanta materiÄla tulkojumu.
PÄrskatiet
MÄs runÄsim par diezgan populÄru modeli, kurÄ lietojumprogrammas izmanto vairÄkus datu krÄtuves, kur katrs veikals tiek izmantots saviem mÄrÄ·iem, piemÄram, lai saglabÄtu datu kanonisko formu (MySQL utt.), nodroÅ”inÄtu uzlabotas meklÄÅ”anas iespÄjas (ElasticSearch, utt.) .), keÅ”atmiÅa (Memcached utt.) un citi. Parasti, izmantojot vairÄkus datu krÄtuves, viens no tiem darbojas kÄ primÄrais, bet citi kÄ atvasinÄtie krÄtuvi. VienÄ«gÄ problÄma ir Å”o datu krÄtuves sinhronizÄÅ”ana.
MÄs apskatÄ«jÄm vairÄkus dažÄdus modeļus, kas mÄÄ£inÄja atrisinÄt vairÄku veikalu sinhronizÄcijas problÄmu, piemÄram, dubultÄ rakstÄ«Å”ana, izplatÄ«ti darÄ«jumi utt. TomÄr Ŕīm pieejÄm ir bÅ«tiski ierobežojumi attiecÄ«bÄ uz lietoÅ”anu reÄlajÄ dzÄ«vÄ, uzticamÄ«bu un apkopi. Papildus datu sinhronizÄcijai dažÄm lietojumprogrammÄm ir nepiecieÅ”ams arÄ« bagÄtinÄt datus, izsaucot ÄrÄjos pakalpojumus.
Delta tika izstrÄdÄta, lai atrisinÄtu Ŕīs problÄmas. Galu galÄ Delta nodroÅ”ina konsekventu, uz notikumiem balstÄ«tu platformu datu sinhronizÄÅ”anai un bagÄtinÄÅ”anai.
EsoÅ”ie risinÄjumi
DubultÄ ieeja
Lai sinhronizÄtu divus datu veikalus, varat izmantot duÄlo rakstÄ«Å”anu, kas raksta vienÄ krÄtuvÄ un tÅ«lÄ«t pÄc tam raksta otrÄ. Pirmo ierakstu var mÄÄ£inÄt atkÄrtoti un otro var pÄrtraukt, ja pirmais neizdodas pÄc tam, kad ir izsmelts mÄÄ£inÄjumu skaits. TomÄr, ja neizdodas rakstÄ«t uz otro krÄtuvi, abi datu krÄtuves var tikt nesinhronizÄtas. Å o problÄmu parasti atrisina, izveidojot atkopÅ”anas procedÅ«ru, kas var periodiski atkÄrtoti pÄrsÅ«tÄ«t datus no pirmÄs krÄtuves uz otro vai darÄ«t to tikai tad, ja datos tiek konstatÄtas atŔķirÄ«bas.
ProblÄmas:
AtkopÅ”anas procedÅ«ras veikÅ”ana ir Ä«paÅ”s darbs, ko nevar izmantot atkÄrtoti. TurklÄt dati starp krÄtuves vietÄm netiek sinhronizÄti, lÄ«dz tiek veikta atjaunoÅ”anas procedÅ«ra. RisinÄjums kļūst sarežģītÄks, ja tiek izmantoti vairÄk nekÄ divi datu krÄtuves. Visbeidzot, atjaunoÅ”anas procedÅ«ra var palielinÄt sÄkotnÄjo datu avota slodzi.
MainÄ«t žurnÄla tabulu
Ja tiek veiktas izmaiÅas tabulu kopÄ (piemÄram, ieraksta ievietoÅ”ana, atjauninÄÅ”ana un dzÄÅ”ana), izmaiÅu ieraksti tiek pievienoti žurnÄla tabulai kÄ daļa no tÄs paÅ”as transakcijas. Cits pavediens vai process pastÄvÄ«gi pieprasa notikumus no žurnÄla tabulas un ieraksta tos vienÄ vai vairÄkos datu krÄtuvÄs, ja nepiecieÅ”ams, noÅemot notikumus no žurnÄla tabulas pÄc tam, kad ieraksts ir apstiprinÄts visos veikalos.
ProblÄmas:
Å is modelis ir jÄievieÅ” kÄ bibliotÄka un ideÄlÄ gadÄ«jumÄ nemainot lietojumprogrammas kodu, kas to izmanto. Poliglota vidÄ Å”Ädas bibliotÄkas ievieÅ”anai vajadzÄtu pastÄvÄt jebkurÄ nepiecieÅ”amajÄ valodÄ, taÄu ir ļoti grÅ«ti nodroÅ”inÄt funkcionalitÄtes un uzvedÄ«bas konsekvenci dažÄdÄs valodÄs.
VÄl viena problÄma ir shÄmu izmaiÅu iegÅ«Å”ana sistÄmÄs, kas neatbalsta transakciju shÄmu izmaiÅas [1][2], piemÄram, MySQL. TÄpÄc izmaiÅu veikÅ”anas (piemÄram, shÄmas maiÅas) modelis un transakciju ierakstÄ«Å”ana izmaiÅu žurnÄla tabulÄ ne vienmÄr darbosies.
Sadalītie darījumi
IzkliedÄtÄs transakcijas var izmantot, lai sadalÄ«tu darÄ«jumu vairÄkos neviendabÄ«gos datu krÄtuvÄs, lai operÄcija bÅ«tu saistÄ«ta ar visiem izmantotajiem datu krÄtuvÄm vai netiktu saistÄ«ta nevienÄ no tiem.
ProblÄmas:
IzkliedÄtie darÄ«jumi ir ļoti liela problÄma neviendabÄ«gu datu krÄtuvÄm. PÄc savas bÅ«tÄ«bas tÄs var paļauties tikai uz iesaistÄ«to sistÄmu zemÄko kopsaucÄju. PiemÄram, XA transakcijas bloÄ·Ä izpildi, ja pieteikÅ”anÄs process neizdodas sagatavoÅ”anas posmÄ. TurklÄt XA nenodroÅ”ina strupceļa noteikÅ”anu un neatbalsta optimistiskas vienlaicÄ«bas kontroles shÄmas. TurklÄt dažas sistÄmas, piemÄram, ElasticSearch, neatbalsta XA vai jebkuru citu neviendabÄ«gu darÄ«jumu modeli. TÄdÄjÄdi rakstÄ«Å”anas atomitÄtes nodroÅ”inÄÅ”ana dažÄdÄs datu uzglabÄÅ”anas tehnoloÄ£ijÄs joprojÄm ir ļoti izaicinoÅ”s uzdevums lietojumprogrammÄm [3].
Delta
Delta tika izstrÄdÄts, lai novÄrstu esoÅ”o datu sinhronizÄcijas risinÄjumu ierobežojumus, kÄ arÄ« nodroÅ”ina datu bagÄtinÄÅ”anu lidojumÄ. MÅ«su mÄrÄ·is bija visas Ŕīs sarežģītÄ«bas novÄrst no lietojumprogrammu izstrÄdÄtÄjiem, lai viÅi varÄtu pilnÄ«bÄ koncentrÄties uz biznesa funkcionalitÄtes ievieÅ”anu. TÄlÄk mÄs aprakstÄ«sim "Filmu meklÄÅ”anu", kas ir faktiskais Netflix Delta lietoÅ”anas gadÄ«jums.
Netflix plaÅ”i izmanto mikropakalpojumu arhitektÅ«ru, un katrs mikropakalpojums parasti apkalpo viena veida datus. PamatinformÄcija par filmu ir ietverta mikropakalpojumÄ Movie Service, un saistÄ«tos datus, piemÄram, informÄciju par producentiem, aktieriem, pÄrdevÄjiem un tÄ tÄlÄk, pÄrvalda vairÄki citi mikropakalpojumi (proti, Deal Service, Talent Service un Vendor Service).
Netflix Studios biznesa lietotÄjiem bieži ir jÄmeklÄ pÄc dažÄdiem filmu kritÄrijiem, tÄpÄc viÅiem ir ļoti svarÄ«gi, lai viÅi varÄtu meklÄt visos ar filmÄm saistÄ«tajos datos.
Pirms Delta filmu meklÄÅ”anas komandai pirms filmas datu indeksÄÅ”anas vajadzÄja iegÅ«t datus no vairÄkiem mikropakalpojumiem. TurklÄt komandai bija jÄizstrÄdÄ sistÄma, kas periodiski atjauninÄtu meklÄÅ”anas indeksu, pieprasot izmaiÅas no citiem mikropakalpojumiem, pat ja izmaiÅu nav vispÄr. Å Ä« sistÄma Ätri kļuva sarežģīta un grÅ«ti uzturÄjama.
1. attÄls. Delta aptaujas sistÄma
PÄc Delta izmantoÅ”anas sistÄma tika vienkÄrÅ”ota lÄ«dz notikumiem balstÄ«tai sistÄmai, kÄ parÄdÄ«ts nÄkamajÄ attÄlÄ. CDC (Change-Data-Capture) notikumi tiek nosÅ«tÄ«ti Keystone Kafka tÄmÄm, izmantojot Delta-Connector. Delta lietojumprogramma, kas izveidota, izmantojot Delta Stream Processing Framework (pamatojoties uz Flink), saÅem CDC notikumus no tÄmas, bagÄtina tos, izsaucot citus mikropakalpojumus, un visbeidzot nodod bagÄtinÄtos datus Elasticsearch meklÄÅ”anas indeksam. Viss process notiek gandrÄ«z reÄllaikÄ, tas ir, tiklÄ«dz datu noliktavÄ tiek veiktas izmaiÅas, meklÄÅ”anas indeksi tiek atjauninÄti.
2. attÄls. Datu cauruļvads, izmantojot Delta
NÄkamajÄs sadaļÄs mÄs aprakstÄ«sim Delta-Connector darbÄ«bu, kas savienojas ar krÄtuvi un publicÄ CDC notikumus transporta slÄnim, kas ir reÄllaika datu pÄrraides infrastruktÅ«ra, kas marÅ”rutÄ CDC notikumus uz Kafka tÄmÄm. Un paÅ”Äs beigÄs parunÄsim par Delta straumes apstrÄdes ietvaru, ko lietojumprogrammu izstrÄdÄtÄji var izmantot datu apstrÄdei un bagÄtinÄÅ”anas loÄ£ikai.
CDC (Change-Data-Capture)
MÄs esam izstrÄdÄjuÅ”i CDC pakalpojumu ar nosaukumu Delta-Connector, kas var reÄllaikÄ uztvert veiktÄs izmaiÅas no datu krÄtuves un ierakstÄ«t tÄs straumÄ. ReÄllaika izmaiÅas tiek Åemtas no darÄ«jumu žurnÄla un krÄtuves izgÄztuvÄm. IzgÄztuves tiek izmantotas, jo darÄ«jumu žurnÄlos parasti netiek saglabÄta visa izmaiÅu vÄsture. IzmaiÅas parasti tiek serializÄtas kÄ Delta notikumi, tÄpÄc adresÄtam nav jÄuztraucas par to, no kurienes nÄk izmaiÅas.
Delta-Connector atbalsta vairÄkas papildu funkcijas, piemÄram:
IespÄja rakstÄ«t pielÄgotus izvades datus, izmantojot Kafka.
IzgÄztuves var izgÅ«t pa daļÄm, tÄpÄc neveiksmes gadÄ«jumÄ nav jÄsÄk no jauna.
Nav nepiecieÅ”ams izvietot slÄdzenes uz tabulÄm, kas ir ļoti svarÄ«gi, lai nodroÅ”inÄtu, ka mÅ«su pakalpojums nekad nebloÄ·Ä datubÄzes rakstÄ«Å”anas trafiku.
Augsta pieejamÄ«ba AWS pieejamÄ«bas zonÄs esoÅ”o lieko gadÄ«jumu dÄļ.
PaÅ”laik mÄs atbalstÄm MySQL un Postgres, tostarp izvietoÅ”anu AWS RDS un Aurora. MÄs arÄ« atbalstÄm Cassandra (multi-master). Å eit varat uzzinÄt vairÄk par Delta-Connector emuÄra ziÅa.
Kafka un transporta slÄnis
Delta notikumu transporta slÄnis ir veidots uz platformas ziÅojumapmaiÅas pakalpojuma Pamatprincips.
VÄsturiski publicÄÅ”ana pakalpojumÄ Netflix ir optimizÄta pieejamÄ«bai, nevis ilgmūžībai (skatiet tÄlÄk). iepriekÅ”Äjais raksts). Kompromiss bija iespÄjama brokeru datu neatbilstÄ«ba dažÄdos malu scenÄrijos. PiemÄram, netÄ«ras lÄ«dera vÄlÄÅ”anas ir atbildÄ«gs par to, ka adresÄtam, iespÄjams, ir dublÄti vai pazaudÄti notikumi.
Ar Delta mÄs vÄlÄjÄmies spÄcÄ«gÄkas izturÄ«bas garantijas, lai nodroÅ”inÄtu CDC notikumu piegÄdi atvasinÄtajiem veikaliem. Å im nolÅ«kam mÄs piedÄvÄjÄm Ä«paÅ”i izstrÄdÄtu Kafkas klasteru kÄ pirmÄs klases objektu. TÄlÄk esoÅ”ajÄ tabulÄ varat apskatÄ«t dažus brokeru iestatÄ«jumus:
Keystone Kafka klasteros, netÄ«ras lÄ«dera vÄlÄÅ”anas parasti tiek iekļauti, lai nodroÅ”inÄtu izdevÄja pieejamÄ«bu. Tas var izraisÄ«t ziÅojuma zudumu, ja par vadÄ«tÄju tiek izvÄlÄta nesinhronizÄta kopija. Jaunam augstas pieejamÄ«bas Kafka klasterim Ŕī opcija netÄ«ras lÄ«dera vÄlÄÅ”anas atspÄjota, lai novÄrstu ziÅojumu zudumu.
MÄs arÄ« palielinÄjÄm replikÄcijas faktors no 2 lÄ«dz 3 un minimÄlais insync replikas No 1 lÄ«dz 2. IzdevÄji, kas raksta Å”ajÄ klasterÄ«, pieprasa apstiprinÄjumu no visiem pÄrÄjiem, nodroÅ”inot, ka 2 no 3 replikÄm ir jaunÄkie izdevÄja nosÅ«tÄ«tie ziÅojumi.
Kad starpnieka instances darbÄ«ba tiek pÄrtraukta, veco aizstÄj ar jaunu. TomÄr jaunajam brokerim bÅ«s jÄpanÄk nesinhronizÄtÄs kopijas, kas var ilgt vairÄkas stundas. Lai samazinÄtu Ŕī scenÄrija atkopÅ”anas laiku, lokÄlo brokeru disku vietÄ sÄkÄm izmantot bloku datu krÄtuvi (Amazon Elastic Block Store). Kad jauna instance aizstÄj pÄrtraukto brokera instanci, tÄ pievieno EBS sÄjumu, kas bija pÄrtrauktajai instancei, un sÄk saÅemt jaunus ziÅojumus. Å is process samazina neizpildÄ«to uzkrÄjumu dzÄÅ”anas laiku no stundÄm lÄ«dz minÅ«tÄm, jo āājaunajai instancei vairs nav jÄreplicÄ no tukÅ”a stÄvokļa. KopumÄ atseviŔķi uzglabÄÅ”anas un brokeru dzÄ«ves cikli ievÄrojami samazina starpnieka maiÅas ietekmi.
Lai vÄl vairÄk palielinÄtu datu piegÄdes garantiju, mÄs izmantojÄm ziÅojumu izsekoÅ”anas sistÄma lai atklÄtu ziÅojumu zudumu ekstremÄlos apstÄkļos (piemÄram, pulksteÅa desinhronizÄcija nodalÄ«juma lÄ«derÄ).
Straumes apstrÄdes ietvars
Delta apstrÄdes slÄnis ir veidots uz Netflix SPAaS platformas, kas nodroÅ”ina Apache Flink integrÄciju ar Netflix ekosistÄmu. Platforma nodroÅ”ina lietotÄja saskarni, kas pÄrvalda Flink darbu izvietoÅ”anu un Flink klasteru orÄ·estrÄÅ”anu mÅ«su Titus konteineru pÄrvaldÄ«bas platformÄ. Interfeiss arÄ« pÄrvalda darbu konfigurÄcijas un ļauj lietotÄjiem dinamiski veikt konfigurÄcijas izmaiÅas, nepÄrkompilÄjot Flink darbus.
Delta nodroÅ”ina straumes apstrÄdes sistÄmu, kuras pamatÄ ir Flink un SPAaS, ko izmanto balstÄs uz anotÄcijÄm DSL (Domain Specific Language), lai abstrakti tehniskas detaļas. PiemÄram, lai definÄtu soli, kurÄ notikumi tiks bagÄtinÄti, izsaucot ÄrÄjos pakalpojumus, lietotÄjiem ir jÄraksta sekojoÅ”ais DSL, un ietvars uz tÄ bÄzes izveidos modeli, kuru izpildÄ«s Flink.
3. attÄls. DSL bagÄtinÄÅ”anas piemÄrs DeltÄ
ApstrÄdes sistÄma ne tikai samazina mÄcÄ«Å”anÄs lÄ«kni, bet arÄ« nodroÅ”ina kopÄjas straumes apstrÄdes funkcijas, piemÄram, dublÄÅ”anas atdalÄ«Å”anu, shematizÄciju, kÄ arÄ« elastÄ«bu un elastÄ«bu, lai atrisinÄtu izplatÄ«tas darbÄ«bas problÄmas.
Delta Stream Processing Framework sastÄv no diviem galvenajiem moduļiem ā DSL un API moduļa un izpildlaika moduļa. DSL un API modulis nodroÅ”ina DSL un UDF (User-Defined-Function) API, lai lietotÄji varÄtu rakstÄ«t savu apstrÄdes loÄ£iku (piemÄram, filtrÄÅ”anu vai transformÄcijas). Runtime modulis nodroÅ”ina DSL parsÄtÄja ievieÅ”anu, kas veido DAG modeļu apstrÄdes darbÄ«bu iekÅ”Äjo attÄlojumu. Izpildes komponents interpretÄ DAG modeļus, lai inicializÄtu faktiskos Flink paziÅojumus un visbeidzot palaistu Flink lietojumprogrammu. Ietvara arhitektÅ«ra ir parÄdÄ«ta nÄkamajÄ attÄlÄ.
LietotÄji var koncentrÄties uz savu biznesa loÄ£iku, neiedziļinoties Flink vai SPAaS struktÅ«ras specifikÄ.
OptimizÄciju var veikt lietotÄjiem pÄrskatÄmÄ veidÄ, un kļūdas var novÄrst, neprasot nekÄdas izmaiÅas lietotÄja kodÄ (UDF).
Lietojumprogrammas Delta pieredze lietotÄjiem ir vienkÄrÅ”ota, jo platforma nodroÅ”ina elastÄ«bu un elastÄ«bu jau no kastes un apkopo dažÄdus detalizÄtus rÄdÄ«tÄjus, ko var izmantot brÄ«dinÄjumiem.
RažoŔanas izmantoŔana
Delta ir ražota vairÄk nekÄ gadu, un tai ir galvenÄ loma daudzÄs Netflix Studio lietojumprogrammÄs. ViÅa palÄ«dzÄja komandÄm ieviest tÄdus lietoÅ”anas gadÄ«jumus kÄ meklÄÅ”anas indeksÄÅ”ana, datu glabÄÅ”ana un uz notikumiem balstÄ«tas darbplÅ«smas. TÄlÄk ir sniegts pÄrskats par Delta platformas augsta lÄ«meÅa arhitektÅ«ru.
5. attÄls. Delta augsta lÄ«meÅa arhitektÅ«ra.
Pateicības
MÄs vÄlamies pateikties Å”Ädiem cilvÄkiem, kuri bija iesaistÄ«ti Delta izveidÄ un attÄ«stÄ«bÄ Netflix: Alens Vangs, ÄÄrlzs Džao, Džebins Jons, DžoÅ”s Snaiders, Kasturi Äaterdžī, Marks Äo, Olofs Johansons, PijuÅ”s Gojs, PraÅ”ants Ramdass, Raghurams Onti Srinivasan, Sandeep Gupta, Steven Wu, Tharanga Gamaethige, Yun Wang un Zhenzhong Xu.