Kuidas vaatama Kassandra silmadesse ja samal ajal andmeid, stabiilsust ja usku NoSQL-i mitte kaotada

Kuidas vaatama Kassandra silmadesse ja samal ajal andmeid, stabiilsust ja usku NoSQL-i mitte kaotada

RÀÀgitakse, et elus tasub proovida kĂ”ike vĂ€hemalt korra. Ja kui olete harjunud töötama relationaalsete andmebaasidega, siis tasub NoSQL-iga praktikas tutvuda, vĂ€hemalt ĂŒldiseks arendamiseks. Praegu, tĂ€nu selle tehnoloogia kiirele arengule, on palju vastuolulisi arvamusi ja teravaid arutelusid, mis ainult suurendavad huvi.
Kui sĂŒveneda nende arutelude tuumasse, saab nĂ€ha, et need tulenevad vale lĂ€henemisviisist. Need, kes kasutavad NoSQL-andmebaase seal, kus need on vajalikud, on rahul ja saavad sellest lahendusest kĂ”ik selle eelised. Kuid eksperimenteerijad, kes loodavad sellele tehnoloogiale ligipÀÀsetavuse nimel seal, kus see ei ole sobiv, tunnevad pettumust, kaotades relationaalsete andmebaaside tugevused ilma oluliste kasudeta.

RÀÀgin meie kogemustest lahenduse rakendamisel, mis pÔhineb Cassandra andmebaasil: millega pidime silmitsi seisma, kuidas me raskest olukorrast vÀlja tulime, kas suutsime NoSQL-i kasutamisest kasu saada ja kus pidime lisama tÀiendavaid pingutusi/vahendeid.
Algne ĂŒlesanne on ehitada sĂŒsteem, mis salvestab kĂ”nesid mingi salvestusruumi.

SĂŒsteemi tööpĂ”himĂ”te on jĂ€rgmine. Sissetulevad failid vastavad kindlale struktuurile, mis kirjeldab kutse struktuuri. SeejĂ€rel tagab rakendus, et see struktuur salvestatakse vastavatesse veergudesse. Hiljem salvestatud kutseid kasutatakse – teabe kuvamiseks kasutajate andmeside tarbimise kohta (arveldused, kĂ”ned, saldo ajalugu).

Kuidas vaatama Kassandra silmadesse ja samal ajal andmeid, stabiilsust ja usku NoSQL-i mitte kaotada

Miks Cassandra on valitud, on tĂ€iesti arusaadav — see kirjutab nagu kuulipilduja, on kergesti skaleeritav ja tĂ”rkeotsustav.

Nii et siin on, mida me kogemuselt saime

Jah, vÀlja kukkunud sÔlme ei ole tragöödia. See ongi Cassandra tÔrketaluvuse olemus. Kuid sÔlm vÔib olla aktiivne ja samas jÔudluses madalseisus. Selgub, et see peegeldub kohe kogu klastrite jÔudlusele.

Cassandra ei kaitse seal, kus Oracle pÀÀstis oma piirangutega. Ja kui rakenduse autor ei saanud seda ette, siis Cassandra jaoks saabunud duplikaat ei ole sugugi halvem originaalist. Kui see on saabunud, siis lisame selle.

Tasuta Cassandra "vĂ€lja kastist" ei meeldinud turvaekspertidele: kasutajate tegevuste logimist pole, Ă”iguste piiramist samuti ei ole.. Ühendusandmete info kuulub isikuandmete alla, seega kĂ”ik katsed seda mingil viisil kĂŒsida vĂ”i muuta peavad olema logitud koos vĂ”imalusega hilisemaks auditiks. Samuti tuleb mĂ”ista vajadust erinevate tasemete Ă”iguste eraldamiseks erinevatele kasutajatele. Tavaline opereeriv insener ja superadmin, kes vĂ”ib vabalt kustutada kogu keyspace'i – need on erinevad rollid, erinev vastutus ja pĂ€devus. Ilma selliste Ă”iguste eristamiseta kahtluse alla, kas andmete vÀÀrtus ja terviklikkus pĂŒsivad, tĂ”useb kiiremini, kui konsistentsi tase ANY.

Me ei arvestanud, et kĂ”nede kohta on vajalik nii tĂ”sine analĂŒĂŒs kui ka perioodilised valikud vĂ€ga erinevate tingimuste jĂ€rgi. Kuna valitud kirjed on pĂ€rast mĂ”eldud kustutamiseks ja ĂŒle kirjutamiseks (me peame toetama andmete vĂ€rskendamise protsessi valeandmete esialgsete sissevoolude korral), ei ole Cassandra siin meie sĂ”ber. Cassandra on nagu kogumise konteiner – sinna on mugav asju panna, kuid seal ei saa tulemusi arvutada.

