Kuidas vaadata Kassandrale silma ja mitte kaotada andmeid, stabiilsust ja usku NoSQL-i?

Kuidas vaadata Kassandrale silma ja mitte kaotada andmeid, stabiilsust ja usku NoSQL-i?

Öeldakse, et elus tasub kĂ”ike vĂ€hemalt kord proovida. Ja kui olete harjunud töötama relationaalsete andmebaasidega, siis on NoSQL-ga tutvumine alguses vĂ€hemalt ĂŒldiseks arenduseks vajalik. Praegu on selle tehnoloogia kiire arengu tĂ”ttu palju vastuolulisi arvamusi ja kuumi vaidlusi, mis toidavad huvi.
Kui sĂŒĂŒbida sellesse, siis vĂ”ib nĂ€ha, et vaidlused tekivad vale lĂ€henemise tĂ”ttu. Need, kes kasutavad NoSQL andmebaase just seal, kus need on vajalikud, on rahul ja saavad selle lahenduse kĂ”ik plussid. Eksperimenteerijad, kes loodavad sellele tehnoloogiale imerohuna seal, kus see ei ole ĂŒldse rakendatav, kogevad pettumust, kaotades relationaalsete andmebaaside tugevused ilma olulisi eeliseid omandamata.

RÀÀgin oma kogemusest lahenduse juurutamise osas, mis pÔhineb Cassandra andmebaasil: millega tuli silmitsi seista, kuidas keerulistes olukordades vÀlja pÀÀsesime, kas suutsime NoSQL kasutamisest kasu saada ja kuhu tuli lisada tÀiendavaid jÔupingutusi/rahakulu.
Algne ĂŒlesanne oli luua sĂŒsteem, mis salvestab kĂ”nesid mingisse salvestisse.

SĂŒsteemi tööpĂ”himĂ”te on jĂ€rgmine. Sissetulevad failid sisaldavad teatud struktuuri, mis kirjeldab kĂ”ne struktuuri. SeejĂ€rel tagab rakendus selle struktuuri salvestamise vastavatesse veergudesse. Edasi salvestatud kĂ”nesid kasutatakse – nĂ€iteks teabe kuvamiseks liiklustarbimise kohta abonentidele (tasud, kĂ”ned, saldo ajalugu).

Kuidas vaadata Kassandrale silma ja mitte kaotada andmeid, stabiilsust ja usku NoSQL-i?

Miks Cassandra valiti, on tĂ€iesti arusaadav – see kirjutab nagu kuulipildur, on lihtsalt skaleeritav ja talub rikkeid.

Nii et siin on see, mida kogemus meile andis

Jah, vÀlja kukkunud sÔlm ei ole tragöödia. See ongi Cassandra rikkeitaluvuse mÔte. Aga sÔlm vÔib olla elus, kuid sellegipoolest alandada oma jÔudlust.. Nagu selgus, mÔjutab see kohe kogu klastrite tootlikkust.

Cassandra ei kaitse seal, kus Oracle pÀÀstis oma piirangutega.. Ja kui rakenduse autor ei saanud sellest eelnevalt aru, siis jÔudnud duubel Cassandra jaoks ei ole sugugi halvem originaalist. Kui tuli, siis paneme selle sisse.

Tasuta Cassandra „karbist vĂ€ljas“ ei meeldinud Infotehnoloogiale: kasutajate tegevuse logimist ei ole, samuti ei ole Ă”iguste piiramist.Kutsedega seotud teave kuulub isikuandmete hulka, mis tĂ€hendab, et kĂ”ik katsed selle taotlemiseks vĂ”i muutmiseks peavad olema logitud vĂ”imalusega hilisema kontrolli jaoks. Samuti tuleb teadvustada vajadust jagada Ă”igusi erinevatele tasanditele erinevate kasutajate jaoks. Lihtne tegevinsener ja superadmin, kes vĂ”ib vabalt kustutada kogu keyspace'i – need on erinevad rollid, erinevad vastutused, erinevad kompetentsid. Ilma sellise ligipÀÀsuĂ”iguste eristamiseta seaduse ja andmete vÀÀrtus ning terviklikkus hakkavad kiiremini kahtluse alla minema kui ANY konsistentsitasemel.

Me ei arvestanud, et kĂ”nede osas on vajalik nii tĂ”sine analĂŒĂŒs kui ka perioodilised valikud vĂ€ga erinevate tingimuste alusel. Kuna valitud kirjed tuleks hiljem eemaldada ja ĂŒle kirjutada (ĂŒlesande raames peame toetama andmete ajakohastamise protsessi algselt valeandmete saamise korral), ei sobi Cassandra meile siinkohal. Cassandra nagu seif – sinna on mugav asju panna, kuid seal ei saa hĂ€sti lugeda.

Oleme silmitsi seisnud andmete edastamise probleemiga testimisaladesse. (5 node'i testis vs 20 tootmises). Sel juhul ei saa dump'i kasutada.

Probleem rakenduse andmeskeemide vĂ€rskendamisel, mis kirjutab Cassandrasse. TagasivĂ”tmine genereerib suure hulga mĂ€lestustahvleid, mis vĂ”ib ettearvamatul viisil meie jĂ”udlust mĂ”jutada.Cassandra on optimeeritud kirjutamiseks ja enne kirjutamist ei mĂ”tle ta palju. Iga olemasolevate andmete toiming on samuti kirjutamine. St, kustutades ĂŒleliigset, genereerime me lihtsalt veelgi rohkem kirjeid, millest ainult osa on tĂ€histatud mĂ€lestustahvlitega.

Aegumised sisestamisel. Cassandra on kirjutamisel suurepÀrane, kuid mÔnikord vÔib sissetulev voog seda tÔsiselt segadusse ajada.See juhtub siis, kui rakendus hakkab ringi jooksma mitmete kirjetega, mida ei Ônnestu mingil pÔhjusel sisestada. Ja meil on vaja tÔelist DBA, kes jÀlgib gc.log, system ja debug logisid aeglaste pÀringute osas ning compaction pending'i mÔÔdikuid.

Mitu andmekeskust klastris. Kust lugeda ja kuhu kirjutada?
Kas on vĂ”imalik eraldada lugemis- ja kirjutamisprotsessid? Ja kui jah, siis peaks DC olema lĂ€hemal rakendusele kirjutamiseks vĂ”i lugemiseks? Ja kas meil ei esine tĂ”elist split brain'i, kui valime vale jĂ€rjepidevuse tasandi? TĂ€iesti palju kĂŒsimusi, palju uurimata seadeid ja vĂ”imalusi, mida tahaks proovida.

Kuidas me probleemi lahendasime

Kuna node'i jĂ”udlus langes, lĂŒlitasime SWAPi vĂ€lja. NĂŒĂŒd, kui mĂ€lu on puudus, peaks node kokku kukkuma, mitte tekitama suuri gc pause.

Nii et me ei looda enam andmebaasi loogikale. Rakenduse arendajad Ă”pivad ĂŒmber ja hakkavad aktiivselt enda koodis tagama. Ideaalne selge andmete salvestamise ja töötlemise jaotus.

Ostsime DataStaxi tuge. Karu pakendatud Cassandra arendamine on lĂ”petatud (viimane commit veebruaris 2018). Samas pakub Datastax suurepĂ€rast teenust ja palju tĂ€iustatud lahendusi, mis on kohandatud olemasolevatele infosĂŒsteemidele.

Tahaksin veel mÀrkida, et Cassandra ei ole vÀga mugav pÀringute tegemiseks. Loomulikult on CQL suur samm kasutajate suunas (vÔrreldes Thriftiga). Kuid kui teil on terved osakonnad, kes on harjunud selliste mugavate liitmisvÔimalustega, vabade filtritega igasuguste vÀljade jÀrgi ja pÀringute optimeerimise vÔimalustega, ning need osakonnad töötavad selle nimel, et lahendada pretensioone ja avariisid, siis tundub Cassandra lahendus neile vaenulik ja rumal. Ja me hakkasime vaatama, kuidas meie kolleegid saaksid andmeid vÀlja vÔtta.

Kahe variandi vahel arutati. Esimeses variandis registreerime kutsed mitte ainult C*, vaid ka arhiivis olevasse Oracle andmebaasi. Ainult erinevalt C*-st hoitakse selle andmebaasis kutseid vaid jooksva kuu jooksul (kutsumise piisav salvestamise sĂŒgavus peretransformeerimise juhtumite jaoks). Siin nĂ€gin kohe jĂ€rgmist probleemi: kui kirjutada sĂŒnkroonselt, kaotame kĂ”ik C*-ga seotud kiirused, kui asĂŒnkroonselt – pole garantiid, et kĂ”ik vajalikud kutsed ĂŒldse Oracle'i jĂ”uavad. Üks suur pluss oli: töös jÀÀb kasutusele tuttav PL/SQL Developer, see tĂ€hendab, et saame praktiliselt rakendada „Fassaadi“ mustrit. Alternatiivne variant. Rakendame mehhanismi, mis eksportib kutsed C*-st, toob vajalikud andmed neid rikastama Oracle'i vastavatest tabelitest, liidab saadud valikud ning annab meile tulemuse, mida me hiljem mingil moel kasutame (tagasi rullime, kordame, analĂŒĂŒsime, imetleme). Miinused: protsess osutub ĂŒsna mitmeastmeliseks ning lisaks puudub töötajatele kasutajaliides.

KokkuvĂ”ttes jÀÀme siiski teise variandi juurde. Erinevate purkide valikute jaoks kasutasime Apache Spark'i. Mehhanismi sisu kujunes Java-koodiks, mis mÀÀratletud vĂ”tmete (tellija, kĂ”ne toimumise aeg – sektsiooni vĂ”tmed) alusel toob andmed C*-st ning samuti vajalikud andmed rikastamiseks mistahes teisest andmebaasist. PĂ€rast seda liidab need enda mĂ€llu ja kuvab tulemuse tulemuste tabelisse. Sparki peal joonistasime veebiliidese ja see osutus tĂ€iesti kasutatavaks.

Kuidas vaadata Kassandrale silma ja mitte kaotada andmeid, stabiilsust ja usku NoSQL-i?

Andmete uuendamise ĂŒlesande lahendamisel vaadati taas mitmeid lahendusviise. Nii Sstloaderi kaudu edasiviimise kui ka testimisalase klusteri jagamise variant, mis jaguneb kaheks osaks, millest kumbki siseneb vaheldumisi ĂŒhte klastrisse tootmisandmete jaoks, toites end seelĂ€bi Ă€ra. Uuendamise kĂ€igus plaaniti nende vahetamist: osa, mis töötas testis, puhastatakse ja sisenetakse tootmisse, samas kui teine osa hakkab andmetega eraldi töötama. Siiski, peale veelkordset lĂ€bi mĂ”tlemist hindasime ratsionaalsemalt, millised andmed vÀÀrivad edasiviimist ja mĂ”istsime, et iseĂ€ranis on kutsed – testide jaoks konsistentsuseta entiteet, mis genereeritakse kiiresti vajadusel, ning tootmisandmete komplekt ei oma vÀÀrtust edasiviimiseks testides. On mitmeid kogumisobjekte, mida oleks mĂ”istlik edastada, kuid see on sĂ”na otseses mĂ”ttes paar tabelit, mis ei ole liiga rasked. SeetĂ”ttu tuli taas lahenduseks Spark, mille abil kirjutasime ja hakkasime aktiivselt kasutama andmete edastusskripti tabelite vahel tootmiste ja testide vahel.

Meie praegune juurutamise poliitika vÔimaldab meil töötada ilma tagasikeeramiseta. Enne tootmist toimub kohustuslik katsetus, kus viga ei ole nii kallis. EbaÔnne korral saab alati kaotada kiirusruumi ja taastada kogu skeemi algusest peale.

Kassandras pideva kĂ€ttesaadavuse tagamiseks on vajalik DBA ja mitte ainult tema. KĂ”ik, kes rakendusega töötavad, peavad mĂ”istma, kus ja kuidas vaadata praegust olukorda ning kuidas aegsasti probleeme diagnoosida. Selleks kasutame aktiivselt DataStax OpsCenterit (töökoormuse haldamine ja jĂ€lgimine), Cassandra Driveri sĂŒsteemseid mÔÔdikuid (C* kirjutamise ajakulumiste arv, C* lugemise ajakulumiste arv, maksimaalne latentsus jne), jĂ€lgime ise rakenduse tööd, mis toimib koos Kassandraga.

Kui mĂ”tlesime eelnevale kĂŒsimusele, sai selgeks, kus vĂ”ib peituda pĂ”hirisk. Need on andmete kuvamisvormid, mis tĂ”mbavad andmeid mitmest omavahel sĂ”ltumatust pĂ€ringust andmehoidlas. Nii vĂ”ime saada ĂŒsna ebajĂ€rjekindlat teavet. Kuid see probleem oleks sama aktuaalne ka siis, kui töötaksime ainult ĂŒhe andmekeskusega. Seega on mĂ”istlikim siin luua andmete lugemise partii funktsioon kolmandas rakenduses, mis tagab andmete saamise ĂŒhes ajavahemikus. Mis puudutab lugemise ja kirjutamise eristamist tootlikkuse osas, siis takistas meid risk, et teatud ĂŒhenduse katkemisel andmekeskuste vahel vĂ”ime saada kaks omavahel tĂ€iesti ebajĂ€rjekindlat klastrit.

KokkuvĂ”ttes, hetkel otsustasime, et kirje jaoks on jĂ€rjepidevuse tase EACH_QUORUM, lugemise jaoks – LOCAL_QUORUM

KĂŒsimuste lĂŒhikesed muljed ja jĂ€reldused

Et hinnata saadud lahendust operatiivtoetuse ja edasise arengu perspektiivi seisukohalt, otsustasime mÔelda, kus veel vÔiks seda arendust rakendada.

Kui vĂ”tta kohe, siis andmete skoorimine programmide jaoks nagu „Maksa, kui mugav” (laadime C* teavet, arvutame Sparkis), kaebuste arvestamine suunade kaupa ning rollide sĂ€ilitamine ja Ă”iguste ligikaudu arvutamine rollimaatriksis.

Nagu nÀeme, on repertuaar lai ja mitmekesine. Ja kui valida NoSQL pooldajate/vastaste leer, siis liitume pooldajatega, sest oleme saanud oma eelised, just seal, kus ootasime.

Isegi Cassandra vĂ€ljaanne pakub vĂ”imalust horisontaalseks skaleerimiseks reaalajas, tĂ€iesti valutult lahendades andmete suurenemise kĂŒsimuse sĂŒsteemis. Meil Ă”nnestus vĂ€lja tuua eraldi kontuur vĂ€ga suure koormusega mehhanism kĂ”nede kokkuvĂ”tete arvutamiseks ning eraldada rakenduse skeem ja loogika, vabanedes kohutavast praktikast kohandatud tööde ja objektide kirjutamisel ise andmebaasis. Saime vĂ”imaluse valida ja seadistada, et kiirendada, millistes andmekeskustes teeme arvutusi ja millistes kirjutame andmeid, valmistades end ette eraldiseisvate sĂ”lmede ja ka ĂŒldiselt andmekeskuste kukkumiste korral.

Kasutades meie arhitektuuri uutes projektides ning olles juba kogunud natuke kogemusi, tahaks kohe arvestada eespool nimetud nĂŒanssidega ja vĂ€ltida teatud vigu, siluda teravaid nurki, mida alguses ei Ă”nnestunud vĂ€ltida.

NÀiteks, Ôigeaegselt jÀlgida Kassandra vÀrskendusi, kuna paljud probleemid, millega me silmitsi seisame, olid juba tuntud ja parandatud.

Mitte paigutada andmebaasi ja Spark'i samadele nodidele (vÔi rangelt jagada lubatud ressursside kasutamise jÀrgi), kuna Spark vÔib tarbida rohkem RAM-i, kui on lubatud, ja me saame kiiresti probleemi number 1 meie nimekirjast.

Parandada jÀlgimist ja operatiivsete oskuste taset juba projekti testimise etapis. Alguses arvestada maksimaalselt kÔiki meie lahenduse potentsiaalseid kasutajaid, kuna just sellest sÔltub lÔpuks andmebaasi struktuur.

MÔningaid kordi uurida saadud skeemi vÔimaliku optimeerimise osas. MÀÀrata, milliseid vÀlju saab serialiseerida. MÔista, milliseid lisalaudu me peame tegema, et kÔige korrektsemalt ja optimaalsemalt arvestada ning hiljem nÔudmise korral vajalikku teavet edastada (nÀiteks eeldades, et samu andmeid saame hoida erinevates tabelites, arvestades erinevat jagunemist erinevate kriteeriumite jÀrgi, saame mÀrgatavalt sÀÀsta protsessoriaega lugemispÀringute puhul).

Kena kohe planeerida TTL-i rakendamine ja aegunud andmete puhastamine.

Kassandra's andmete eksportimisel rakenduse loogika peaks töötama FETCH-i printsiibil, et mitte laadida kÔiki ridu mÀllu korraga, vaid valida partii kaupa.

Soovitatav on enne projekti ĂŒleminekut kirjeldatud lahendusele kontrollida sĂŒsteemi tĂ”rketaluvust, viies lĂ€bi madalatest testidest, nagu andmete kadumine ĂŒhes andmekeskuses, rikutud andmete taastamine mingi perioodi jooksul, vĂ”rgu langused andmekeskuste vahel. Sellised testid mitte ainult ei vĂ”imalda hinnata pakutava arhitektuuri plusse ja miinuseid, vaid annavad ka head harjutuspraktikat neile inseneridele, kes neid lĂ€bi viivad, ning omandatud oskus ei ole sugugi ĂŒleliigne, kui sĂŒsteemide tĂ”rked korduvad tootmises.

Kui töötame olulise teabe, nagu nĂ€iteks arveldamiseks vajalikud andmed ja tellija vĂ”lgade arvestus, kallal, tasub pöörata tĂ€helepanu ka tööriistadele, mis aitavad vĂ€hendada andmebaasi eripĂ€ra tĂ”ttu tekkivaid riske. NĂ€iteks vĂ”iks kasutada nodesync utiliiti (Datastax) ning vĂ€lja töötada selle efektiivseks kasutamiseks optimaalse strateegia, et konsistentsuse nimel mitte tekitada ĂŒleliigset koormust Cassandrale ja kasutada seda vaid teatud tabelite puhul teatud ajavahemikel.

Noh, pĂ€rast poolteist aastat elamist Cassandra kĂ”rval? KokkuvĂ”ttes pole lahendamata probleeme. Suuri krahhe ja andmete kaotust me samuti ei lubanud. Jah, tuli mĂ”elda, kuidas kompenseerida mĂ”ningaid varem esialgu mitte esinenud probleeme, kuid lĂ”puks ei varjutanud see oluliselt meie arhitektuurilahendust. Kui soovite ja ei karda proovida midagi uut, ja samal ajal ei taha tĂ”siselt pettuda, valmistuge selleks, et tasuta ei juhtu midagi. Peate rohkem tegelema, tutvuma dokumentatsiooniga ja leidma oma individuaalsed mured, kui vanas legacy lahenduses, ning ĂŒkski teooria ei ĂŒtle ette, millised mured just teid ootavad.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster