Чӣ тавр ба чашмони Кассандра бе гум кардани маълумот, субот ва эътиқод ба NoSQL нигоҳ кардан мумкин аст

Чӣ тавр ба чашмони Кассандра бе гум кардани маълумот, субот ва эътиқод ба NoSQL нигоҳ кардан мумкин аст

Онҳо мегӯянд, ки ҳама чиз дар зиндагӣ ҳадди аққал як бор кӯшиш кардан меарзад. Ва агар шумо ба кор бо DBMS-и релятсионӣ одат карда бошед, пас дар амал бо NoSQL, пеш аз ҳама, ҳадди аққал барои рушди умумӣ, шинос шудан лозим аст. Ҳоло ба далели рушди босуръати ин фанноварӣ дар ин мавзӯъ андешаҳои зиддунақиз ва баҳсҳои шадиде вуҷуд дорад, ки бахусус таваҷҷуҳро афзоиш медиҳад.
Агар шумо ба мохияти хамаи ин бахсхо фахмед, мебинед, ки онхо аз муносибати нодуруст ба миён меоянд. Онҳое, ки пойгоҳи додаҳои NoSQL-ро маҳз дар ҷое, ки ба онҳо лозим аст, истифода мебаранд, қаноатманданд ва аз ин ҳалли ҳама бартариҳоро мегиранд. Ва таҷрибаомӯзоне, ки ба ин технология ҳамчун панацея такя мекунанд, ки дар он ҷо он умуман татбиқ намешавад, ноумед мешаванд ва ҷиҳатҳои тавонои пойгоҳи додаҳои реляциониро аз даст дода, бе фоидаи назаррас.

Ман ба шумо дар бораи таҷрибаи худ дар татбиқи ҳалли дар асоси DBMS Cassandra нақл мекунам: мо бо чӣ рӯ ба рӯ мешудем, чӣ гуна мо аз вазъиятҳои душвор баромадем, оё мо аз истифодаи NoSQL манфиат гирифта тавонистем ва дар куҷо мо бояд кӯшишҳои иловагӣ/маблағҳоро сарф кунем. .
Вазифаи ибтидоӣ сохтани системаест, ки зангҳоро дар як намуди нигаҳдорӣ сабт мекунад.

Принсипи кори система чунин аст. Вуруд файлҳои дорои сохтори мушаххасро дар бар мегирад, ки сохтори зангро тавсиф мекунад. Он гоҳ барнома кафолат медиҳад, ки ин сохтор дар сутунҳои мувофиқ нигоҳ дошта мешавад. Дар оянда зангҳои захирашуда барои нишон додани маълумот дар бораи истеъмоли трафик барои муштариён (пардохтҳо, зангҳо, таърихи тавозун) истифода мешаванд.

Чӣ тавр ба чашмони Кассандра бе гум кардани маълумот, субот ва эътиқод ба NoSQL нигоҳ кардан мумкин аст

Комилан равшан аст, ки чаро онҳо Кассандраро интихоб кардаанд - вай мисли пулемёт менависад, ба осонӣ миқёспазир ва ба хатоҳо таҳаммулпазир аст.

Инак, ин тачриба ба мо дод

Бале, гиреҳи ноком фоҷиа нест. Моҳияти таҳаммулпазирии Кассандра дар ин аст. Аммо гиреҳ метавонад зинда бошад ва дар айни замон дар иҷроиш азоб кашад. Тавре маълум шуд, ин фавран ба кори тамоми кластер таъсир мерасонад.

Кассандра шуморо муҳофизат намекунад, ки Oracle шуморо бо маҳдудиятҳои худ наҷот дод. Ва агар муаллифи ариза инро пешакӣ нафаҳмида бошад, пас дугонае, ки барои Кассандра омадааст, аз аслиаш бадтар нест. Вақте ки он расид, мо онро мегузорем.

IB Кассандраи озодро аз қуттӣ сахт норозӣ кард: Ҳеҷ гуна сабти амалҳои корбар, фарқияти ҳуқуқҳо вуҷуд надорад. Маълумот дар бораи зангҳо маълумоти шахсӣ ҳисобида мешавад, ки ин маънои онро дорад, ки ҳама кӯшишҳои дархост/тағйир додани он бояд бо имкони аудити минбаъда сабт карда шаванд. Инчунин, шумо бояд аз зарурати ҷудо кардани ҳуқуқҳо дар сатҳҳои гуногун барои корбарони гуногун огоҳ бошед. Муҳандиси оддии амалиёт ва супер-админ, ки метавонад тамоми фазои калидҳоро озодона нест кунад, нақшҳо, масъулиятҳо ва салоҳиятҳои гуногун мебошанд. Бе чунин тафриқаи ҳуқуқҳои дастрасӣ, арзиш ва якпорчагии маълумот дарҳол нисбат ба сатҳи ҲАР як мувофиқат зудтар зери шубҳа гузошта мешавад.

Мо ба назар нагирифтаем, ки зангҳо ҳам таҳлили ҷиддиро талаб мекунанд ва ҳам интихоби давравӣ барои шароитҳои гуногун. Азбаски пас аз он сабтҳои интихобшуда бояд нест карда шаванд ва аз нав навишта шаванд (ҳамчун як қисми вазифа, мо бояд раванди навсозии маълумотро дастгирӣ кунем, вақте ки маълумот дар аввал ба ҳалқаи мо нодуруст ворид шуд), Кассандра дар ин ҷо дӯсти мо нест. Кассандра ба хукхона монанд аст - гузоштан қулай аст, аммо шумо онро ҳисоб карда наметавонед.

Мо бо мушкилоти интиқоли маълумот ба минтақаҳои санҷишӣ дучор шудем (5 гиреҳ дар санҷиш ва 20 гиреҳ дар хатм). Дар ин ҳолат, партовро истифода бурдан мумкин нест.

Мушкилоти навсозии схемаи додаҳои барномае, ки ба Кассандра навишта мешавад. Бозгаштан сангҳои зиёди мазорҳоро ба вуҷуд меорад, ки метавонад ба талафоти ҳосилнокӣ бо роҳҳои пешгӯинашаванда оварда расонад.. Кассандра барои сабт оптимизатсия шудааст ва пеш аз навиштан чандон фикр намекунад.Ҳар гуна амалиёт бо маълумоти мавҷуда дар он сабт низ мебошад. Яъне, бо нест кардани чизҳои нодаркор, мо танҳо сабтҳои боз ҳам бештар истеҳсол мекунем ва танҳо баъзе аз онҳо бо сангҳои мазор нишон дода мешаванд.

Вақтсанҷиҳо ҳангоми ворид кардан. Кассандра дар сабт зебо аст, аммо баъзан ҷараёни воридотӣ метавонад ӯро ба таври назаррас ба ҳайрат орад. Ин вақте рӯй медиҳад, ки барнома ба гардиши якчанд сабтҳо шурӯъ мекунад, ки бо ягон сабаб ворид карда намешаванд. Ва ба мо як DBA воқеие лозим аст, ки gc.log, система ва сабтҳои дебагро барои дархостҳои суст, ченакҳо дар интизории фишурда назорат кунад.

Якчанд марказҳои додаҳо дар як кластер. Аз куҷо хондан ва дар куҷо навиштан?
Шояд ба хондан ва навиштан тақсим шавад? Ва агар ин тавр бошад, бояд DC наздиктар ба ариза барои навиштан ё хондан бошад? Ва агар мо сатҳи мувофиқати нодурустро интихоб кунем, мағзи воқеии тақсимшударо ба даст намеорем? Саволҳои зиёде, бисёре аз танзимоти номаълум, имкониятҳое ҳастанд, ки шумо воқеан мехоҳед бо онҳо кор кунед.

Чӣ тавр мо тасмим гирифтем