Oleme silmitsi seisnud probleemiga andmete edastamisel testimisaladesse. (5 sÔlme testis versus 20 tootmises). Sellisel juhul ei saa dump'i kasutada.

Probleem rakenduse andmebaasi skeemi uuendustega, mis kirjutab Cassandra'sse. TagasivĂ”tt vĂ”ib genereerida hulga hauakive, mis vĂ”ib ettearvamatult meie jĂ”udlust mĂ”jutada.Cassandra on kirjutamiseks optimeeritud, ja enne kirjutamist ei mĂ”tle ta palju. Iga olemasolevate andmete operatsioon on samuti kirjutamine. Ehkki kustutades ĂŒleliigseid andmeid, genereerime me lihtsalt veelgi rohkem kirjeid ning ainult osa neist jÀÀb hauakividena.

Sisestamise aegumine. Cassandra on kirjutamisel suurepĂ€rane, kuid mĂ”nikord vĂ”ib sisenev voog teda oluliselt segadusse ajada.See juhtub siis, kui rakendus hakkab mitmeid kirjeid ringlusse saatma, mida ei Ă”nnestu mingil pĂ”hjusel sisestada. Ja meil on tĂ”eliselt vajalik DBA, kes jĂ€lgib gc.log'i, sĂŒsteemi logisid ja debug logisid aeglase pĂ€ringu korral, kompaktimise ootel olevate mÔÔdikute osas.

Mitmed andmekeskused klastris. Kust lugeda ja kuhu kirjutada?
Kas on vĂ”imalik jagada lugemiseks ja kirjutamiseks? Ja kui jah, siis peaks DC olema kirjutamiseks vĂ”i lugemiseks lĂ€hemal rakendusele? Kas ei teki meil tĂ”elist split brain'i, kui valime vale kooskĂ”lastamisastme? Palju kĂŒsimusi, palju avastamata seadistusi ja vĂ”imalusi, millega nii tahaks mĂ€ngida.

Kuidas me lahendasime

Et node ei langeks, lĂŒlitasime SWAP'i vĂ€lja. Ja nĂŒĂŒd, kui mĂ€lu on vĂ€he, peaks node kokku kukkuma, mitte et tekitama suuri gc pause.

Nii et me ei looda enam SQL loogikale. Rakenduse arendajad Ă”pivad ĂŒmber ja hakkavad oma koodis aktiivselt ennast kindlustama. Ideaalne selge andmete salvestamise ja töötlemise lahknevus.

Ostsid tuge DataStaxilt. Kastist vÀljaspool Cassandra on arendamine lÔpetatud (viimane commit veebruaris 2018). Samas pakub Datastax suurepÀrast teenust ja rohkesti tÀiustatud ning olemasolevatele IS-dele kohandatud lahendusi.

Tahan veel mÀrkida, et Cassandra ei ole liiga mugav pÀringute jaoks. Loomulikult on CQL suur samm kasutajate suunas (vÔrreldes Triftiga). Kuid kui teil on tervet osakonda, mis on harjunud mugavate join'idega, vaba filtreerimisega igasuguste vÀljade jÀrgi ja pÀringu optimeerimise vÔimalustega, ning need osakonnad tegelevad vÀidete ja avariide lahendamisega, siis tundub neile otsus liikuda Cassandra peale vaenulik ja rumal. Oleme hakanud arutama, kuidas meie kolleege aitada andmete valimisega.

Kaalusime kahte varianti. Esimeses variandis kirjutame kutsed mitte ainult C*-sse, vaid ka arhiivi Oracle andmebaasi. Erinevalt C*-st salvestatakse aga selles andmebaasis kutsed vaid jooksva kuu jooksul (piisav salvestus sĂŒgavus peretiifimise juhtumite jaoks). Siin ilmus kohe jĂ€rgmine probleem: kui kirjutada sĂŒnkroonselt, siis kaotame kĂ”ik C*-ga seotud eelised, mis tulenevad kiirest sisestamisest; kui asĂŒnkroonselt, siis ei ole kindel, et kĂ”ik vajalikud kutsed jĂ”uavad Oracle'i. Üks pluss siiski oli, aga suur: tööks jÀÀb endiselt tuttav PL/SQL Developer, st me saame praktiliselt rakendada „Fassaadi” mustrit. Alternatiivne variant. Rakendame mehhanismi, mis vĂ€ljendab kutsed C*-st, tĂ”mbab teatud andmeid rikastamiseks vastavatest tabelitest Oracle'is, ĂŒhendab saadud valikud ja esitab meile saavutatud tulemuse, mida me hiljem mingil moel kasutame (tagasi kerime, kordame, analĂŒĂŒsime, imetleme). Miinused: protsess on ĂŒsna mitmeastmeline ja peale selle puudub töötajatele kasutajaliides.

