ViÅi saka, ka dzÄ«vÄ visu ir vÄrts vismaz vienu reizi izmÄÄ£inÄt. Un, ja esat pieradis strÄdÄt ar relÄciju DBVS, tad ar NoSQL ir vÄrts iepazÄ«ties praksÄ, pirmkÄrt, vismaz vispÄrÄjai attÄ«stÄ«bai. Tagad Ŕīs tehnoloÄ£ijas straujÄs attÄ«stÄ«bas dÄļ par Å”o tÄmu ir daudz pretrunÄ«gu viedokļu un karstas diskusijas, kas Ä«paÅ”i rada interesi.
Ja iedziļinÄties visu Å”o strÄ«du bÅ«tÄ«bÄ, var redzÄt, ka tie rodas nepareizas pieejas dÄļ. Tie, kuri izmanto NoSQL datu bÄzes tieÅ”i tur, kur tÄs ir vajadzÄ«gas, ir apmierinÄti un saÅem visas Ŕī risinÄjuma priekÅ”rocÄ«bas. Un eksperimentÄtÄji, kuri paļaujas uz Å”o tehnoloÄ£iju kÄ panaceju tur, kur tÄ vispÄr nav pielietojama, ir vÄ«luÅ”ies, zaudÄjot relÄciju datu bÄzu stiprÄs puses, neiegÅ«stot ievÄrojamas priekÅ”rocÄ«bas.
Es jums pastÄstÄ«Å”u par mÅ«su pieredzi, ievieÅ”ot risinÄjumu, kas balstÄ«ts uz Cassandra DBVS: ar ko mums nÄcÄs saskarties, kÄ izgÄjÄm no sarežģītÄm situÄcijÄm, vai varÄjÄm gÅ«t labumu no NoSQL izmantoÅ”anas un kur bija jÄiegulda papildu pÅ«les/lÄ«dzekļi. .
SÄkotnÄjais uzdevums ir izveidot sistÄmu, kas reÄ£istrÄ zvanus kaut kÄdÄ krÄtuvÄ.
SistÄmas darbÄ«bas princips ir Å”Äds. Ievade ietver failus ar Ä«paÅ”u struktÅ«ru, kas apraksta zvana struktÅ«ru. PÄc tam lietojumprogramma nodroÅ”ina, ka Ŕī struktÅ«ra tiek saglabÄta attiecÄ«gajÄs kolonnÄs. NÄkotnÄ saglabÄtie zvani tiks izmantoti, lai parÄdÄ«tu informÄciju par abonentu satiksmes patÄriÅu (maksas, zvani, bilances vÄsture).
Ir pilnÄ«gi skaidrs, kÄpÄc viÅi izvÄlÄjÄs Kasandru - viÅa raksta kÄ ložmetÄjs, ir viegli mÄrogojama un izturÄ«ga pret defektiem.
TÄ, lÅ«k, ko mums sniedza pieredze
JÄ, neveiksmÄ«gs mezgls nav traÄ£Ädija. TÄ ir Kasandras vainas tolerances bÅ«tÄ«ba. Bet mezgls var bÅ«t dzÄ«vs un tajÄ paÅ”Ä laikÄ sÄkt ciest sniegumÄ. KÄ izrÄdÄ«jÄs, tas nekavÄjoties ietekmÄ visa klastera veiktspÄju.
Kasandra nepasargÄs jÅ«s tur, kur Oracle jÅ«s izglÄba ar saviem ierobežojumiem. Un, ja pieteikuma autors to iepriekÅ” nesaprata, tad Kasandrai atnÄkuÅ”ais dubultnieks nav sliktÄks par oriÄ£inÄlu. Kad tas bÅ«s saÅemts, mÄs to ievietosim.
IB ļoti nepatika bezmaksas Cassandra no kastes: Nav lietotÄja darbÄ«bu reÄ£istrÄÅ”anas, tiesÄ«bu diferenciÄcijas. InformÄcija par zvaniem tiek uzskatÄ«ta par personas datiem, kas nozÄ«mÄ, ka visi mÄÄ£inÄjumi to jebkÄdÄ veidÄ pieprasÄ«t/mainÄ«t ir jÄreÄ£istrÄ ar iespÄju pÄc tam veikt auditu. TÄpat jums ir jÄapzinÄs, ka dažÄdiem lietotÄjiem ir jÄnodala tiesÄ«bas dažÄdos lÄ«meÅos. VienkÄrÅ”am darbÄ«bas inženierim un superadministratoram, kas var brÄ«vi dzÄst visu atslÄgvietu, ir dažÄdas lomas, dažÄdi pienÄkumi un kompetences. Bez Å”Ädas piekļuves tiesÄ«bu diferencÄÅ”anas datu vÄrtÄ«ba un integritÄte nekavÄjoties tiks apÅ”aubÄ«ta ÄtrÄk nekÄ ar JEBKURU konsekvences lÄ«meni.
MÄs neÅÄmÄm vÄrÄ, ka izsaukumiem ir nepiecieÅ”ama gan nopietna analÄ«ze, gan periodiska paraugu ÅemÅ”ana dažÄdiem apstÄkļiem. TÄ kÄ atlasÄ«tie ieraksti pÄc tam ir jÄdzÄÅ” un jÄpÄrraksta (kÄ daļa no uzdevuma mums ir jÄatbalsta datu atjauninÄÅ”anas process, kad dati sÄkotnÄji tika ievadÄ«ti nepareizi), Kasandra Å”eit nav mÅ«su draugs. Kasandra ir kÄ krÄjkasÄ«te - tajÄ ir Ärti ievietot lietas, bet tajÄ nevar rÄÄ·inÄties.
PÄrsÅ«tot datus uz testa zonÄm, radÄs problÄma (5 mezgli testÄ pret 20 izlaiduma ballÄ). Å ajÄ gadÄ«jumÄ izgÄztuvi nevar izmantot.
ProblÄma ar datu shÄmas atjauninÄÅ”anu lietojumprogrammai, kas raksta Kasandrai. AtcelÅ”ana radÄ«s ļoti daudz kapakmeÅu, kas var izraisÄ«t produktivitÄtes zudumus neparedzamÄ veidÄ.. Cassandra ir optimizÄta ierakstÄ«Å”anai, un pirms rakstÄ«Å”anas daudz nedomÄ.Jebkura darbÄ«ba ar esoÅ”iem datiem ir arÄ« ieraksts. Tas ir, izdzÄÅ”ot nevajadzÄ«go, mÄs vienkÄrÅ”i saražosim vÄl vairÄk ierakstu, un tikai daži no tiem tiks apzÄ«mÄti ar kapu pieminekļiem.
Taimauts ievietoÅ”anas laikÄ. Kasandra ir skaista ierakstÄ, bet dažreiz ienÄkoÅ”Ä plÅ«sma viÅu var ievÄrojami mulsinÄt. Tas notiek, kad lietojumprogramma sÄk cikliski pÄrvietoties ap vairÄkiem ierakstiem, kurus kÄda iemesla dÄļ nevar ievietot. Un mums bÅ«s nepiecieÅ”ams Ä«sts DBA, kas uzraudzÄ«s gc.log, sistÄmas un atkļūdoÅ”anas žurnÄlus, lai meklÄtu lÄnus vaicÄjumus, metriku par sablÄ«vÄÅ”anu.
VairÄki datu centri klasterÄ«. No kurienes lasÄ«t un kur rakstÄ«t?
VarbÅ«t sadalÄ«t lasÄ«Å”anÄ un rakstÄ«Å”anÄ? Un ja jÄ, vai tuvÄk rakstÄ«Å”anas vai lasÄ«Å”anas lietojumprogrammai vajadzÄtu bÅ«t DC? Un vai tad, ja izvÄlÄsimies nepareizu konsekvences lÄ«meni, mÄs nesaÅemsim patiesi sadalÄ«tas smadzenes? Ir daudz jautÄjumu, daudz nezinÄmu iestatÄ«jumu, iespÄju, ar kurÄm jÅ«s patieÅ”Äm vÄlaties padomÄt.
KÄ mÄs izlÄmÄm
Lai novÄrstu mezgla nogrimÅ”anu, SWAP tika atspÄjots. Un tagad, ja trÅ«kst atmiÅas, mezglam vajadzÄtu iet uz leju un neveidot lielas gc pauzes.
TÄtad mÄs vairs nepaļaujamies uz datubÄzes loÄ£iku. Lietojumprogrammu izstrÄdÄtÄji pÄrkvalificÄjas un sÄk aktÄ«vi veikt piesardzÄ«bas pasÄkumus savÄ kodÄ. IdeÄla skaidra datu uzglabÄÅ”anas un apstrÄdes nodalÄ«Å”ana.
MÄs iegÄdÄjÄmies atbalstu no DataStax. BoksÄtÄs Cassandra izstrÄde jau ir beigusies (pÄdÄjÄ apÅemÅ”anÄs bija 2018. gada februÄrÄ«). TajÄ paÅ”Ä laikÄ Datastax piedÄvÄ izcilu servisu un lielu skaitu modificÄtu un pielÄgotu risinÄjumu esoÅ”ajiem IP risinÄjumiem.
Es arÄ« vÄlos atzÄ«mÄt, ka Cassandra nav Ä«paÅ”i Ärta atlases vaicÄjumiem. Protams, CQL lietotÄjiem ir liels solis uz priekÅ”u (salÄ«dzinÄjumÄ ar Trift). Bet, ja jums ir veselas nodaļas, kas ir pieraduÅ”as pie tik Ärtiem savienojumiem, bezmaksas filtrÄÅ”anas pÄc jebkura lauka un vaicÄjumu optimizÄcijas iespÄjÄm, un Ŕīs nodaļas strÄdÄ, lai atrisinÄtu sÅ«dzÄ«bas un negadÄ«jumus, Cassandra risinÄjums viÅiem Ŕķiet naidÄ«gs un muļķīgs. Un mÄs sÄkÄm izlemt, kÄ mÅ«su kolÄÄ£iem vajadzÄtu izgatavot paraugus.
IzskatÄ«jÄm divus variantus.PirmajÄ variantÄ zvanus rakstÄm ne tikai C*, bet arÄ« arhivÄtajÄ Oracle datubÄzÄ. Tikai atŔķirÄ«bÄ no C* Å”ajÄ datu bÄzÄ tiek glabÄti zvani tikai par tekoÅ”o mÄnesi (pietiekams zvanu uzglabÄÅ”anas dziļums, lai uzlÄdÄtu gadÄ«jumus). Å eit mÄs uzreiz redzÄjÄm Å”Ädu problÄmu: ja mÄs rakstÄm sinhroni, mÄs zaudÄjam visas C* priekÅ”rocÄ«bas, kas saistÄ«tas ar Ätru ievietoÅ”anu, ja mÄs rakstÄm asinhroni, nav garantijas, ka visi nepiecieÅ”amie zvani vispÄr nokļuva Oracle. Bija viens pluss, bet liels: darbÄ«bai paliek tas pats pazÄ«stamais PL/SQL Developer, t.i., praktiski ievieÅ”am āFasÄdesā modeli.AlternatÄ«va iespÄja. MÄs ievieÅ”am mehÄnismu, kas izlÄdÄ zvanus no C*, izvelk dažus datus bagÄtinÄÅ”anai no attiecÄ«gajÄm Oracle tabulÄm, savieno iegÅ«tos paraugus un dod mums rezultÄtu, ko mÄs pÄc tam kaut kÄ izmantojam (atgriežam, atkÄrtojam, analizÄjam, apbrÄ«nojam). MÄ«nusi: process ir diezgan daudzpakÄpju, un turklÄt nav saskarnes darbÄ«bas darbiniekiem.
BeigÄs izŔķīrÄmies pie otrÄ varianta. Apache Spark tika izmantots paraugu ÅemÅ”anai no dažÄdÄm burciÅÄm. MehÄnisma bÅ«tÄ«ba ir samazinÄta lÄ«dz Java kodam, kas, izmantojot norÄdÄ«tÄs atslÄgas (abonents, zvana laiks - sadaļas atslÄgas), izvelk datus no C*, kÄ arÄ« nepiecieÅ”amos datus bagÄtinÄÅ”anai no jebkuras citas datu bÄzes. PÄc tam tas pievieno tos savÄ atmiÅÄ un parÄda rezultÄtu iegÅ«tajÄ tabulÄ. MÄs uzzÄ«mÄjÄm tÄ«mekļa seju virs dzirksteles, un tÄ izrÄdÄ«jÄs diezgan lietojama.
Risinot rÅ«pniecisko testu datu atjauninÄÅ”anas problÄmu, mÄs atkal apsvÄrÄm vairÄkus risinÄjumus. Gan pÄrsÅ«tÄ«Å”ana, izmantojot Sstloader, gan iespÄja sadalÄ«t kopu testa zonÄ divÄs daļÄs, no kurÄm katra pÄrmaiÅus pieder vienai klasterim ar reklÄmas kopu, tÄdÄjÄdi tiek darbinÄta no tÄ. Atjauninot testu, bija plÄnots tos apmainÄ«t: daļa, kas darbojÄs testÄ, tiek notÄ«rÄ«ta un ievadÄ«ta ražoÅ”anÄ, bet otra sÄk strÄdÄt ar datiem atseviŔķi. TomÄr, vÄlreiz pÄrdomÄjot, mÄs racionÄlÄk novÄrtÄjÄm datus, kurus bija vÄrts pÄrsÅ«tÄ«t, un sapratÄm, ka paÅ”i zvani ir nekonsekventa vienÄ«ba testiem, kas tiek Ätri Ä£enerÄti, ja nepiecieÅ”ams, un tieÅ”i reklÄmas datu kopai nav vÄrtÄ«bas pÄrsÅ«tÄ«Å”anai uz pÄrbaude. Ir vairÄki uzglabÄÅ”anas objekti, kurus ir vÄrts pÄrvietot, bet tie ir burtiski pÄris galdi, turklÄt ne Ä«paÅ”i smagi. TÄpÄc mÄs kÄ risinÄjums atkal nÄca palÄ«gÄ Spark, ar kura palÄ«dzÄ«bu rakstÄ«jÄm un sÄkÄm aktÄ«vi lietot skriptu datu pÄrsÅ«tÄ«Å”anai starp tabulÄm, prom-test.
MÅ«su paÅ”reizÄjÄ izvietoÅ”anas politika ļauj mums strÄdÄt bez atcelÅ”anas. Pirms akcijas ir obligÄtais testa brauciens, kurÄ kļūda nav tik dÄrga. Neveiksmes gadÄ«jumÄ vienmÄr varat nomest laukumu un izrullÄt visu shÄmu no sÄkuma.
Lai nodroÅ”inÄtu nepÄrtrauktu Cassandra pieejamÄ«bu, jums ir nepiecieÅ”ams dba un ne tikai viÅÅ”. Ikvienam, kurÅ” strÄdÄ ar aplikÄciju, ir jÄsaprot, kur un kÄ skatÄ«ties uz aktuÄlo situÄciju un kÄ laicÄ«gi diagnosticÄt problÄmas. Lai to izdarÄ«tu, aktÄ«vi izmantojam DataStax OpsCenter (darba slodžu administrÄÅ”ana un uzraudzÄ«ba), Cassandra Driver sistÄmas metriku (taimautu skaits rakstÄ«Å”anai uz C*, taimautu skaits lasÄ«Å”anai no C*, maksimÄlais latentums utt.), uzraugÄm darbÄ«bu. paÅ”as lietojumprogrammas, strÄdÄjot ar Cassandra.
Kad mÄs domÄjÄm par iepriekÅ”Äjo jautÄjumu, mÄs sapratÄm, kur varÄtu bÅ«t mÅ«su galvenais risks. Å Ä«s ir datu parÄdÄ«Å”anas veidlapas, kas krÄtuvÄ parÄda datus no vairÄkiem neatkarÄ«giem vaicÄjumiem. TÄdÄ veidÄ mÄs varam iegÅ«t diezgan nekonsekventu informÄciju. TaÄu Ŕī problÄma bÅ«tu tikpat aktuÄla, ja strÄdÄtu tikai ar vienu datu centru. TÄpÄc vissaprÄtÄ«gÄkais Å”eit, protams, ir izveidot pakeÅ”u funkciju datu nolasÄ«Å”anai treÅ”Äs puses lietojumprogrammÄ, kas nodroÅ”inÄs datu saÅemÅ”anu vienÄ laika periodÄ. RunÄjot par iedalÄ«jumu lasÄ«Å”anÄ un rakstÄ«Å”anÄ veiktspÄjas ziÅÄ, Å”eit mÅ«s apturÄja risks, ka, zaudÄjot savienojumu starp DC, mÄs varÄtu nonÄkt pie diviem klasteriem, kas ir pilnÄ«gi nesaderÄ«gi viens ar otru.
RezultÄtÄ pagaidÄm apturÄta konsekvences lÄ«menÄ« EACH_QUORUM rakstÄ«Å”anai, lasÄ«Å”anai - LOCAL_QUORUM
ÄŖsi iespaidi un secinÄjumi
Lai izvÄrtÄtu iegÅ«to risinÄjumu no darbÄ«bas atbalsta un tÄlÄkÄs attÄ«stÄ«bas perspektÄ«vu viedokļa, nolÄmÄm padomÄt, kur vÄl Å”Ädu izstrÄdi varÄtu pielietot.
Uzreiz, pÄc tam datu vÄrtÄÅ”ana tÄdÄm programmÄm kÄ āMaksÄ, kad tas ir Ärtiā (mÄs ielÄdÄjam informÄciju C*, aprÄÄ·ini, izmantojot Spark skriptus), pretenziju uzskaite ar apkopoÅ”anu pÄc apgabala, lomu glabÄÅ”ana un lietotÄju piekļuves tiesÄ«bu aprÄÄ·inÄÅ”ana, pamatojoties uz lomu. matrica.
KÄ redzat, repertuÄrs ir plaÅ”s un daudzveidÄ«gs. Un, ja izvÄlÄsimies NoSQL atbalstÄ«tÄju/pretinieku nometni, tad pievienosimies atbalstÄ«tÄjiem, jo āāieguvÄm savas priekÅ”rocÄ«bas, un tieÅ”i tur, kur gaidÄ«jÄm.
Pat Cassandra opcija nodroÅ”ina horizontÄlu mÄrogoÅ”anu reÄllaikÄ, absolÅ«ti nesÄpÄ«gi atrisinot jautÄjumu par datu palielinÄÅ”anu sistÄmÄ. MÄs varÄjÄm pÄrvietot ļoti augstas slodzes mehÄnismu zvanu agregÄtu aprÄÄ·inÄÅ”anai atseviÅ”Ä·Ä shÄmÄ, kÄ arÄ« nodalÄ«t lietojumprogrammas shÄmu un loÄ£iku, atbrÄ«vojoties no sliktÄs prakses rakstÄ«t pielÄgotus darbus un objektus paÅ”Ä datu bÄzÄ. IeguvÄm iespÄju izvÄlÄties un konfigurÄt, paÄtrinÄt, uz kuriem DC veiksim aprÄÄ·inus un kuros ierakstÄ«sim datus, apdroÅ”inÄjÄmies gan pret atseviŔķo mezglu avÄrijÄm, gan DC kopumÄ.
PiemÄrojot mÅ«su arhitektÅ«ru jauniem projektiem un jau ar zinÄmu pieredzi, vÄlos nekavÄjoties Åemt vÄrÄ iepriekÅ” aprakstÄ«tÄs nianses un novÄrst dažas kļūdas, izlÄ«dzinÄt dažus asus stÅ«rus, no kuriem sÄkotnÄji nevarÄja izvairÄ«ties.
TÄ, piemÄram, laicÄ«gi sekojiet lÄ«dzi Kasandras atjauninÄjumiemjo diezgan daudzas no mums raduÅ”ajÄm problÄmÄm jau bija zinÄmas un novÄrstas.
Neievietojiet gan paÅ”u datu bÄzi, gan Spark tajos paÅ”os mezglos (vai stingri dalÄ«t ar pieļaujamo resursu izmantoÅ”anas apjomu), jo Spark var Äst vairÄk OP, nekÄ gaidÄ«ts, un mÄs Ätri iegÅ«sim problÄmu ar numuru 1 no mÅ«su saraksta.
Uzlabot uzraudzÄ«bu un darbÄ«bas kompetenci projekta testÄÅ”anas posmÄ. SÄkotnÄji, cik vien iespÄjams, Åemiet vÄrÄ visus mÅ«su risinÄjuma potenciÄlos patÄrÄtÄjus, jo no tÄ galu galÄ bÅ«s atkarÄ«ga datu bÄzes struktÅ«ra.
IespÄjamai optimizÄcijai vairÄkas reizes pagrieziet iegÅ«to Ä·Ädi. Atlasiet, kurus laukus var serializÄt. Saprast, kÄdas papildu tabulas mums bÅ«tu jÄveido, lai vispareizÄk un optimÄlÄk Åemtu vÄrÄ, un pÄc tam sniegt nepiecieÅ”amo informÄciju pÄc pieprasÄ«juma (piemÄram, pieÅemot, ka mÄs varam uzglabÄt vienus un tos paÅ”us datus dažÄdÄs tabulÄs, Åemot vÄrÄ dažÄdus sadalÄ«jumus atbilstoÅ”i dažÄdiem kritÄrijiem, mÄs varam ievÄrojami ietaupÄ«t CPU laiku lasÄ«Å”anas pieprasÄ«jumiem).
Nav slikti NekavÄjoties nodroÅ”iniet TTL pievienoÅ”anu un novecojuÅ”o datu notÄ«rÄ«Å”anu.
LejupielÄdÄjot datus no Cassandra Lietojumprogrammas loÄ£ikai jÄdarbojas pÄc FETCH principa, lai visas rindas netiktu ielÄdÄtas atmiÅÄ uzreiz, bet tiktu atlasÄ«tas pa partijÄm.
VÄlams pirms projekta pÄrcelÅ”anas uz aprakstÄ«to risinÄjumu pÄrbaudiet sistÄmas kļūdu toleranci, veicot virkni avÄriju testu, piemÄram, datu zudums vienÄ datu centrÄ, bojÄtu datu atjaunoÅ”ana noteiktÄ laika periodÄ, tÄ«kla pÄrtraukÅ”ana starp datu centriem. Å Ädi testi ļaus ne tikai novÄrtÄt piedÄvÄtÄs arhitektÅ«ras plusus un mÄ«nusus, bet arÄ« nodroÅ”inÄs labu iesildÄ«Å”anÄs praksi tos veicoÅ”ajiem inženieriem, un iegÅ«tÄ prasme nebÅ«t nebÅ«s lieka, ja sistÄmas kļūmes tiks atkÄrtotas ražoÅ”anÄ.
Ja strÄdÄjam ar kritisku informÄciju (piemÄram, dati rÄÄ·inu izrakstÄ«Å”anai, abonenta parÄda aprÄÄ·inÄÅ”ana), tad ir vÄrts pievÄrst uzmanÄ«bu arÄ« rÄ«kiem, kas samazinÄs riskus, kas rodas DBVS funkciju dÄļ. PiemÄram, izmantojiet nodesync utilÄ«tu (Datastax), izstrÄdÄjot optimÄlu stratÄÄ£iju tÄs lietoÅ”anai, lai konsekvences labad neradi pÄrmÄrÄ«gu slodzi Kasandrai un izmantojiet to tikai noteiktÄm tabulÄm noteiktÄ laika posmÄ.
Kas notiek ar Kasandru pÄc seÅ”iem dzÄ«ves mÄneÅ”iem? KopumÄ neatrisinÄtu problÄmu nav. MÄs arÄ« nepieļÄvÄm nopietnus negadÄ«jumus vai datu zudumus. JÄ, mums bija jÄdomÄ par dažu problÄmu kompensÄÅ”anu, kas iepriekÅ” nebija raduÅ”Äs, taÄu galu galÄ tas mÅ«su arhitektonisko risinÄjumu Ä«paÅ”i neaptumÅ”oja. Ja vÄlies un nebaidies izmÄÄ£inÄt ko jaunu, un tajÄ paÅ”Ä laikÄ nevÄlies bÅ«t pÄrÄk vÄ«lies, tad sagatavojies tam, ka nekas nav par velti. Jums bÅ«s jÄsaprot, jÄiedziļinÄs dokumentÄcijÄ un jÄsamontÄ savs individuÄlais grÄbeklis vairÄk nekÄ vecajÄ mantotajÄ risinÄjumÄ, un neviena teorija nepateiks priekÅ”Ä, kurÅ” grÄbeklis jÅ«s gaida.
Avots: www.habr.com