Delta: Platforma e sinkronizimit dhe pasurimit të të dhënave

Në pritje të nisjes së një fluksi të ri në normë "Inxhinier i të dhënave" Ne kemi përgatitur një përkthim të materialit interesant.

Delta: Platforma e sinkronizimit dhe pasurimit të të dhënave

Rishikimi

Ne do të flasim për një model mjaft të njohur me të cilin aplikacionet përdorin shumë dyqane të dhënash, ku çdo dyqan përdoret për qëllimet e veta, për shembull, për të ruajtur formën kanonike të të dhënave (MySQL, etj.), për të ofruar aftësi të avancuara kërkimi (ElasticSearch, etj.) .), caching (Memcached, etj.) dhe të tjera. Në mënyrë tipike, kur përdorni shumë dyqane të dhënash, njëra prej tyre vepron si ruajtja kryesore dhe të tjerët si depo derivatesh. Problemi i vetëm është se si të sinkronizohen këto depo të të dhënave.

Ne shikuam një sërë modelesh të ndryshme që u përpoqën të zgjidhnin problemin e sinkronizimit të dyqaneve të shumta, të tilla si shkrime të dyfishta, transaksione të shpërndara, etj. Megjithatë, këto qasje kanë kufizime të rëndësishme për sa i përket përdorimit në jetën reale, besueshmërisë dhe mirëmbajtjes. Përveç sinkronizimit të të dhënave, disa aplikacione gjithashtu duhet të pasurojnë të dhënat duke thirrur shërbime të jashtme.

Delta u zhvillua për të zgjidhur këto probleme. Delta në fund të fundit ofron një platformë të qëndrueshme, të drejtuar nga ngjarjet për sinkronizimin dhe pasurimin e të dhënave.

Zgjidhjet ekzistuese

Hyrja e dyfishtë

Për të mbajtur dy depo të dhënash të sinkronizuara, mund të përdorni shkrimin e dyfishtë, i cili shkruan në një dyqan dhe më pas shkruan në tjetrin menjëherë më pas. Regjistrimi i parë mund të riprovohet dhe i dyti mund të ndërpritet nëse i pari dështon pasi të jetë shteruar numri i përpjekjeve. Megjithatë, të dy dyqanet e të dhënave mund të bëhen jashtë sinkronizimit nëse shkrimi në dyqanin e dytë dështon. Ky problem zakonisht zgjidhet duke krijuar një procedurë rikuperimi që mund të ritransferojë periodikisht të dhënat nga ruajtja e parë në të dytin, ose ta bëjë këtë vetëm nëse zbulohen dallime në të dhëna.

Problemet:

Kryerja e një procedure rikuperimi është një punë specifike që nuk mund të ripërdoret. Përveç kësaj, të dhënat ndërmjet vendndodhjeve të ruajtjes mbeten jashtë sinkronizimit derisa të kryhet procedura e rivendosjes. Zgjidhja bëhet më komplekse nëse përdoren më shumë se dy depo të dhënash. Më në fund, procedura e rivendosjes mund të shtojë ngarkesë në burimin origjinal të të dhënave.

Ndrysho tabelën e regjistrave

Kur ndodhin ndryshime në një grup tabelash (të tilla si futja, përditësimi dhe fshirja e një regjistrimi), të dhënat e ndryshimit shtohen në tabelën e regjistrit si pjesë e të njëjtit transaksion. Një fill ose proces tjetër kërkon vazhdimisht ngjarje nga tabela e regjistrave dhe i shkruan ato në një ose më shumë depo të dhënash, nëse është e nevojshme, duke hequr ngjarjet nga tabela e regjistrave pasi regjistrimi të konfirmohet nga të gjitha dyqanet.

Problemet:

Ky model duhet të zbatohet si një bibliotekë, dhe në mënyrë ideale pa ndryshuar kodin e aplikacionit që e përdor atë. Në një mjedis poliglot, një zbatim i një biblioteke të tillë duhet të ekzistojë në çdo gjuhë të nevojshme, por sigurimi i qëndrueshmërisë së funksionalitetit dhe sjelljes në të gjitha gjuhët është shumë i vështirë.

Një problem tjetër qëndron në marrjen e ndryshimeve të skemës në sisteme që nuk mbështesin ndryshimet e skemës transaksionale [1][2], të tilla si MySQL. Prandaj, modeli i bërjes së një ndryshimi (për shembull, ndryshimi i skemës) dhe regjistrimi i tij në mënyrë transaksionale në tabelën e regjistrit të ndryshimeve nuk do të funksionojë gjithmonë.

Transaksionet e Shpërndara

Transaksionet e shpërndara mund të përdoren për të ndarë një transaksion në dyqane të shumta heterogjene të të dhënave, në mënyrë që operacioni të jetë i angazhuar për të gjitha dyqanet e të dhënave të përdorura, ose nuk angazhohet për asnjë prej tyre.

Problemet:

Transaksionet e shpërndara janë një problem shumë i madh për dyqanet heterogjene të të dhënave. Nga natyra e tyre, ato mund të mbështeten vetëm në emëruesin më të ulët të përbashkët të sistemeve të përfshira. Për shembull, transaksionet XA bllokojnë ekzekutimin nëse procesi i aplikimit dështon gjatë fazës së përgatitjes. Për më tepër, XA nuk ofron zbulimin e bllokimit ose nuk mbështet skemat optimiste të kontrollit të konkurencës. Për më tepër, disa sisteme si ElasticSearch nuk mbështesin XA ose ndonjë model tjetër heterogjen transaksioni. Kështu, sigurimi i atomicitetit të shkrimit në teknologji të ndryshme të ruajtjes së të dhënave mbetet një detyrë shumë sfiduese për aplikacionet [3].

deltë

Delta u krijua për të adresuar kufizimet e zgjidhjeve ekzistuese të sinkronizimit të të dhënave dhe gjithashtu mundëson pasurimin e të dhënave në fluturim. Qëllimi ynë ishte të abstragojmë gjithë këtë kompleksitet larg zhvilluesve të aplikacioneve, në mënyrë që ata të mund të fokusohen plotësisht në zbatimin e funksionalitetit të biznesit. Më pas do të përshkruajmë "Kërkimi i Filmit", rasti aktual i përdorimit për Delta të Netflix.

Netflix përdor gjerësisht një arkitekturë mikroservice, dhe çdo mikroshërbim zakonisht shërben një lloj të dhënash. Informacioni bazë për filmin gjendet në një mikroshërbim të quajtur Shërbimi i Filmit, dhe të dhënat përkatëse, si p.sh. informacionet për prodhuesit, aktorët, shitësit, etj., menaxhohen nga disa mikroshërbime të tjera (domethënë Deal Service, Talent Service dhe Vendor Service).
Përdoruesit e biznesit në Netflix Studios shpesh duhet të kërkojnë sipas kritereve të ndryshme të filmit, prandaj është shumë e rëndësishme që ata të jenë në gjendje të kërkojnë në të gjitha të dhënat e lidhura me filmin.

Përpara Delta-s, ekipi i kërkimit të filmit duhej të tërhiqte të dhëna nga shumë mikroshërbime përpara se të indeksonte të dhënat e filmit. Përveç kësaj, ekipi duhej të zhvillonte një sistem që do të përditësonte periodikisht indeksin e kërkimit duke kërkuar ndryshime nga mikroshërbime të tjera, edhe nëse nuk do të kishte fare ndryshime. Ky sistem shpejt u bë kompleks dhe i vështirë për t'u mirëmbajtur.