LĂ”puks jÀÀme siiski teise variandi juurde. Erinevate pankade valikute jaoks kasutasime Apache Spark. Mehhanismi sisu tuleneb Java-koodist, mis vastavalt mÀÀratud vĂ”tmetele (tellija, kĂ”ne toimumise aeg – jaotuse vĂ”tmed) vĂ”tab andmed C*-st, samuti vajalikud andmed rikastamiseks mistahes muust andmebaasist. PĂ€rast seda liitub nende andmed oma mĂ€llu ja kuvab tulemuse tulemustabelisse. Sparkile joonistati veebiliides ja see osutus tĂ€iesti kasutamiseks sobivaks.

Kuidas vaatama Kassandra silmadesse ja samal ajal andmeid, stabiilsust ja usku NoSQL-i mitte kaotada

Andmete uuendamise ĂŒlesande lahendamisel vaatasime taas ĂŒle mitu vĂ”imalust. Nii Sstloaderi kaudu edastamine kui ka katsetsoonis klastrite jagamine kaheks osaks, millest igaĂŒks vaheldumisi ĂŒhendub tootmisklastriga, saades seelĂ€bi toite. Testimise kĂ€igus oli plaanis neid omavahel vahetada: see osa, mis töötas testis, puhastatakse ja viiakse tootmisesse, samas kui teine hakkab töötama andmetega eraldi. Ent pĂ€rast uuesti kaalumist hindasime ratsionaalsemalt, milliseid andmeid tasub ĂŒle kanda, ja mĂ”istsime, et kutsete iseenesest mĂ”istetav olemus testides, mis genereeritakse kiiresti vajaduse korral, ja tootmisandmestiku komplekt ei oma vÀÀrtust testimisse edastamiseks. On mitmeid kogumisohtlikke objekte, mida tasub ĂŒle kanda, kuid need on vaid mĂ”ned tabelid, mis ei ole vĂ€ga suured. SeetĂ”ttu tuli lahendusena taas appi Spark, mille abil kirjutasime ja hakkasime aktiivselt kasutama andmete ĂŒlekandmise skripti tabelite vahel tootmisest testimiseks.

Meie praegune juurutamispoliitika vÔimaldab meil töötada ilma tagasivÔtmisteta. Enne reklaami algust toimub kohustuslik testimine, kus vead ei ole nii kulukad. EbaÔnnestumise korral on alati vÔimalik kukutada juhtumiruumi ja alustada kogu skeemi uuesti.

Kassandri pideva kĂ€ttesaadavuse tagamiseks on vajalik andmebaasi administreerimine ja mitte ainult see. Kogu rakendusega töötav personal peab mĂ”istma, kus ja kuidas jĂ€lgida praegust olukorda ning kuidas probleemide Ă”igeaegse diagnoosimise lĂ€bi viia. Selleks kasutame aktiivselt DataStax OpsCenterit (töökoormuse haldamine ja jĂ€lgimine), Cassandra Driveri sĂŒsteemimetriikat (C* kirjutamise ajavĂ€ljajĂ€tmiste arv, C* lugemise ajavĂ€ljajĂ€tmiste arv, maksimaalne latentsus jne), ning jĂ€lgime rakenduse tööd, mis suhtleb Kassandraga.

Kuna mĂ”tleme eelnevale kĂŒsimusele, saame aru, kus vĂ”ib peituda peamine risk. See on andmete kuvamise vormid, mis tĂ”ukuvad mitmest omavahel sĂ”ltumatust pĂ€ringust salvestusele. Seega vĂ”ime saada ĂŒsna ebaĂŒhtlast teavet. Kuid see probleem oleks samuti aktuaalne, isegi kui töötaksime ainult ĂŒhe andmekeskusega. Seega on kĂ”ige mĂ”istlikum koostada batch-funktsioon andmete lugemiseks vĂ€lises rakenduses, mis tagab andmete saamise ĂŒhtlasel ajaperioodil. Mis puutub lugemise ja kirjutamise eraldamisse jĂ”udluse aspektist, siis peatab meid risk, et andmekeskuste vaheline ĂŒhenduse katkemise korral vĂ”ime saada kaks omavahel tĂ€iesti ebaĂŒhtlast klastrit.

SeetĂ”ttu, hetkel otsustasime, et kirjutamise jĂ€rjepidevuse tase on EACH_QUORUM, lugemise puhul – LOCAL_QUORUM

LĂŒhikesed muljed ja jĂ€reldused

Selleks, et hinnata saavutatud lahendust ekspluateerimise toetuse ja edasise arengu perspektiivi seisukohalt, otsustasime mÔelda, kus veel saaks sellist arengut rakendada.