Барои пешгирии ғарқ шудани гиреҳ, SWAP ғайрифаъол карда шуд. Ва ҳоло, агар норасоии хотира вуҷуд дошта бошад, гиреҳ бояд поён равад ва таваққуфҳои калони gc эҷод накунад.

Ҳамин тавр, мо дигар ба мантиқ дар пойгоҳи додаҳо такя намекунем. Таҳиягарони барномаҳо худро бозомӯзӣ мекунанд ва дар коди худ фаъолона чораҳои эҳтиётиро меандешанд. Ҷойгиркунии равшани беҳтарини нигоҳдорӣ ва коркарди маълумот.

Мо дастгирӣ аз DataStax харидем. Таҳияи Кассандраи қуттӣ аллакай қатъ шудааст (охирин супориш моҳи феврали соли 2018 буд). Ҳамзамон, Datastax хидмати аъло ва шумораи зиёди қарорҳои тағирёфта ва мутобиқшударо барои ҳалли мавҷудаи IP пешниҳод мекунад.

Ман инчунин мехоҳам қайд намоям, ки Кассандра барои дархостҳои интихоб чандон қулай нест. Албатта, CQL як қадами бузург ба пеш барои корбарон аст (дар муқоиса бо Trift). Аммо агар шумо тамоми шӯъбаҳое дошта бошед, ки ба чунин пайвастҳои мувофиқ, филтркунии ройгон аз рӯи ҳама соҳаҳо ва имконоти оптимизатсияи дархостҳо одат карда бошанд ва ин шӯъбаҳо барои ҳалли шикоятҳо ва садамаҳо кор мекунанд, пас ҳалли Кассандра барои онҳо душманона ва аблаҳӣ менамояд. Ва мо тасмим гирифтем, ки ҳамкорони мо чӣ гуна бояд намунаҳо созанд.

Мо ду вариантро баррасӣ кардем.Дар варианти аввал мо зангҳоро на танҳо дар C*, балки дар базаи бойгонии Oracle низ менависем. Танҳо, бар хилофи C*, ин махзани маълумот зангҳоро танҳо барои моҳи ҷорӣ нигоҳ медорад (умқи нигоҳдории зангҳо барои пуркунии парвандаҳо). Дар ин ҷо мо дарҳол мушкилоти зеринро дидем: агар мо синхронӣ нависем, мо ҳама бартариҳои C*-ро, ки бо воридкунии зуд алоқаманданд, аз даст медиҳем; агар асинхронӣ нависем, ҳеҷ кафолате нест, ки ҳама зангҳои зарурӣ ба Oracle ворид мешаванд. Як плюс вуҷуд дошт, аммо як чизи бузург: барои кор ҳамон як Developer PL/SQL-и шинос боқӣ мемонад, яъне мо амалан намунаи “Facade”-ро амалӣ мекунем. Варианти алтернативӣ. Мо механизмеро амалӣ менамоем, ки зангҳоро аз C* холӣ мекунад, баъзе маълумотҳоро барои ғанисозӣ аз ҷадвалҳои мувофиқ дар Oracle мегирад, ба намунаҳои натиҷавӣ ҳамроҳ мешавад ва ба мо натиҷа медиҳад, ки мо баъдан бо ягон роҳ истифода мебарем (бозгашт, такрор, таҳлил, мафтуни). Камбудиҳо: ин раванд хеле зина аст ва илова бар ин, интерфейс барои кормандони амалиёт вуҷуд надорад.

Дар ниҳоят, мо ба варианти дуюм қарор додем. Apache Spark барои намунагирӣ аз зарфҳои гуногун истифода мешуд. Мохияти механизм ба коди Java оварда шудааст, ки бо истифода аз калидҳои муайяншуда (абонент, вақти занг - калидҳои бахш) маълумотро аз C*, инчунин маълумотҳои заруриро барои ғанӣ гардонидан аз ҳама гуна пойгоҳи додаҳо берун мекунад. Пас аз он, он онҳоро ба хотираи худ пайваст мекунад ва натиҷаро дар ҷадвали натиҷавӣ нишон медиҳад. Мо дар болои шарора чеҳраи веб кашем ва он хеле қобили истифода шуд.