Delta: Platforma e sinkronizimit dhe pasurimit të të dhënave
Figura 1. Sistemi i votimit në Delta
Pas përdorimit të Delta, sistemi u thjeshtua në një sistem të drejtuar nga ngjarjet siç tregohet në figurën e mëposhtme. Ngjarjet CDC (Change-Data-Capture) dërgohen në temat Keystone Kafka duke përdorur Delta-Connector. Një aplikacion Delta i ndërtuar duke përdorur Kornizën e Përpunimit të Rrjedhës Delta (bazuar në Flink) merr ngjarje të CDC nga një temë, i pasuron ato duke thirrur mikroshërbime të tjera dhe në fund i kalon të dhënat e pasuruara në një indeks kërkimi në Elasticsearch. I gjithë procesi zhvillohet pothuajse në kohë reale, domethënë, sapo të bëhen ndryshime në depon e të dhënave, indekset e kërkimit përditësohen.

Delta: Platforma e sinkronizimit dhe pasurimit të të dhënave
Figura 2. Tubacioni i të dhënave duke përdorur Delta
Në seksionet e mëposhtme, ne do të përshkruajmë funksionimin e Delta-Connector, i cili lidhet me hapësirën ruajtëse dhe publikon ngjarjet e CDC-së në shtresën e transportit, e cila është një infrastrukturë e transmetimit të të dhënave në kohë reale që drejton ngjarjet e CDC-së në temat e Kafkës. Dhe në fund, do të flasim për kornizën e përpunimit të rrjedhës Delta, të cilën zhvilluesit e aplikacioneve mund ta përdorin për përpunimin e të dhënave dhe logjikën e pasurimit.

CDC (Change-Data-Capture)

Ne kemi zhvilluar një shërbim CDC të quajtur Delta-Connector, i cili mund të kapë ndryshimet e kryera nga ruajtja e të dhënave në kohë reale dhe t'i shkruajë ato në një transmetim. Ndryshimet në kohë reale merren nga regjistri i transaksioneve dhe deponitë e ruajtjes. Deponitë përdoren sepse regjistrat e transaksioneve zakonisht nuk e ruajnë të gjithë historinë e ndryshimeve. Ndryshimet zakonisht serializohen si ngjarje Delta, kështu që marrësi nuk duhet të shqetësohet se nga vjen ndryshimi.

Delta-Connector mbështet disa veçori shtesë si:

  • AftĂ«sia pĂ«r tĂ« shkruar tĂ« dhĂ«na dalĂ«se tĂ« personalizuara pas KafkĂ«s.
  • AftĂ«sia pĂ«r tĂ« aktivizuar deponitĂ« manuale nĂ« çdo kohĂ« pĂ«r tĂ« gjitha tabelat, njĂ« tabelĂ« specifike ose pĂ«r çelĂ«sa primar specifik.
  • DeponitĂ« mund tĂ« merren nĂ« copa, kĂ«shtu qĂ« nuk ka nevojĂ« tĂ« filloni nga e para nĂ« rast dĂ«shtimi.
  • Nuk ka nevojĂ« tĂ« vendosni bravĂ« nĂ« tavolina, gjĂ« qĂ« Ă«shtĂ« shumĂ« e rĂ«ndĂ«sishme pĂ«r tĂ« siguruar qĂ« trafiku i shkrimit tĂ« bazĂ«s sĂ« tĂ« dhĂ«nave tĂ« mos bllokohet kurrĂ« nga shĂ«rbimi ynĂ«.
  • DisponueshmĂ«ri e lartĂ« pĂ«r shkak tĂ« rasteve tĂ« tepĂ«rta nĂ« Zonat e DisponueshmĂ«risĂ« AWS.

Aktualisht ne mbështesim MySQL dhe Postgres, duke përfshirë vendosjet në AWS RDS dhe Aurora. Ne gjithashtu mbështesim Cassandra (multi-master). Mund të mësoni më shumë detaje rreth Delta-Connector këtu blog.

Kafka dhe shtresa e transportit

Shtresa e transportit të ngjarjeve të Delta-s është ndërtuar në shërbimin e mesazheve të platformës parim baz.

Historikisht, postimi në Netflix është optimizuar për aksesueshmëri dhe jo jetëgjatësi (shih më poshtë). artikulli i mëparshëm). Shkëmbimi ishte mospërputhje e mundshme e të dhënave të ndërmjetësit në skenarë të ndryshëm të avantazhit. Për shembull, zgjedhje të papastër lideri është përgjegjës që marrësi të ketë ngjarje të kopjuara ose të humbura.

