Таҳиягарони бештар бояд инро дар бораи пойгоҳи додаҳо донанд

Шарҳ. тарҷума.: Яана Доган як муҳандиси ботаҷриба дар Google мебошад, ки айни замон оид ба мушоҳидаи хидматҳои истеҳсолии ширкат, ки дар Go навишта шудааст, кор мекунад. Дар ин мақола, ки дар байни шунавандагони англисзабон маъруфияти зиёд пайдо кардааст, вай дар 17 пункт тафсилоти муҳими техникии DBMS (ва баъзан системаҳои тақсимшуда), ки барои таҳиягарони барномаҳои калон/талаб муфиданд, ҷамъоварӣ кардааст.

Таҳиягарони бештар бояд инро дар бораи пойгоҳи додаҳо донанд

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

  1. Шумо хушбахт ҳастед, агар 99,999% вақт шабака мушкилотро ба вуҷуд наоварад.
  2. ACID маънои бисёр чизҳои гуногунро дорад.
  3. Ҳар як пойгоҳи додаҳо механизмҳои худро барои таъмини мувофиқат ва ҷудошавӣ дорад.
  4. Бастани оптимистӣ ба наҷот меояд, вақте ки нигоҳ доштани муқаррарии муқаррарӣ душвор аст.
  5. Ба ғайр аз хондани ифлос ва талафоти маълумот дигар аномалияҳо мавҷуданд.
  6. Махзани маълумот ва корбар на ҳамеша дар бораи рафти амал мувофиқат мекунанд.
  7. Шардинги дар сатҳи барномаро берун аз барнома интиқол додан мумкин аст.
  8. Афзоиши худкор метавонад хатарнок бошад.
  9. Маълумоти кӯҳна метавонад муфид бошад ва ба баста шудан лозим нест.
  10. Таҳрифҳо барои ҳама гуна манбаъҳои вақт хосанд.
  11. Таъхир маънои зиёде дорад.
  12. Талаботи иҷроиш бояд барои амалиёти мушаххас арзёбӣ карда шавад.
  13. Амалиётҳои дохилӣ метавонанд хатарнок бошанд.
  14. Амалиёт набояд ба ҳолати дархост вобаста бошад.
  15. Банақшагириҳои дархост метавонанд ба шумо дар бораи пойгоҳи додаҳо бисёр чизҳоро нақл кунанд.
  16. Муҳоҷирати онлайн мушкил аст, аммо имконпазир аст.
  17. Афзоиши назарраси пойгоҳи додаҳо боиси афзоиши пешгӯинашаванда мегардад.

Ман мехостам Эммануэл Одеке, Рейн Ҳенрихс ва дигаронро барои фикру мулоҳизаҳояшон дар бораи нусхаи қаблии ин мақола ташаккур гӯям.

Шумо хушбахт ҳастед, агар 99,999% вақт шабака мушкилотро ба вуҷуд наоварад.

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

Бо сатҳи дастрасии 99,999% барои Spanner (маъзани Google дар саросари ҷаҳон паҳншуда), Google даъво мекунад, ки танҳо 7,6% мушкилот бо шабака алоқаманданд. Дар баробари ин, ширкат шабакаи махсуси худро "сутуни асосии" дастрасии баланд меномад. Омӯзиш Бейлис ва Кингсбери, ки соли 2014 гузаронида шуда буд, яке аз «тасаввуроти нодуруст дар бораи компютерҳои тақсимшуда", ки Питер Дойч соли 1994 таҳия кардааст. Оё шабака воқеан боэътимод аст?

Таҳқиқоти ҳамаҷониба берун аз ширкатҳои азим, ки барои Интернети васеъ гузаронида мешаванд, танҳо вуҷуд надоранд. Инчунин аз бозигарони асосӣ дар бораи чанд фоизи мушкилоти муштариёни онҳо ба шабака марбут будани маълумоти кофӣ вуҷуд надорад. Мо хуб медонем, ки дар стеки шабакавии провайдерҳои абрии калон, ки метавонанд як қисми пурраи Интернетро дар тӯли якчанд соат барканор кунанд, танҳо аз он сабаб, ки онҳо рӯйдодҳои бонуфузанд, ки ба шумораи зиёди одамон ва ширкатҳо таъсир мерасонанд. Қатъи шабака метавонад дар бисёр ҳолатҳо мушкилот ба бор орад, ҳатто агар на ҳамаи ин ҳолатҳо дар маркази таваҷҷӯҳ бошанд. Мизоҷони хидматҳои абрӣ низ дар бораи сабабҳои мушкилот чизе намедонанд. Агар нокомӣ вуҷуд дошта бошад, онро ба хатогии шабакавӣ аз ҷониби провайдери хидматрасон мансуб кардан қариб ғайриимкон аст. Барои онҳо, хидматҳои тарафи сеюм қуттиҳои сиёҳ мебошанд. Бе провайдери бузурги хидматрасонӣ таъсирро арзёбӣ кардан ғайриимкон аст.

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

ACID маънои бисёр чизҳои гуногунро дорад

Ихтисороти ACID маънои Atomicity, Consistency, Isolation, Reliability мебошад. Ин хосиятҳои транзаксияҳо барои таъмини эътибори онҳо дар ҳолати нокомӣ, хатогиҳо, шикасти сахтафзор ва ғайра пешбинӣ шудаанд. Бе ACID ё схемаҳои шабеҳ, барои таҳиягарони барнома фарқ кардани байни онҳо барои чӣ масъуланд ва базаи маълумот барои чӣ масъул аст, душвор хоҳад буд. Аксари пойгоҳи додаҳои транзаксионии релятсионӣ кӯшиш мекунанд, ки ба ACID мутобиқ бошанд, аммо равишҳои нав ба монанди NoSQL боиси пайдо шудани бисёр пойгоҳи додаҳо бе транзаксияҳои ACID шуданд, зеро татбиқи онҳо гарон аст.

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

На ҳар як DBMS ба ACID мувофиқат мекунад; Ҳамзамон, татбиқи пойгоҳи додаҳо, ки ACID-ро дастгирӣ мекунанд, маҷмӯи талаботро ба таври гуногун мефаҳманд. Яке аз сабабҳои ноустувор будани татбиқи ACID дар он аст, ки барои иҷрои талаботҳои ACID бисёр ихтилофҳо бояд анҷом дода шаванд. Эҷодкорон метавонанд пойгоҳи додаҳои худро ҳамчун ба ACID-мувофиқ муаррифӣ кунанд, аммо тафсири ҳолатҳои канорӣ метавонад ба таври назаррас фарқ кунад, инчунин механизми коркарди рӯйдодҳои "гумон". Ҳадди ақал, таҳиягарон метавонанд дар бораи нозукиҳои татбиқи базавӣ дарки сатҳи баландро ба даст оранд, то дарки дурусти рафтори махсус ва тарроҳии тарроҳии онҳо ба даст оранд.

Баҳс дар бораи он ки оё MongoDB ба талаботи ACID мувофиқат мекунад, ҳатто пас аз нашри версияи 4 идома дорад. MongoDB муддати тӯлонӣ дастгирӣ нашудааст дарахтбурӣ, гарчанде ки аз рӯи пешфарз маълумот ба диск на бештар аз як маротиба дар 60 сония ворид карда мешуд. Сенарияи зеринро тасаввур кунед: барнома ду навиштаҷот (w1 ва w2) мегузорад. MongoDB бомуваффақият w1-ро захира мекунад, аммо аз сабаби нокомии сахтафзор w2 гум мешавад.

Таҳиягарони бештар бояд инро дар бораи пойгоҳи додаҳо донанд
Диаграммаи тасвири сенария. MongoDB пеш аз навиштани маълумот ба диск суқут мекунад

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

Ҳар як пойгоҳи додаҳо механизмҳои мутобиқшавӣ ва ҷудокунии худро дорад

Аз талаботи ACID, пайдарпайӣ ва ҷудокунӣ аз шумораи зиёди татбиқҳои гуногун фахр мекунанд, зеро доираи муомилот васеътар аст. Бояд гуфт, ки мутобиқат ва ҷудокунӣ вазифаҳои хеле гаронбаҳо мебошанд. Онҳо ҳамоҳангиро талаб мекунанд ва рақобатро барои мутобиқати маълумот афзоиш медиҳанд. Мушкилии мушкилот ҳангоми зарурати ба таври уфуқӣ васеъ кардани пойгоҳи додаҳо дар якчанд марказҳои додаҳо (хусусан агар онҳо дар минтақаҳои гуногуни ҷуғрофӣ ҷойгир бошанд) ба таври назаррас меафзояд. Ба даст овардани сатҳи баланди мувофиқат хеле душвор аст, зеро он инчунин дастрасиро коҳиш медиҳад ва сегментатсияи шабакаро афзоиш медиҳад. Барои шарҳи бештари ин падида, ман ба шумо маслиҳат медиҳам, ки ба он муроҷиат кунед Теоремаи CAP. Инчунин бояд қайд кард, ки барномаҳо метавонанд миқдори ками номувофиқатиро ҳал кунанд ва барномасозон метавонанд нозукиҳои мушкилотро ба қадри кофӣ дарк кунанд, то мантиқи иловагиро дар барнома амалӣ созанд, то номувофиқиятро бидуни такя ба пойгоҳи додаҳо барои коркарди он истифода баранд.

DBMS аксар вақт сатҳҳои гуногуни ҷудокуниро таъмин мекунанд. Таҳиякунандагони барнома метавонанд дар асоси афзалиятҳои худ яке аз самараноктаринро интихоб кунанд. Изолятсияи паст имкон медиҳад, ки суръат афзоиш ёбад, аммо хатари мусобиқаи маълумотро низ зиёд мекунад. Изолятсияи баланд ин эҳтимолиятро коҳиш медиҳад, аммо корро суст мекунад ва метавонад ба рақобат оварда расонад, ки ба чунин тормозҳо дар пойгоҳ оварда мерасонад, ки нокомиҳо сар мешаванд.

Таҳиягарони бештар бояд инро дар бораи пойгоҳи додаҳо донанд
Баррасии моделҳои мавҷудаи ҳамзамон ва муносибатҳои байни онҳо

Стандарти SQL танҳо чаҳор сатҳи изолятсияро муайян мекунад, гарчанде ки дар назария ва амалия шумораи зиёди онҳо вуҷуд доранд. Jepson.io шарҳи аълои моделҳои ҳамзамон мавҷударо пешниҳод мекунад. Масалан, Google Spanner сериализатсияи берунаро бо ҳамоҳангсозии соат кафолат медиҳад ва гарчанде ки ин қабати изолятсия сахттар аст, он дар қабатҳои стандартии изолятсия муайян карда нашудааст.

Стандарти SQL сатҳҳои изолятсияи зеринро қайд мекунад:

  • Сериализатсияшаванда (аз ҳама сахттарин ва гаронбаҳо): Иҷрои силсилавӣ ба монанди иҷрои пайдарпайи транзаксия ҳамон таъсир дорад. Иҷрои пайдарпай маънои онро дорад, ки ҳар як амалиёти минбаъда танҳо пас аз анҷоми амалиёти қаблӣ оғоз меёбад. Бояд гуфт, ки дарачаи Сериализатсияшаванда аксар вақт ҳамчун изолятсияи фаврӣ (масалан, дар Oracle) бо сабаби тафовут дар тафсир амалӣ карда мешавад, гарчанде ки худи изолятсияи фаврӣ дар стандарти SQL муаррифӣ намешавад.
  • Хониши такроршаванда: Сабтҳои номатлуб дар муомилоти ҷорӣ барои муомилоти ҷорӣ дастрасанд, аммо тағиротҳое, ки бо транзаксияҳои дигар ворид шудаанд (масалан, сатрҳои нав) намоён нест.
  • Хонда шуд: Маълумоти номатлуб барои муомилот дастрас нест. Дар ин ҳолат, транзаксияҳо метавонанд танҳо маълумоти содиршударо бубинанд ва хонданҳои фантомӣ метавонанд ба амал оянд. Агар транзаксия сатрҳои нав ворид ва содир кунад, амалиёти ҷорӣ метавонад ҳангоми пурсиш онҳоро бубинад.
  • Беэътибор хонед (дараҷаи камтарин ва гаронбаҳо): Хониши ифлос иҷозат дода мешавад, транзаксияҳо метавонанд тағироти номатлубро аз ҷониби транзаксияҳои дигар дида шаванд. Дар амал, ин сатҳ метавонад барои ҳисобҳои ноҳамвор, ба монанди пурсишҳо муфид бошад COUNT(*) дар болои миз.

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

Дастгирии сатҳи изолятсия аксар вақт дар DBMS дода мешавад, аммо танҳо омӯзиши бодиққат рафтори он метавонад ошкор кунад, ки воқеан чӣ рӯй дода истодааст.

Таҳиягарони бештар бояд инро дар бораи пойгоҳи додаҳо донанд
Баррасии аномалияҳои ҳамзамон дар сатҳҳои гуногуни ҷудокунӣ барои DBMS-ҳои гуногун

Мартин Клеппман дар лоиҳаи худ эрмитаж Сатҳи ҷудокунии гуногунро муқоиса мекунад, дар бораи аномалияҳои ҳамзамон сӯҳбат мекунад ва оё пойгоҳи дода метавонад ба сатҳи ҷудокунии мушаххас мувофиқат кунад. Тадқиқоти Клеппман нишон медиҳад, ки таҳиягарони пойгоҳи додаҳо дар бораи сатҳи изолятсия чӣ гуна фикр мекунанд.

Бастани оптимистӣ ба наҷот меояд, вақте ки нигоҳ доштани муқаррарии муқаррарӣ душвор аст.

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

Қулфи оптимистӣ усулест, ки ҳангоми хондани сатр версияи он, маблағи назоратӣ ё вақти тағйири охиринро ба назар мегирад. Ин ба шумо имкон медиҳад, то боварӣ ҳосил кунед, ки пеш аз тағир додани вуруд ягон тағироти версияи атомӣ вуҷуд надорад:

UPDATE products
SET name = 'Telegraph receiver', version = 2
WHERE id = 1 AND version = 1

Дар ин ҳолат, навсозии ҷадвал products анҷом дода намешавад, агар амалиёти дигаре қаблан ба ин сатр тағйирот ворид карда шуда бошад. Агар дар ин сатр ягон амалиёти дигар иҷро нашуда бошад, тағирот барои як сатр сурат мегирад ва мо гуфта метавонем, ки навсозӣ муваффақ шуд.

Ба ғайр аз хондани ифлос ва талафоти маълумот дигар аномалияҳо мавҷуданд

Вақте ки сухан дар бораи мутобиқати маълумот меравад, таваҷҷӯҳ ба потенсиали шароити мусобиқа, ки метавонад ба хондани ифлос ва талафоти маълумот оварда расонад, равона карда мешавад. Бо вуҷуди ин, аномалияҳои маълумот бо ин қатъ намешаванд.

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

Масалан, биёед як барномаи мониторингро дида бароем, ки як оператор ҳамеша дар ҳолати занг буданро талаб мекунад:

BEGIN tx1;                      BEGIN tx2;
SELECT COUNT(*)
FROM operators
WHERE oncall = true;
0                               SELECT COUNT(*)
                                FROM operators
                                WHERE oncall = TRUE;
                                0
UPDATE operators                UPDATE operators
SET oncall = TRUE               SET oncall = TRUE
WHERE userId = 4;               WHERE userId = 2;
COMMIT tx1;                     COMMIT tx2;

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

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

Пойгоҳи додаҳо ва корбар на ҳамеша дар бораи чӣ кор кардан мувофиқат мекунанд

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

Ҳангоми таҳия, махсусан ҳангоми кор бо китобхонаҳои блокнашаванда, услуби бад ва хониши паст метавонад корбаронро ба он бовар кунад, ки транзаксияҳо пайдарпай иҷро мешаванд, дар ҳоле ки дар асл онҳо метавонанд ба пойгоҳи додаҳо бо дилхоҳ тартиб ворид шаванд.

Дар назари аввал, дар барномаи зер, T1 ва T2 пайдарпай даъват карда мешаванд, аммо агар ин функсияҳо баста нашуда бошанд ва фавран натиҷаро дар шакл бармегардонанд ваъда медиҳад, пас тартиби зангҳо аз рӯи лаҳзаҳои ворид шудан ба базаи маълумот муайян карда мешавад:

result1 = T1 () // натиҷаҳои воқеӣ ваъдаҳо мебошанд
натиҷа2 = T2 ()

Агар атомӣ талаб карда шавад (яъне ҳама амалиётҳо бояд анҷом дода шаванд ё қатъ карда шаванд) ва пайдарпайӣ муҳим бошад, пас амалиёти T1 ва T2 бояд дар доираи як транзаксия иҷро карда шаванд.

Шардинги дар сатҳи барномаро берун аз барнома интиқол додан мумкин аст

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

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

Таҳиягарони бештар бояд инро дар бораи пойгоҳи додаҳо донанд
Намунаи меъморӣ, ки дар он серверҳои барнома аз хидмати sharding ҷудо карда шудаанд

Гузаронидани sharding ба хидмати алоҳида қобилияти истифодаи стратегияҳои гуногуни shardingро бидуни зарурати дубора ҷойгиркунии барномаҳо васеъ мекунад. Витес намунаи чунин системаи sharding дар сатҳи барнома мебошад. Vitess тақсимоти уфуқӣ барои MySQL-ро таъмин мекунад ва ба мизоҷон имкон медиҳад, ки тавассути протоколи MySQL ба он пайваст шаванд. Система маълумотро ба гиреҳҳои гуногуни MySQL тақсим мекунад, ки дар бораи ҳамдигар чизе намедонанд.

Афзоиши худкор метавонад хатарнок бошад

AUTOINCREMENT роҳи маъмули тавлиди калидҳои ибтидоӣ мебошад. Аксар вақт ҳолатҳое мавҷуданд, ки пойгоҳи додаҳо ҳамчун генераторҳои ID истифода мешаванд ва базаи маълумот ҷадвалҳоеро дар бар мегирад, ки барои тавлиди идентификаторҳо пешбинӣ шудаанд. Якчанд сабабҳо вуҷуд доранд, ки чаро тавлиди калидҳои аввалия бо истифода аз афзоиши худкор аз идеал дур нест:

  • Дар пойгоҳи додаҳои тақсимшуда, афзоиши худкор мушкилоти ҷиддӣ аст. Барои тавлиди ID, қулфи глобалӣ лозим аст. Ба ҷои ин, шумо метавонед UUID тавлид кунед: ин ҳамкорӣ байни гиреҳҳои гуногуни пойгоҳи додаҳоро талаб намекунад. Афзоиши худкор бо қулфҳо метавонад боиси муноқиша гардад ва иҷрои изофаҳоро дар ҳолатҳои тақсимшуда ба таври назаррас коҳиш диҳад. Баъзе DBMS-ҳо (масалан, MySQL) метавонанд конфигуратсияи махсус ва диққати бештарро барои дуруст ташкил кардани такрори мастер-мастер талаб кунанд. Ва ҳангоми конфигуратсия хато кардан осон аст, ки ин боиси нокомии сабт мегардад.
  • Баъзе пойгоҳи додаҳо алгоритмҳои тақсимкунӣ дар асоси калидҳои ибтидоӣ доранд. ID-ҳои пайдарпай метавонад ба нуқтаҳои гарми пешгӯинашаванда ва афзоиши сарборӣ дар баъзе қисмҳо оварда расонад, дар ҳоле ки дигарон бекор мемонанд.
  • Калиди ибтидоӣ роҳи зудтарини дастрасӣ ба сатр дар пойгоҳи додаҳо мебошад. Бо роҳҳои беҳтари муайян кардани сабтҳо, идентификаторҳои пайдарпай метавонад сутуни муҳимтаринро дар ҷадвалҳо ба сутуни бефоида пур аз арзишҳои бемаънӣ табдил диҳад. Аз ин рӯ, то ҳадди имкон, лутфан калиди ибтидоии умумиҷаҳонӣ ва табииро интихоб кунед (масалан, номи корбар).

Пеш аз қабули қарор дар бораи равиш, таъсири худкор афзоишёбандаи ID-ҳо ва UUID-ҳоро ба индексатсия, тақсимкунӣ ва тақсимкунӣ баррасӣ кунед.

Маълумоти кӯҳна метавонад муфид бошад ва қулфро талаб намекунад

Назорати ҳамзамон бисёрсоҳавӣ (MVCC) бисёре аз талаботҳои мувофиқатро, ки дар боло ба таври мухтасар баррасӣ шуда буданд, амалӣ мекунад. Баъзе пойгоҳи додаҳо (масалан, Postgres, Spanner) MVCC-ро барои “таъмин” кардани транзаксияҳо бо аксҳо — версияҳои кӯҳнаи пойгоҳи додаҳо истифода мебаранд. Барои таъмини мувофиқат транзаксияҳои фаврӣ низ метавонанд силсилавӣ карда шаванд. Ҳангоми хондан аз акси кӯҳна маълумоти кӯҳна хонда мешавад.

Хониши маълумоти каме кӯҳна метавонад муфид бошад, масалан, ҳангоми тавлиди таҳлил аз маълумот ё ҳисоб кардани арзишҳои тахминии ҷамъ.

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

Таҳиягарони бештар бояд инро дар бораи пойгоҳи додаҳо донанд
Сервери барнома маълумотро аз нусхаи маҳаллӣ, ки 5 сония кӯҳна шудааст, мехонад, ҳатто агар версияи охирин дар он тарафи Уқёнуси Ором дастрас бошад

DBMS версияҳои кӯҳнаро ба таври худкор тоза мекунанд ва дар баъзе мавридҳо ба шумо имкон медиҳанд, ки ин корро тибқи дархост иҷро кунед. Масалан, Postgres ба корбарон имкон медиҳад, ки кор кунанд VACUUM мувофики талаб ва инчунин давра ба давра ин амалиётро ба таври худкор ичро мекунад. Спаннер як коллектори ахлотро идора мекунад, то аз аксҳои аз як соат калонтар халос шавад.

Ҳама гуна манбаъҳои вақт ба таҳриф дучор мешаванд

Сирри беҳтарин дар илми компютерӣ дар он аст, ки ҳама API-ҳои вақтсозӣ дурӯғ мегӯянд. Дар хакикат машинахои мо вакти хозираро аник намедонанд. Компютерҳо кристаллҳои кварц доранд, ки ларзишҳоро тавлид мекунанд, ки барои нигоҳ доштани вақт истифода мешаванд. Аммо, онҳо ба қадри кофӣ дақиқ нестанд ва метавонанд аз вақти дақиқ пеш/қафо бошанд. Смена метавонад ба 20 сония дар як рӯз расад. Аз ин рӯ, вақт дар компютерҳои мо бояд мунтазам бо компютери шабака ҳамоҳанг карда шавад.

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

Соатҳои атомӣ ва ҳамтоёни GPS барои муайян кардани вақти ҷорӣ беҳтаранд, аммо онҳо гарон ҳастанд ва танзими мураккабро талаб мекунанд, аз ин рӯ онҳоро дар ҳар мошин насб кардан мумкин нест. Аз ин сабаб, марказҳои додаҳо равиши сатҳро истифода мебаранд. Соатҳои атомӣ ва/ё GPS вақти дақиқро нишон медиҳанд, ки баъд аз он тавассути серверҳои дуюмдараҷа ба дигар мошинҳо пахш карда мешавад. Ин маънои онро дорад, ки ҳар як мошин аз вақти дақиқ ҷуброни муайяне хоҳад дошт.

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

Google TrueTime муносибати комилан дигарро мегирад. Аксарияти одамон боварӣ доранд, ки пешрафти Google дар ин самт бо гузариши ғайриқонунӣ ба соатҳои атомӣ ва GPS шарҳ дода мешавад, аммо ин танҳо як қисми тасвири бузург аст. Ин аст, ки чӣ тавр TrueTime кор мекунад:

  • TrueTime ду манбаи гуногунро истифода мебарад: GPS ва соатҳои атомӣ. Ин соатҳо режимҳои нокомии ба ҳам алоқаманд доранд. [барои тафсилот ба саҳифаи 5 нигаред дар ин ҷо - тахминан. тарҷума.), бинобар ин истифодаи якчояи онхо эътимоднокии онро зиёд мекунад.
  • TrueTime дорои API-и ғайриоддӣ мебошад. Он вақтро ҳамчун фосила бо хатогии андозагирӣ ва номуайянии дар он сохташуда бармегардонад. Лаҳзаи воқеии вақт дар байни сарҳадҳои болоӣ ва поёнии фосила аст. Spanner, махзани паҳншудаи Google, танҳо интизор мешавад, ки то он даме, ки метавон гуфт, ки вақти ҷорӣ берун аз доираи диапазон аст. Ин усул каме таъхирро ба система ҷорӣ мекунад, хусусан агар номуайянии устодон баланд бошад, аммо дурустиро ҳатто дар вазъияти дар саросари ҷаҳон паҳншуда таъмин мекунад.

Таҳиягарони бештар бояд инро дар бораи пойгоҳи додаҳо донанд
Ҷузъҳои Spanner TrueTime-ро истифода мебаранд, ки дар он TT.now() фосиларо бармегардонад, бинобар ин Spanner то он даме хоб мекунад, ки боварӣ ҳосил кардан мумкин аст, ки вақти ҷорӣ аз нуқтаи муайян гузаштааст

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

Таъхир маънои зиёде дорад

Агар шумо аз даҳҳо коршиносон пурсед, ки таъхир чист, шумо эҳтимол ҷавобҳои гуногун хоҳед гирифт. Дар DBMS таъхирро аксар вақт "таҳқифоти пойгоҳи додаҳо" меноманд ва аз он чизе, ки муштарӣ қабул мекунад, фарқ мекунад. Гап дар сари он аст, ки муштарӣ маблағи таъхири шабака ва таъхири базаи маълумотро мушоҳида мекунад. Қобилияти ҷудо кардани намуди таъхир ҳангоми ислоҳи мушкилоти афзоянда муҳим аст. Ҳангоми ҷамъоварӣ ва намоиш додани ченакҳо, ҳамеша кӯшиш кунед, ки ба ҳарду намуд диққат диҳед.

Талаботи иҷроиш бояд барои амалиёти мушаххас арзёбӣ карда шавад

Баъзан хусусиятҳои иҷрои DBMS ва маҳдудиятҳои он аз нуқтаи назари интиқоли навиштан/хондан ва таъхир муайян карда мешаванд. Ин шарҳи умумии параметрҳои асосии системаро фароҳам меорад, аммо ҳангоми арзёбии кори МДМ нав, равиши хеле ҳамаҷониба баҳодиҳии амалиёти муҳим (барои ҳар як дархост ва/ё транзаксия) мебошад. Мисолҳо:

  • Ҳангоми ворид кардани сатри нав ба ҷадвали X (бо 50 миллион сатр) бо маҳдудиятҳои муайяншуда ва пуркунии сатрҳо дар ҷадвалҳои алоқаманд, интиқол ва таъхирро нависед.
  • Таъхир дар намоиши дӯстони дӯстони корбари муайян, вақте ки шумораи миёнаи дӯстон 500 аст.
  • Таъхир дар дарёфти 100 сабти беҳтарин аз таърихи корбар вақте ки корбар 500 корбари дигарро бо вурудоти X дар як соат пайгирӣ мекунад.

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

Ҳангоми ҷамъоварии ченакҳо барои ҳар як амалиёт аз кардиналияти баланд огоҳ бошед. Барои ба даст овардани маълумоти боқуввати ислоҳи ислоҳот гузоришҳо, ҷамъоварии рӯйдодҳо ё пайгирии тақсимшударо истифода баред. Дар мақолаи "Мехоҳед таъхирро ислоҳ кунед?» шумо метавонед бо методологияҳои ислоҳи таъхир шинос шавед.

Амалиётҳои дохилӣ метавонанд хатарнок бошанд

На ҳар як DBMS транзаксияҳои лонаро дастгирӣ мекунад, аммо вақте ки онҳо ин корро мекунанд, чунин транзаксияҳо метавонанд ба хатогиҳои ғайричашмдошт оварда расонанд, ки на ҳама вақт ошкор кардан осон нестанд (яъне бояд маълум бошад, ки ягон намуди аномалия вуҷуд дорад).

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

Инкапсулизатсияи транзаксияҳо дар қабатҳои гуногун метавонад ба муомилоти ғайричашмдошти лона оварда расонад ва аз нуқтаи назари хониши рамз, фаҳмидани ниятҳои муаллифро душвор созад. Ба барномаи зерин назар андозед:

with newTransaction():
   Accounts.create("609-543-222")
   with newTransaction():
       Accounts.create("775-988-322")
       throw Rollback();

Натиҷаи рамзи дар боло овардашуда чӣ гуна хоҳад буд? Оё он ҳарду транзаксияро бармегардонад ё танҳо ботин? Чӣ мешавад, агар мо ба қабатҳои сершумори китобхонаҳо такя кунем, ки эҷоди транзаксияҳоро барои мо фаро мегиранд? Оё мо метавонем чунин ҳолатҳоро ошкор ва такмил диҳем?

Тасаввур кунед, ки як қабати маълумот бо якчанд амалиёт (масалан, newAccount) аллакай дар муомилоти худ ба амал бароварда мешавад. Чӣ мешавад, агар шумо онҳоро ҳамчун як қисми мантиқи тиҷории сатҳи болотар иҷро кунед, ки дар доираи транзаксияи худ кор мекунад? Дар ин ҳолат ҷудоӣ ва пайдарпайӣ чӣ гуна хоҳад буд?

function newAccount(id string) {
  with newTransaction():
      Accounts.create(id)
}

Ба ҷои ҷустуҷӯи ҷавоб ба чунин саволҳои беохир, беҳтар аст, ки аз муомилоти лона худдорӣ кунед. Баъд аз ҳама, қабати маълумоти шумо метавонад ба осонӣ амалиёти сатҳи баландро бидуни эҷоди транзаксияҳои худ иҷро кунад. Илова бар ин, худи мантиқи тиҷорат қодир аст, ки транзаксияро оғоз кунад, амалиётро дар он анҷом диҳад, транзаксияро анҷом диҳад ё қатъ кунад.

function newAccount(id string) {
   Accounts.create(id)
}
// In main application:
with newTransaction():
   // Read some data from database for configuration.
   // Generate an ID from the ID service.
   Accounts.create(id)
   Uploads.create(id) // create upload queue for the user.

Амалиёт набояд ба ҳолати дархост вобаста бошад

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

var seq int64
with newTransaction():
    newSeq := atomic.Increment(&seq)
    Entries.query(newSeq)
    // Other operations...

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

Банақшагирандагони дархост метавонанд ба шумо дар бораи базаи маълумот маълумоти зиёд диҳанд

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

SELECT * FROM articles where author = "rakyll" order by title;

Натиҷаҳоро бо ду роҳ гирифтан мумкин аст:

  • Сканкунии пурраи ҷадвал: Шумо метавонед ҳар як сабти ҷадвалро бубинед ва мақолаҳоро бо номи муаллиф мувофиқ баргардонед ва сипас онҳоро фармоиш диҳед.
  • Сканкунии индекс: Шумо метавонед индексро барои пайдо кардани ID-ҳои мувофиқ истифода баред, он сатрҳоро гиред ва сипас онҳоро фармоиш диҳед.

Вазифаи банақшагири дархост муайян кардани стратегияи беҳтарин аст. Бояд ба назар гирифт, ки банақшагириҳои дархост танҳо қобилиятҳои пешгӯии маҳдуд доранд. Ин метавонад ба қарорҳои бад оварда расонад. DBA-ҳо ё таҳиягарон метавонанд онҳоро барои ташхис ва дуруст танзим кардани дархостҳои иҷронашаванда истифода баранд. Версияҳои нави DBMS метавонанд банақшагирии дархостҳоро танзим кунанд ва худташхис метавонад ҳангоми навсозии пойгоҳи додаҳо кӯмак кунад, агар версияи нав ба мушкилоти иҷроиш оварда расонад. Гузоришҳои сусти дархостҳо, гузоришҳои масъалаи таъхир ё омори вақти иҷро метавонанд дар муайян кардани дархостҳое, ки ба оптимизатсия ниёз доранд, кӯмак расонанд.

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

Муҳоҷирати онлайн мушкил, вале имконпазир аст

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

Моделҳои гуногуни муҳоҷирати онлайн мавҷуданд. Инак яке аз онҳо:

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

Барои маълумоти иловагӣ, ман тавсия медиҳам, ки тамос гиред мақола, ки стратегияи муҳоҷирати Stripe дар асоси ин моделро тафсилот медиҳад.

Афзоиши назарраси пойгоҳи додаҳо боиси афзоиши пешгӯинашаванда мегардад

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

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

...

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

PS

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