Чӣ тавр ба чашмони Кассандра бе гум кардани маълумот, субот ва эътиқод ба NoSQL нигоҳ кардан мумкин аст

Ҳангоми ҳалли масъалаи навсозии маълумоти санҷиши саноатӣ, мо боз якчанд роҳи ҳалли масъаларо баррасӣ кардем. Ҳам тавассути Sstloader интиқол ва ҳам имкони тақсим кардани кластер дар минтақаи санҷиш ба ду қисм, ки ҳар яки онҳо навбат ба як кластер бо як кластери таблиғотӣ тааллуқ доранд ва аз ин рӯ, аз он таъмин карда мешаванд. Ҳангоми навсозии тест, иваз кардани онҳо ба нақша гирифта шуда буд: қисме, ки дар санҷиш кор мекард, тоза карда мешавад ва ба истеҳсолот ворид карда мешавад, ва дигаре ба кор бо додаҳо алоҳида оғоз мекунад. Аммо, пас аз бори дигар фикр кардан, мо маълумоти оқилонаро баҳо додем, ки интиқол додан лозим буд ва фаҳмидем, ки худи зангҳо як ҷузъи номувофиқ барои санҷишҳо мебошанд, ки дар ҳолати зарурӣ зуд тавлид мешаванд ва маҳз маҷмӯи маълумоти таблиғотӣ барои интиқол ба озмоиш. Якчанд объектҳои нигоҳдорӣ мавҷуданд, ки қобили интиқол мебошанд, аммо инҳо аслан якчанд мизҳо ҳастанд ва на он қадар вазнин. Бинобар ин мо ҳамчун роҳи ҳалли, Spark боз ба наҷот омад, ки бо ёрии он мо навишт ва фаъолона истифода бурдани скрипт барои интиқоли маълумот байни ҷадвалҳо оғоз, prom-test.

Сиёсати ҷории мо ба мо имкон медиҳад, ки бидуни бозгашт кор кунем. Пеш аз промо, як санҷиши ҳатмӣ вуҷуд дорад, ки дар он хатогӣ он қадар гарон нест. Дар сурати нокомӣ, шумо ҳамеша метавонед фазои парвандаҳоро партоед ва тамоми схемаро аз аввал печонед.

Барои таъмини дастрасии доимии Кассандра, ба шумо dba лозим аст, на танҳо ӯ. Ҳар як шахсе, ки бо барнома кор мекунад, бояд фаҳмад, ки дар куҷо ва чӣ гуна ба вазъияти мавҷуда нигоҳ кардан ва чӣ гуна мушкилотро сари вақт ташхис кардан лозим аст. Барои ин, мо DataStax OpsCenter (Идоракунӣ ва мониторинги сарбории корӣ), метрикаи системаи Cassandra Driver (шумораи танаффусҳо барои навиштан ба C*, шумораи танаффусҳо барои хондан аз C*, таъхири ҳадди аксар ва ғайра) фаъолона истифода мебарем, амалиётро назорат мекунем. худи барнома, кор бо Кассандра.

Вақте ки мо дар бораи саволи қаблӣ фикр мекардем, мо фаҳмидем, ки хатари асосии мо дар куҷост. Инҳо шаклҳои намоиши додаҳо мебошанд, ки маълумотро аз якчанд дархостҳои мустақил ба нигаҳдорӣ намоиш медиҳанд. Бо ин роҳ мо метавонем маълумоти комилан номувофиқро ба даст орем. Аммо ин мушкилот ҳамон қадар муҳим мебуд, агар мо танҳо бо як маркази маълумот кор мекардем. Ҳамин тавр, чизи оқилонатарин дар ин ҷо, албатта, эҷод кардани функсияи партия барои хондани маълумот дар замимаи тарафи сеюм аст, ки дар як муддати як вақт қабул шудани маълумотро таъмин мекунад. Дар мавриди таќсим ба хондан ва навиштан аз љињати иљро, дар ин љо мо аз хавфе боздоштем, ки бо каме гум шудани робитаи байни DC-њо, мо метавонем бо ду кластер ба њамдигар комилан мувофиќат накунем.

Дар натиҷа, ҳоло дар сатҳи мувофиқат барои навиштани EACH_QUORUM, барои хондан - LOCAL_QUORUM қатъ карда шуд

Таассуроти мухтасар ва хулосахо

Бо мақсади баҳодиҳии ҳалли натиҷавӣ аз нуқтаи назари дастгирии амалиётӣ ва дурнамои рушди минбаъда, мо тасмим гирифтем, ки дар бораи боз дар куҷо татбиқ кардани чунин рушд фикр кунем.

Дарҳол баҳодиҳии маълумот барои барномаҳо ба монанди "Ҳангоми мувофиқ пардохт кардан" (мо маълумотро ба C* бор мекунем, ҳисобкунӣ бо истифода аз скриптҳои Spark), баҳисобгирии даъвоҳо бо ҷамъоварӣ аз рӯи минтақа, нигоҳ доштани нақшҳо ва ҳисоб кардани ҳуқуқҳои дастрасии корбар дар асоси нақш матритса.

Чунон ки мебинед, репертуар васеъ ва гуногун аст. Ва агар мо лагери тарафдорон/мухолифони NoSQL-ро интихоб кунем, пас мо ба тарафдорон ҳамроҳ мешавем, зеро мо бартариҳои худро гирифтем ва маҳз ҳамон ҷое ки интизор будем.

Ҳатто варианти Кассандра аз қуттӣ имкон медиҳад, ки миқёси уфуқӣ дар вақти воқеӣ, комилан бедард ҳалли масъалаи афзоиши маълумот дар система. Мо тавонистем механизми хеле сербориши ҳисобкунии агрегатҳои зангро ба як схемаи алоҳида интиқол диҳем ва инчунин схема ва мантиқи барномаро ҷудо карда, аз таҷрибаи бади навиштани корҳо ва объектҳои фармоишӣ дар худи пойгоҳи додаҳо халос шавем. Мо имконият пайдо кардем, ки интихоб ва конфигуратсия кунем, суръат бахшем, ки дар кадом DC-ҳо ҳисобкуниро анҷом медиҳем ва дар кадомашон маълумотро сабт мекунем, мо худро аз садамаҳои ҳам гиреҳҳои алоҳида ва ҳам дар маҷмӯъ DC суғурта кардем.

Меъмории худро дар лоиҳаҳои нав татбиқ намуда, аллакай таҷрибаи муайяне доштам, ман мехоҳам нозукиҳои дар боло зикршударо фавран ба назар гирам ва баъзе хатогиҳоро пешгирӣ кунам, баъзе гӯшаҳои тезеро, ки дар аввал пешгирӣ кардан мумкин набуд, ҳамвор созам.

Барои мисол, навсозиҳои Кассандраро сари вақт пайгирӣ кунедзеро чанде аз мушкилоте, ки мо дорем, аллакай маълум ва ҳал карда шуда буданд.

Ҳам худи пойгоҳи додаҳо ва ҳам Spark-ро дар як гиреҳ ҷойгир накунед (ё ба таври қатъӣ ба миқдори истифодаи захираҳои иҷозатдодашуда тақсим кунед), зеро Spark метавонад OP-ро аз интизорӣ зиёдтар бихӯрад ва мо аз рӯйхати худ зуд мушкилоти рақами 1-ро мегирем.

Беҳтар кардани мониторинг ва салоҳияти амалиётӣ дар марҳилаи санҷиши лоиҳа. Дар аввал, то ҳадди имкон ҳамаи истеъмолкунандагони эҳтимолии ҳалли моро ба назар гиред, зеро ин сохтори пойгоҳи додаҳо дар ниҳоят аз он вобаста хоҳад буд.

Барои оптимизатсияи имконпазир схемаи ҳосилшударо якчанд маротиба гардиш кунед. Интихоб кунед, ки кадом майдонҳоро сериализатсия кардан мумкин аст. Фаҳмидани он, ки мо бояд кадом ҷадвалҳои иловагиро созем, то дурусттар ва оптималӣ ба инобат гирем ва сипас бо дархост маълумоти заруриро пешниҳод кунем (масалан, бо назардошти он ки мо метавонем як маълумотро дар ҷадвалҳои гуногун бо назардошти тақсимоти гуногун аз рӯи ҷадвал нигоҳ дорем. меъёрҳои гуногун, мо метавонем вақти CPU-ро барои дархостҳои хониш ба таври назаррас сарфа кунем).

Бад не Дарҳол замима кардани TTL ва тоза кардани маълумоти кӯҳнаро таъмин кунед.

Ҳангоми зеркашии маълумот аз Кассандра Мантиқи барнома бояд аз рӯи принсипи FETCH кор кунад, то ки на ҳама сатрҳо якбора ба хотира бор карда шаванд, балки дар гурӯҳҳо интихоб карда шаванд.

Пеш аз интиқол додани лоиҳа ба ҳалли тавсифшуда тавсия дода мешавад таҳаммулпазирии хатогиҳои системаро тавассути гузаронидани як қатор санҷишҳои садама тафтиш кунед, ба монанди талафи маълумот дар як маркази додаҳо, барқарорсозии маълумоти вайроншуда дар тӯли як давраи муайян, тарки шабака байни марказҳои додаҳо. Чунин озмоишҳо на танҳо имкон медиҳанд, ки тарафҳои мусбӣ ва манфии меъмории пешниҳодшуда баҳо дода шаванд, балки инчунин барои муҳандисоне, ки онҳоро мегузаронанд, таҷрибаи хуби гармкунӣ фароҳам меоранд ва маҳорати бадастовардашуда дар сурати такрор шудани камбудиҳои система дар истеҳсолот аз зиёдатӣ дур хоҳад буд.

Агар мо бо иттилооти муҳим кор кунем (масалан, маълумот барои ҳисобкунӣ, ҳисобкунии қарзи муштарӣ), он гоҳ инчунин ба воситаҳое, ки хавфҳои ба вуҷуд омадаро аз хусусиятҳои МДМ коҳиш медиҳанд, диққат додан лозим аст. Масалан, утилитаи nodesync (Datastax) -ро истифода бурда, стратегияи оптималии истифодаи онро бо мақсади таҳия ба хотири мувофиқат, ба Кассандра бори аз ҳад зиёд эҷод накунед ва онро танҳо барои ҷадвалҳои муайян дар давраи муайян истифода баред.

Пас аз шаш моҳи ҳаёт бо Кассандра чӣ мешавад? Умуман, ягон проблемаи халнашуда нест. Мо инчунин ба ягон садамаи ҷиддӣ ё талафи маълумот роҳ надодем. Бале, ба мо лозим омад, ки дар бораи чуброни баъзе проблемахое, ки пеш ба миён наомада буданд, фикр кунем, аммо дар охир ин халли меъмории моро чандон хира накард. Агар шумо хоҳед ва аз кӯшиши чизи нав натарсед ва ҳамзамон намехоҳед, ки аз ҳад зиёд ноумед нашавед, пас омода бошед, ки ҳеҷ чиз ройгон нест. Шумо бояд фаҳмед, ҳуҷҷатҳоро омӯзед ва ракеи шахсии худро бештар аз ҳалли кӯҳнаи кӯҳна ҷамъ кунед ва ҳеҷ назария ба шумо пешакӣ гуфта наметавонад, ки кадом раке шуморо интизор аст.

Манбаъ: will.com

Илова Эзоҳ