Me Delta, ne donim garanci më të forta qëndrueshmërie për të siguruar shpërndarjen e ngjarjeve të CDC në dyqanet e derivuara. Për këtë qëllim, ne propozuam një grup Kafka të projektuar posaçërisht si një objekt të klasit të parë. Ju mund të shikoni disa cilësime ndërmjetësi në tabelën më poshtë:

Delta: Platforma e sinkronizimit dhe pasurimit të të dhënave

Në grupimet Keystone Kafka, zgjedhje të papastër lideri zakonisht përfshihet për të siguruar aksesin e botuesit. Kjo mund të rezultojë në humbjen e mesazhit nëse një kopje e pasinkronizuar zgjidhet si drejtues. Për një grup të ri Kafka me disponueshmëri të lartë, opsioni zgjedhje të papastër lideri fikur për të parandaluar humbjen e mesazhit.

Ne gjithashtu u rritëm faktori i replikimit nga 2 në 3 dhe kopje minimale të insinkronizuara 1 deri në 2. Botuesit që shkruajnë në këtë grup kërkojnë pranime nga të gjithë të tjerët, duke siguruar që 2 nga 3 kopje të kenë mesazhet më aktuale të dërguara nga botuesi.

Kur një shembull ndërmjetësi përfundon, një shembull i ri zëvendëson atë të vjetër. Megjithatë, ndërmjetësi i ri do të duhet të arrijë me kopjet e pasinkronizuara, të cilat mund të zgjasin disa orë. Për të reduktuar kohën e rikuperimit për këtë skenar, ne filluam të përdorim ruajtjen e të dhënave në bllok (Amazon Elastic Block Store) në vend të disqeve lokale të ndërmjetësit. Kur një shembull i ri zëvendëson një shembull ndërmjetësi të përfunduar, ai bashkon vëllimin EBS që kishte shembulli i përfunduar dhe fillon të arrijë me mesazhe të reja. Ky proces redukton kohën e pastrimit të mbeturinave nga orë në minuta, sepse shembulli i ri nuk ka më nevojë të përsëritet nga një gjendje boshe. Në përgjithësi, magazinimi i veçantë dhe ciklet e jetës së ndërmjetësit reduktojnë ndjeshëm ndikimin e ndërrimit të ndërmjetësit.

Për të rritur më tej garancinë e shpërndarjes së të dhënave, ne përdorëm sistemi i përcjelljes së mesazheve për të zbuluar çdo humbje të mesazhit në kushte ekstreme (për shembull, desinkronizimi i orës në liderin e ndarjes).

Korniza e përpunimit të rrjedhës

Shtresa e përpunimit e Delta është ndërtuar në krye të platformës Netflix SPaaS, e cila siguron integrimin e Apache Flink me ekosistemin Netflix. Platforma ofron një ndërfaqe përdoruesi që menaxhon vendosjen e punëve Flink dhe orkestrimin e grupimeve Flink në krye të platformës sonë të menaxhimit të kontejnerëve Titus. Ndërfaqja gjithashtu menaxhon konfigurimet e punëve dhe i lejon përdoruesit të bëjnë ndryshime konfigurimi në mënyrë dinamike pa pasur nevojë të ripërpilojnë punët e Flink.

Delta ofron një kornizë përpunimi të transmetimit bazuar në Flink dhe SPaaS që përdor bazuar në shënime DSL (Gjuha specifike e domenit) për detaje teknike abstrakte. Për shembull, për të përcaktuar hapin në të cilin ngjarjet do të pasurohen duke thirrur shërbime të jashtme, përdoruesit duhet të shkruajnë DSL-në e mëposhtme dhe korniza do të krijojë një model të bazuar në të, i cili do të ekzekutohet nga Flink.

Delta: Platforma e sinkronizimit dhe pasurimit të të dhënave
Figura 3. Shembull i pasurimit në DSL në Delta

Korniza e përpunimit jo vetëm që zvogëlon kurbën e të mësuarit, por gjithashtu ofron veçori të zakonshme të përpunimit të rrjedhës, si deduplikimi, skematizimi dhe fleksibiliteti dhe elasticiteti për të zgjidhur problemet e zakonshme operacionale.

Korniza e Përpunimit të Delta Stream përbëhet nga dy module kryesore, moduli DSL & API dhe moduli Runtime. Moduli DSL & API ofron API DSL dhe UDF (User-Defined-Function) në mënyrë që përdoruesit të mund të shkruajnë logjikën e tyre të përpunimit (si filtrimi ose transformimet). Moduli Runtime ofron një implementim të një analizuesi DSL që ndërton një paraqitje të brendshme të hapave të përpunimit në modelet DAG. Komponenti Ekzekutimi interpreton modelet DAG për të inicializuar deklaratat aktuale të Flink dhe në fund të ekzekutojë aplikacionin Flink. Arkitektura e kornizës është ilustruar në figurën e mëposhtme.

Delta: Platforma e sinkronizimit dhe pasurimit të të dhënave
Figura 4. Arkitektura e Kornizës së Përpunimit të Rrjedhës Delta

Kjo qasje ka disa përparësi:

  • PĂ«rdoruesit mund tĂ« fokusohen nĂ« logjikĂ«n e tyre tĂ« biznesit pa pasur nevojĂ« tĂ« thellohen nĂ« specifikat e Flink ose strukturĂ«s SPaaS.
  • Optimizimi mund tĂ« bĂ«het nĂ« njĂ« mĂ«nyrĂ« transparente pĂ«r pĂ«rdoruesit dhe gabimet mund tĂ« rregullohen pa kĂ«rkuar ndonjĂ« ndryshim nĂ« kodin e pĂ«rdoruesit (UDF).
  • PĂ«rvoja e aplikacionit Delta Ă«shtĂ« thjeshtuar pĂ«r pĂ«rdoruesit sepse platforma ofron fleksibilitet dhe elasticitet jashtĂ« kutisĂ« dhe mbledh njĂ« sĂ«rĂ« metrikash tĂ« detajuara qĂ« mund tĂ« pĂ«rdoren pĂ«r sinjalizime.

Përdorimi i prodhimit

Delta ka qenë në prodhim për më shumë se një vit dhe luan një rol kyç në shumë aplikacione të Netflix Studio. Ajo ndihmoi ekipet të zbatonin raste të përdorimit të tillë si indeksimi i kërkimit, ruajtja e të dhënave dhe flukset e punës të drejtuara nga ngjarjet. Më poshtë është një pasqyrë e arkitekturës së nivelit të lartë të platformës Delta.

Delta: Platforma e sinkronizimit dhe pasurimit të të dhënave
Figura 5. Arkitektura e nivelit të lartë të Delta.

Mirënjohje

Ne dëshirojmë të falënderojmë njerëzit e mëposhtëm që u përfshinë në krijimin dhe zhvillimin e Delta në Netflix: Allen Wang, Charles Zhao, Jaebin Yoon, Josh Snyder, Kasturi Chatterjee, Mark Cho, Olof Johansson, Piyush Goyal, Prashanth Ramdas, Raghuram Onti Srinivasan, Sandeep Gupta, Steven Wu, Tharanga Gamaethige, Yun Wang dhe Zhenzhong Xu.

burime

  1. dev.mysql.com/doc/refman/5.7/en/implicit-commit.html
  2. dev.mysql.com/doc/refman/5.7/en/cannot-roll-back.html
  3. Martin Kleppmann, Alastair R. Beresford, Boerge Svingen: PĂ«rpunimi i ngjarjeve nĂ« internet. Komuna. ACM 62(5): 43–49 (2019). DOI: doi.org/10.1145/3312527

Regjistrohu për një webinar falas: "Mjeti i krijimit të të dhënave për ruajtjen e Amazon Redshift."

Burimi: www.habr.com