Kui mÔelda kiiresti, siis andmete skoorimine selliste programmide jaoks nagu «Maksa, kui sobib» (laadime S* teavet, arvutamine Spark skriptide pÔhjal), nÔuete arvestus suunade kaupa, rollide sÀilitamine ja Ôiguste ligipÀÀsu kasutajatele arvutamine rollide maatriksi jÀrgi.

Nagu nÀeme, on repertuaar lai ja mitmekesine. Ja kui valida toetajate/ vastaste laager NoSQL-i osas, siis liitume toetajatega, kuna oleme saanud oma eelised, just seal, kus ootasime.

Ieven Kassandra kastist vĂ€lja vĂ”imaldab reaalajas horisontaalset skaleerimist, lahendades andmete suurendamise sĂŒsteemis tĂ€iesti probleemideta. Oleme suutnud viia eraldi kontuuris vĂ€lja vĂ€ga koormatud mehhanismi kĂ”nede koguste arvutamiseks, samuti jagada rakenduse skeemi ja loogika, vabanedes pahest praktikast kirjutada kohandatud töölisi ja objekte andmebaasis. Oleme saanud valida ja seadistada, et kiirendamiseks mÀÀrata, millistes andmekeskustes arvutamine toimuda, ja millistes andmed salvestada, kaitstes end nii ĂŒksikute nodede kui ka kogu andmekeskuse tĂ”rkeohtude eest.

Uute projektide jaoks meie arhitektuuri rakendades, olles mingisuguse kogemuse juba omandanud, tahaksime kohe arvesse vĂ”tta eespool kirjeldatud nĂŒansse, et vĂ€ltida teatud vigu ja siluda teravaid nurki, millest algselt ei saanud ĂŒle.

NÀiteks, aeg-ajalt jÀlgida Kassandra uuendusi, sest paljusid probleeme, millega me silmitsi seisame, on juba teada ja need on parandatud.

Ärge paigaldage nii andmebaasi kui ka Spark'i samadele nodedele vĂ”i piirake rangelt lubatud ressursside kasutamist, sest Spark vĂ”ib kasutada rohkem mĂ€lu, kui lubatud, ja me saame kiiresti esimese probleemi meie nimekirjas.

Tugevdage jÀlgimist ja kÀitamise oskusi juba projekti testimise etapis. Alates algusest arvestama maksimaalselt kÔiki meie lahenduse vÔimalikke tarbijaid, sest just sellest sÔltub lÔpuks andmebaasi struktuur.

MÔelge korra veel saadud skeemi optimeerimise vÔimalustele. TÔstke esile, milliseid vÀlju saab serialiseerida. Uuringu kÀigus selgitage, milliseid tÀiendavaid tabeleid on vaja luua, et kÔige tÀpsemalt ja optimaalsemalt andmeid arvesse vÔtta ning seejÀrel vastata soovitud teabega (nÀiteks arvestades, et samu andmeid saame salvestada erinevates tabelites, arvestades erinevat jaotust erinevate kriteeriumide jÀrgi, saame oluliselt sÀÀsta protsessori aega lugemispÀringute korral).

Hea kohe ette nÀha TTL-i mÀÀramise ja aegunud andmete puhastamise.

Andmete eksportimisel Kassandra-st rakenduse loogika peab toimima FETCH pÔhimÔttel, et mitte kÔiki ridu korraga mÀlu laadida, vaid valida need partiide kaupa.

Soovitav on enne projekti ĂŒleviimist kirjeldatud lahendusele kontrollida sĂŒsteemi katkestuskindlust, viies lĂ€bi seeria krahhiteste., and possibly data loss in one data center, recovery of corrupted data over a certain period, network drops between data centers. Such tests will not only help assess the advantages and disadvantages of the proposed architecture but will also provide excellent practice for the engineers conducting them, and the skills acquired will prove valuable should system failures occur in production.

If we are handling critical information (such as data for billing, calculating subscriber debts), we should also pay attention to tools that can help mitigate risks arising from the peculiarities of the DBMS. For instance, using the nodesync utility (Datastax), we can develop an optimal strategy for its usage to ensure consistency without creating excessive load on Cassandra and use it only for specific tables during specific periods.

Mis siis, kuue kuu jooksul koos Cassandra'ga? Üldiselt pole lahendamata probleeme. TĂ”siseid katkemisi ja andmekadu me samuti ei lubanud. Jah, tuli mĂ”elda teatud varasemate probleemide kompenseerimisele, kuid lĂ”ppkokkuvĂ”ttes ei varjutanud see oluliselt meie arhitektuurilist lahendust. Kui soovite ja ei karda proovida midagi uut, ning samal ajal ei taha tugevalt pettuda, siis valmistuge selleks, et tasuta ei ole midagi. Te peate rohkem sĂŒvenema dokumentatsiooni ja koguma oma individuaalsed augud kui vanas legacy lahenduses, ning miski teooria ei ĂŒtle ette, millised augud just teid ootavad.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster