HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Конфронси навбатии HighLoad++ 6 ва 7 апрели соли 2020 дар Санкт-Петербург баргузор мешавад.
Тафсилот ва чиптаҳо пайванд. HighLoad++ Сибир 2019. Толори "Красноярск". 25 июнь, соати 12:00. Тезисхо ва муаррифӣ.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

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

Михаил Тюленев (минбаъд - МТ): – Ман дар бораи мутобиқати сабабҳо сӯҳбат хоҳам кард - ин хусусиятест, ки мо дар MongoDB кор кардем. Ман дар як гурӯҳи системаҳои тақсимшуда кор мекунам, мо онро тақрибан ду сол пеш карда будем.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

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

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

Мутобиқати сабабҳо. Биёед мафҳумҳоро муайян кунем

Барои оғоз, ман мехоҳам ба таври умумӣ бигӯям, ки мутобиқати сабабҳо чист. Ду қаҳрамон вуҷуд доранд - Леонард ва Пенни (серияҳои телевизионии "Назарияи таркиши бузург"):

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Фарз мекунем, ки Пенни дар Аврупо аст ва Леонард мехоҳад ба ӯ як зиёфати ногаҳонӣ гузаронад. Ва ӯ наметавонад чизеро беҳтар аз хориҷ кардани вай аз рӯйхати дӯстонаш ва ба ҳама дӯстонаш дар навор фиристад: "Биёед Пенниро хушбахт кунем!" (ӯ дар Аврупо аст, дар вақти хобаш ҳама инро намебинад ва дида наметавонад, зеро дар он ҷо нест). Дар ниҳоят, вай ин паёмро нест мекунад, онро аз канал нест мекунад ва дастрасиро барқарор мекунад, то чизеро пай набарад ва ҷанҷол вуҷуд надошта бошад.
Ин ҳама хуб ва хуб аст, аммо биёед фарз кунем, ки система тақсим карда шудааст ва кор каме нодуруст рафт. Масалан, он метавонад рӯй диҳад, ки маҳдудияти дастрасии Пенни пас аз пайдо шудани ин паём рух дод, агар ҳодисаҳо аз рӯи сабаб ва натиҷа алоқаманд набошанд. Дар асл, ин як мисолест, ки барои иҷрои вазифаи тиҷоратӣ (дар ин ҳолат) мувофиқати сабабҳо талаб карда мешавад.

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

Моделҳои мутобиқат

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

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

Аз ин рӯ, моделҳои ҳамоҳангӣ танҳо ба системаҳои тақсимшуда истифода мешаванд. Ҳама системаҳое, ки қаблан вуҷуд доштанд ва дар як миқёси амудӣ кор мекарданд, ба чунин мушкилот дучор нашуданд. Як кэши буферӣ вуҷуд дошт ва ҳама чиз ҳамеша аз он хонда мешуд.

Модели қавӣ

Дар асл, модели аввалин Стронг аст (ё хати баландшавӣ, тавре ки онро аксар вақт меноманд). Ин як модели мутобиқатест, ки кафолат медиҳад, ки ҳар як тағирот, вақте ки он рух додааст, ба ҳама корбарони система намоён аст.

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

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

Сабаб

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

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

Чорабиниҳо

Модели сеюм мувофиқати ниҳоӣ мебошад. Ин чизест, ки комилан ҳама системаҳои тақсимшуда дастгирӣ мекунанд, модели ҳадди аққал, ки умуман маъно дорад. Ин маънои зеринро дорад: вақте ки мо дар маълумот баъзе тағирот дорем, дар баъзе маврид онҳо мувофиқат мекунанд.

Дар чунин лахза вай чизе намегуяд, вагарна вай ба Пайвастани беруна мубаддал мешуд — ин хикояи тамоман дигар мебуд. Бо вуҷуди ин, ин модели хеле маъмул аст, маъмултарин. Бо нобаёнӣ, ҳама корбарони системаҳои тақсимшуда Consistency Eventual -ро истифода мебаранд.

Мехоҳам чанд мисоли муқоисавӣ оварам:

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Ин тирҳо чӣ маъно доранд?

  • Таъхир. Бо зиёд шудани қувваи мутобиқат, он бо сабабҳои маълум калонтар мешавад: ба шумо лозим аст, ки сабтҳои бештар гиред, аз ҳама ҳостҳо ва гиреҳҳое, ки дар кластер иштирок мекунанд, тасдиқ кунед, ки маълумот аллакай мавҷуд аст. Мувофиқи он, Consistency Eventual ҷавоби зудтаринро дорад, зеро дар он ҷо, чун қоида, шумо ҳатто метавонед онро ба хотира гузоред ва ин аслан кофӣ хоҳад буд.
  • Мавҷудият. Агар мо инро қобилияти вокуниш ба система дар ҳузури танаффусҳои шабака, тақсимот ё ягон навъ нокомӣ дарк кунем, таҳаммулпазирии хатогиҳо бо коҳиш ёфтани модели мувофиқат зиёд мешавад, зеро барои мо кофӣ аст, ки як мизбон зиндагӣ кунад ва дар айни замон вақт баъзе маълумотҳоро ба вуҷуд меорад. Мутобиқати ниҳоӣ дар бораи маълумот ҳеҷ чизро кафолат намедиҳад - он метавонад ҳама чиз бошад.
  • Аномалияҳо. Дар баробари ин, албатта, шумораи аномалияхо зиёд мешавад. Дар консентратсияи қавӣ онҳо тақрибан набояд вуҷуд дошта бошанд, аммо дар Consistency ниҳоӣ онҳо метавонанд ҳама чиз бошанд. Саволе ба миён меояд: чаро одамон Consistency Eventual-ро интихоб мекунанд, агар он дорои аномалияҳо бошад? Ҷавоб ин аст, ки моделҳои Consistency Eventual Appliance мебошанд ва аномалияҳо вуҷуд доранд, масалан, дар як муддати кӯтоҳ; мумкин аст, ки ба истифода устоди хондан ва бештар ё камтар хондани маълумоти пайваста; Аксар вақт мумкин аст, ки моделҳои устувории қавӣ истифода шаванд. Дар амал ин кор мекунад ва аксар вакт шумораи аномалияхо дар вакташ махдуд мешавад.

Теоремаи CAP

Вақте ки шумо калимаҳои мувофиқат, дастрасиро мебинед - ба фикри шумо чӣ меояд? Ин дуруст аст - теоремаи CAP! Ҳоло ман мехоҳам афсонаро рафъ кунам... Ин ман нестам - ин Мартин Клепман аст, ки мақолаи олиҷаноб, китоби аҷибе навишт.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Теоремаи CAP як принсипест, ки дар солҳои 2000-ум таҳия шудааст, ки Пайвастагӣ, Дастрасӣ, Қисмҳо: ҳар дуро бигиред ва шумо серо интихоб карда наметавонед. Ин як принсипи муайяне буд. Онро ҳамчун теорема пас аз чанд сол Гилберт ва Линч исбот карданд. Он гоҳ ин ҳамчун мантра истифода шуд - системаҳо ба CA, CP, AP ва ғайра тақсим карда шуданд.

Ин теорема воқеан барои ҳолатҳои зерин исбот карда шуд... Аввалан, Мавҷудият ҳамчун қимати доимӣ аз сифр то садҳо ҳисоб намешуд (0 - система "мурда аст", 100 - зуд ҷавоб медиҳад; мо ба чунин баррасӣ одат кардаем) , балки ҳамчун моликияти алгоритм, ки кафолат медиҳад, ки барои тамоми иҷрои он маълумот бармегардад.

Дар бораи вақти вокуниш умуман сухане нест! Алгоритм вуҷуд дорад, ки маълумотро пас аз 100 сол бармегардонад - як алгоритми комилан олиҷаноби дастрас, ки қисми теоремаи CAP мебошад.
Дуюм: теорема барои тағирёбии арзишҳои як калид исбот карда шуд, сарфи назар аз он, ки ин тағиротҳо тағирёбандаанд. Ин маънои онро дорад, ки дар асл онҳо амалан истифода намешаванд, зеро моделҳо гуногун мебошанд Мутобиқати ниҳоӣ, Пайвастани қавӣ (шояд).

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

Пайвастагии сабабҳо модели қавитарин аст

Ҳоло чӣ рӯй дода истодааст, шумо метавонед ҳар се чизро ба даст оред: Пайвастагӣ, Дастрасӣ бо истифода аз қисмҳо. Махсусан, мутобиқати сабабҳо қавитарин модели мувофиқатест, ки то ҳол дар ҳузури Partitions (танаффусҳо дар шабака) кор мекунад. Барои хамин хам ба он шавку хаваси калон дорад ва барои хамин мо онро кабул кардем.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

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

Ошхонаи дохилии MongoDB

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

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

MongoDB (минбаъд "MongoDB" номида мешавад) як системаи тақсимшуда мебошад, ки миқёси уфуқӣ, яъне sharding -ро дастгирӣ мекунад; ва дар дохили ҳар як порча он инчунин зиёдатӣ аз маълумот, яъне такрориро дастгирӣ мекунад.

Sharding дар MongoDB (на пойгоҳи додаҳои релятсионӣ) мувозинати автоматиро иҷро мекунад, яъне ҳар як маҷмӯи ҳуҷҷатҳо (ё “ҷадвал” аз нуқтаи назари маълумоти релятсионӣ) ба қисмҳо тақсим карда мешавад ва сервер онҳоро ба таври худкор байни пораҳо интиқол медиҳад.

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

Боз як нуктаи муҳим: MongoDB як устоди ягона аст. Як ибтидоӣ вуҷуд дорад - он метавонад сабтҳоеро гирад, ки калидҳои дорои онро дастгирӣ мекунанд. Шумо наметавонед навиштани Мулти-мастер кор кунед.

Мо барориши 4.2 -ро кардем - чизҳои нави ҷолиб дар он ҷо пайдо шуданд. Аз ҷумла, онҳо Lucene - ҷустуҷӯ - яъне java-и иҷрошавандаро мустақиман ба Mongo ворид карданд ва дар он ҷо имкон пайдо шуд, ки ҷустуҷӯ тавассути Lucene, ҳамон тавре ки дар Elastica анҷом дода шавад.

Ва онҳо маҳсулоти нав сохтанд - Диаграммаҳо, он инчунин дар Атлас дастрас аст (Cloud-и худи Mongo). Онҳо як сатҳи ройгон доранд - шумо метавонед бо он бозӣ кунед. Ба ман Диаграммаҳо хеле маъқул буд - визуализатсияи маълумот, хеле беихтиёрона.

Компонентҳо Мутобиқати сабабҳо

Ман тақрибан 230 мақоларо ҳисоб кардам, ки дар ин мавзӯъ нашр шудаанд - аз Лесли Ламперт. Акнун аз ёди худ чанд порча аз ин маводхоро ба шумо мерасонам.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Ҳамааш аз мақолаи Лесли Ламперт оғоз ёфт, ки дар солҳои 1970 навишта шудааст. Тавре ки шумо мебинед, баъзе тадқиқотҳо дар ин мавзӯъ идома доранд. Ҳоло мутобиқати Causal дар робита бо рушди системаҳои тақсимшуда таваҷҷӯҳ зоҳир мекунад.

Маҳдудиятҳо

Кадом маҳдудиятҳо вуҷуд доранд? Ин воқеан яке аз нуктаҳои асосӣ аст, зеро маҳдудиятҳое, ки системаи истеҳсолӣ ҷорӣ мекунад, аз маҳдудиятҳое, ки дар мақолаҳои илмӣ мавҷуданд, хеле фарқ мекунанд. Онҳо аксар вақт хеле сунъӣ мебошанд.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

  • Аввалан, "MongoDB" як устоди ягона аст, тавре ки ман гуфтам (ин хеле содда мекунад).
  • Мо чунин мешуморем, ки система бояд кариб 10 хазор дона шардро дастгирй кунад. Мо наметавонем ягон қарори меъморӣ қабул кунем, ки ин арзишро ба таври возеҳ маҳдуд кунад.
  • Мо абр дорем, аммо мо фикр мекунем, ки шахс бояд ҳангоме ки бинариро зеркашӣ мекунад, онро дар ноутбуки худ иҷро мекунад ва ҳама чиз хуб кор мекунад, бояд имконият дошта бошад.
  • Мо чизеро тахмин мезанем, ки Тадқиқот хеле кам тахмин мекунад: мизоҷони беруна метавонанд ҳар чизеро, ки мехоҳанд, иҷро кунанд. MongoDB манбаи кушода аст. Мувофиқи он, мизоҷон метавонанд хеле оқил ва хашмгин бошанд - онҳо метавонанд ҳама чизро вайрон кунанд. Мо тахмин мезанем, ки Фейлорҳои Византия метавонанд пайдо шаванд.
  • Барои муштариёни беруна, ки берун аз периметр ҳастанд, як маҳдудияти муҳим вуҷуд дорад: агар ин хусусият ғайрифаъол бошад, пас ҳеҷ гуна таназзули кор набояд мушоҳида карда шавад.
  • Нуктаи дигар умуман зидди академӣ аст: мутобиқати версияҳои қаблӣ ва оянда. Драйверҳои кӯҳна бояд навсозиҳои навро дастгирӣ кунанд ва пойгоҳи додаҳо бояд драйверҳои кӯҳнаро дастгирӣ кунанд.

Умуман, ҳамаи ин маҳдудиятҳоро ҷорӣ мекунад.

Компонентҳои мутобиқати сабабӣ

Ҳоло ман дар бораи баъзе ҷузъҳо сӯҳбат мекунам. Агар мо мутобиқати сабабҳоро дар маҷмӯъ баррасӣ кунем, мо метавонем блокҳоро интихоб кунем. Мо аз корҳое, ки ба як блоки муайян тааллуқ доранд, интихоб кардем: Пайгирии вобастагӣ, интихоби соатҳо, чӣ гуна ин соатҳоро бо ҳамдигар ҳамоҳанг кардан мумкин аст ва чӣ гуна мо амниятро таъмин мекунем - ин тарҳи тахминии он чизест, ки ман дар бораи он сӯҳбат мекунам:

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Пайгирии пурраи вобастагӣ

Чаро он лозим аст? Ҳамин тавр, вақте ки маълумот такрор карда мешавад, ҳар як сабт, ҳар як тағирёбии маълумот дорои маълумот дар бораи он, ки тағирот аз он вобаста аст. Тағйироти аввалин ва содда ин аст, ки ҳар як паёме, ки сабт дорои маълумот дар бораи паёмҳои қаблӣ мебошад:

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

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

Чаро мо тасмим гирифтем, ки ин равишро истифода накунем (пайгирии пурра)? Аён аст, ки ин равиш ғайриимкон аст: ҳама гуна тағирот ба шабакаи иҷтимоӣ аз ҳама тағйироти қаблӣ дар ин шабакаи иҷтимоӣ, интиқол, масалан, Facebook ё ВКонтакте дар ҳар навсозӣ вобаста аст. Бо вуҷуди ин, тадқиқоти зиёде дар бораи пайгирии пурраи вобастагӣ вуҷуд дорад - ин шабакаҳои пеш аз иҷтимоӣ мебошанд; барои баъзе ҳолатҳо он воқеан кор мекунад.

Пайгирии возеҳи вобастагӣ

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

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Вай мебинад, ки сабти 5 аз сабтҳои 1, 2, 3, 4 вобаста аст - мутаносибан, вай интизор мешавад, ки муштарӣ ба тағиротҳои бо қарори дастрасии Пенни воридшуда, вақте ки ҳама тағйироти қаблӣ аллакай аз пойгоҳи додаҳо гузаштаанд, дастрас шавад.

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

Соати Лампорт

Онҳо хеле кӯҳнаанд. Соати Lamport маънои онро дорад, ки ин вобастагӣ ба функсияи скалярӣ ҷамъ карда мешаванд, ки онро Соати Лампорт меноманд.

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

Ман он пораи калонро ба ду тақсим кардам, то равшан шавад: Дӯстон метавонанд дар як гиреҳ зиндагӣ кунанд, ки порчаи коллексияро дар бар мегирад ва Feed метавонад дар гиреҳи дигар, ки порчаи ин коллексияро дар бар мегирад, зиндагӣ кунад. Оё маълум аст, ки онҳо чӣ гуна аз хатти худ баромада метавонанд? Аввалан канал мегӯяд: "Такрори такрорӣ" ва сипас Дӯстон. Агар система ягон кафолате надиҳад, ки канал то он даме, ки вобастагии Дӯстон дар коллексияи Дӯстон низ расонида нашавад, намоиш дода намешавад, мо маҳз вазъиятеро, ки ман зикр кардам, хоҳем дошт.

Шумо мебинед, ки чӣ тавр вақти муқовимат дар Feed мантиқан зиёд мешавад:

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Ҳамин тавр, хосияти асосии ин Соати Лампорт ва мувофиқати сабабҳо (тавассути Лампорт Соат шарҳ дода шудааст) ин аст: агар мо Ҳодисаҳои А ва В дошта бошем ва Ҳодисаи В аз Ҳодисаи А* вобаста бошад, пас аз он бармеояд, ки Вақти мантиқии ҳодисаи А аз он камтар аст. LogicalTime аз Ҳодисаи B.

* Баъзан онҳо инчунин мегӯянд, ки А пеш аз В рӯй дода буд, яъне А пеш аз В рӯй додааст - ин муносибати муайянест, ки тамоми маҷмӯи ҳодисаҳои умумиро қисман фармоиш медиҳад.

Баръакс нодуруст аст. Ин аст, дар асл яке аз камбудиҳои асосии Lamport Clock - тартиби қисман. Дар бораи ходисахои хамзамон мафхум мавчуд аст, яъне ходисахое, ки дар онхо на (А пеш аз В рух дода буд) ва на (А пеш аз Б рух додааст). Намунае метавон илова кард, ки Леонард ба шахси дигар ҳамчун дӯст (ҳатто на Леонард, балки Шелдон, масалан).
Ин хосиятест, ки аксар вақт ҳангоми кор бо соатҳои Lamport истифода мешавад: онҳо махсусан ба функсия назар мекунанд ва аз ин ба хулосае меоянд, ки шояд ин ҳодисаҳо вобаста бошанд. Зеро як роҳ дуруст аст: агар LogicalTime A аз LogicalTime B камтар бошад, пас В пеш аз A рӯй дода наметавонад; ва агар бештар бошад, пас шояд.

Соати векторӣ

Рушди мантиқии соати Lamport соати векторӣ мебошад. Онҳо бо он фарқ мекунанд, ки ҳар як гиреҳи ин ҷо соати алоҳидаи худро дорад ва онҳо ҳамчун вектор интиқол дода мешаванд.
Дар ин ҳолат, шумо мебинед, ки индекси сифрии вектор барои Feed масъул аст ва индекси якуми вектор барои Дӯстон (ҳар яке аз ин гиреҳҳо) аст. Ва акнун онҳо зиёд мешаванд: индекси сифрии "Овор" ҳангоми навиштан меафзояд - 1, 2, 3:

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Чаро соати Vector беҳтар аст? Зеро онҳо ба шумо имкон медиҳанд, ки фаҳмед, ки кадом ҳодисаҳо дар як вақт ва кай дар гиреҳҳои гуногун рух медиҳанд. Ин барои системаи sharding ба монанди MongoDB хеле муҳим аст. Бо вуҷуди ин, мо инро интихоб накардаем, гарчанде ки ин як чизи аҷиб аст ва он хеле хуб кор мекунад ва шояд ба мо мувофиқ бошад...

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

Spanner TrueTime. Соати атомӣ

Ман гуфтам, ки дар бораи Спаннер ҳикояе хоҳад буд. Ин чизи аҷибест, ки рост аз асри XNUMX аст: соатҳои атомӣ, ҳамоҳангсозии GPS.

Идея чист? "Spanner" як системаи Google мебошад, ки ба наздикӣ ҳатто барои одамон дастрас шуд (онҳо ба он SQL илова карданд). Ҳар як транзаксия дар он ҷо мӯҳри вақт дорад. Азбаски вакт синхрон карда мешавад*, ба хар як ходиса вакти муайян таъин кардан мумкин аст — соатхои атомй вакти интизорй доранд, ки баъд аз он вакти дигар «руй додан» кафолат дода мешавад.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Ҳамин тариқ, танҳо бо навиштан ба пойгоҳи додаҳо ва интизории чанд вақт, Сериализатсияи ҳодиса ба таври худкор кафолат дода мешавад. Онҳо модели устувортаринро доранд, ки онро дар асл тасаввур кардан мумкин аст - ин Пайвастани беруна аст.

* Ин мушкилоти асосии соатҳои Lampart аст - онҳо ҳеҷ гоҳ дар системаҳои тақсимшуда синхронӣ нестанд. Онҳо метавонанд аз ҳам ҷудо шаванд; ҳатто бо NTP, онҳо то ҳол он қадар хуб кор намекунанд. "Spanner" соати атомӣ дорад ва синхронизатсия, ба назар мерасад, микросонияҳо аст.

Чаро мо интихоб накардем? Мо гумон намекунем, ки корбарони мо соати атомии дарунсохт доранд. Вақте ки онҳо пайдо мешаванд, ки дар ҳар як ноутбук сохта мешаванд, як навъ ҳамоҳангсозии олиҷаноби GPS хоҳад буд - пас ҳа... Аммо ҳоло беҳтарини имконпазир Amazon, Base Stations - барои мухлисон аст... Барои ҳамин мо дигар соатҳоро истифода мебарем. .

Соати гибридӣ

Ин воқеан он чизест, ки дар MongoDB ҳангоми таъмини мувофиқати Causal ишора мекунад. Онҳо чӣ гуна гибрид мебошанд? Гибрид арзиши скалярӣ аст, аммо он ду ҷузъ дорад:

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

  • Аввалин давраи Unix аст (аз “оғози ҷаҳони компютерӣ” чанд сония гузашт).
  • Дуюм ин каме афзоиш аст, инчунин int 32-бити имзонашуда.

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

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

Ман ба шумо сабаби муҳимтаринро танҳо ба шумо мегӯям (лутфан, ба касе нагӯед)! Мо ин корро кардем, зеро он чизест, ки дар MongoDB OpLog маълумоти муташаккил ва индексатсияшуда ба назар мерасад. OpLog як сохтори додаҳост, ки комилан ҳама тағиротҳоро дар пойгоҳи додаҳо дар бар мегирад: онҳо аввал ба OpLog мераванд ва баъдан онҳо ба худи нигаҳдорӣ дар ҳолате татбиқ карда мешаванд, ки он санаи такрорӣ ё пора аст.

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

Синхронизатсияи соат

Дар адабиёти илмӣ якчанд усулҳои ҳамоҳангсозӣ мавҷуданд. Ман дар бораи ҳамоҳангсозӣ сухан меронам, вақте ки мо ду пораи гуногун дорем. Агар як маҷмӯаи реплика мавҷуд бошад, ҳеҷ гуна ҳамоҳангсозӣ лозим нест: ин "устои ягона" аст; мо як OpLog дорем, ки ҳама тағирот ба он дохил мешаванд - дар ин ҳолат ҳама чиз аллакай дар худи "Oplog" пайдарпай тартиб дода мешавад. Аммо агар мо ду пораи гуногун дошта бошем, дар ин ҷо ҳамоҳангсозии вақт муҳим аст. Дар ин ҷо соати векторӣ бештар кӯмак кард! Аммо мо онҳоро надорем.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Дуюм мувофиқ аст - ин "Набзи дил" аст. Мубодилаи баъзе сигналҳое, ки дар ҳар воҳиди вақт рух медиҳанд, имконпазир аст. Аммо тапиши дил хеле суст аст, мо наметавонем ба мизоҷи худ таъхирро таъмин кунем.

Вақти ҳақиқӣ, албатта, чизи аҷиб аст. Аммо, боз ҳам, ин эҳтимол оянда аст... Ҳарчанд онро аллакай дар Атлас анҷом додан мумкин аст, аллакай синхронизаторҳои зуди "Amazon" вуҷуд доранд. Аммо он барои ҳама дастрас нахоҳад буд.

Ғайбат ин аст, ки ҳама паёмҳо вақтро дар бар мегиранд. Ин тақрибан он чизест, ки мо истифода мебарем. Ҳар як паём байни гиреҳҳо, драйвер, роутери гиреҳи додаҳо, комилан ҳама чиз барои MongoDB як навъ элемент, ҷузъи пойгоҳи додаҳоест, ки дорои соати кор мекунад. Онҳо дар ҳама ҷо маънои замони гибридӣ доранд, интиқол дода мешавад. 64 бит? Ин имкон медихад, ин имконпазир аст.

Чӣ тавр ҳамаи он якҷоя кор мекунад?

Дар ин ҷо ман як маҷмӯаи репликаро мебинам, то онро каме осонтар кунад. Дараҷаи ибтидоӣ ва миёна мавҷуданд. Миёнаравӣ такрор мекунад ва на ҳамеша бо ибтидоӣ комилан ҳамоҳанг карда мешавад.

Воридшавӣ ба "Примерӣ" бо арзиши муайяни вақт рух медиҳад. Ин илова шумораи дохилиро 11 зиёд мекунад, агар ин ҳадди аксар бошад. Ё он арзишҳои соатро тафтиш мекунад ва бо соат ҳамоҳанг мешавад, агар қиматҳои соат бузургтар бошанд. Ин ба шумо имкон медиҳад, ки аз рӯи вақт ташкил кунед.

Пас аз он ки ӯ сабт мекунад, як лаҳзаи муҳим рух медиҳад. Соат дар "MongoDB" аст ва танҳо дар сурати навиштан ба "Oplog" зиёд мешавад. Ин ҳодисаест, ки ҳолати системаро тағир медиҳад. Дар ҳама мақолаҳои классикӣ воқеае ҳисобида мешавад, ки паём ба гиреҳ ворид мешавад: паём расид, яъне система ҳолати худро тағир додааст.

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

Қимате, ки аллакай ба "Oplog" навишта шудааст, баргардонида мешавад - мо медонем, ки "Oplog" аллакай ин арзишро дар бар мегирад ва вақти он 12 аст. Ҳоло, гӯем, хондан аз гиреҳи дигар (Дуюм) оғоз мешавад ва он пас аз ClusterTime -ро дар паём. Ӯ мегӯяд: "Ба ман ҳама чизе лозим аст, ки ҳадди аққал баъд аз 12 ё дар давоми дувоздаҳ рӯй дод" (ба расми боло нигаред).

Ин аст он чизе ки Causal a consent (CAT) номида мешавад. Дар назария чунин мафҳум вуҷуд дорад, ки ин як буридаи вақт аст, ки ба худ мувофиқ аст. Дар ин ҳолат, мо метавонем бигӯем, ки ин ҳолати системаест, ки дар вақти 12 мушоҳида шудааст.

Ҳоло дар ин ҷо ҳеҷ чиз вуҷуд надорад, зеро ин гуна вазъиятро тақлид мекунад, вақте ки шумо ба дуюмдараҷа барои такрори маълумот аз ибтидоӣ ниёз доред. Ӯ интизор аст ... Ва ҳоло маълумот расид - ӯ ин арзишҳоро бармегардонад.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Ин тақрибан ҳамин тавр аст, ки ҳамааш кор мекунад. Қариб.

"Қариб" чӣ маъно дорад? Фарз мекунем, ки касе ҳаст, ки хонда ва фаҳмид, ки ин ҳама чӣ гуна кор мекунад. Ман фаҳмидам, ки ҳар дафъае, ки ClusterTime рух медиҳад, он соати мантиқии дохилиро нав мекунад ва пас вуруди навбатӣ як маротиба зиёд мешавад. Ин функсия 20 сатрро мегирад. Фарз мекунем, ки ин шахс рақами калонтарини 64-битро бо як минус интиқол медиҳад.

Чаро "минус як"? Азбаски соати дохилӣ ба ин қиммат иваз карда мешавад (албатта, ин бузургтарин имконпазир ва бузургтар аз вақти ҷорӣ аст), пас дар "Oplog" вуруд ба амал меояд ва соат бо воҳиди дигар афзоиш хоҳад ёфт - ва аллакай вуҷуд дорад арзиши максималӣ бошад (ҳамаи воҳидҳо вуҷуд доранд, ҷои дигаре барои рафтан нест) , unsaint ints).

Маълум аст, ки пас аз ин система барои ҳама чиз комилан дастнорас мегардад. Онро танхо холй кардан ва тоза кардан мумкин аст — кори бисьёри дастй. Мавҷудияти пурра:

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Гузашта аз ин, агар ин дар ҷои дигар такрор карда шавад, пас тамоми кластер ба поён меафтад. Ҳолати комилан қобили қабул нест, ки ҳар кас метавонад хеле зуд ва осон ташкил кунад! Бинобар ин мо ин лахзаро яке аз мухимтарин лахзахо хисоб мекардем. Чӣ тавр онро пешгирӣ кардан мумкин аст?

Роҳи мо ин имзо кардани clusterTime аст

Ин аст, ки он дар паём (пеш аз матни кабуд) интиқол дода мешавад. Аммо мо инчунин ба тавлиди имзо шурӯъ кардем (матни кабуд):

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Имзо тавассути калид тавлид мешавад, ки дар дохили пойгоҳи додаҳо дар дохили периметри бехатар нигоҳ дошта мешавад; худ тавлид ва навсозӣ мешавад (истифодабарандагон дар бораи он чизе намебинанд). Хеш тавлид мешавад ва ҳар як паём ҳангоми эҷод имзо карда мешавад ва ҳангоми қабул тасдиқ карда мешавад.
Эҳтимол дар зеҳни одамон саволе пайдо мешавад: "Ин корҳоро то чӣ андоза суст мекунад?" Ман ба шумо гуфтам, ки он бояд зуд кор кунад, хусусан дар сурати набудани ин хусусият.

Дар ин ҳолат истифодаи мувофиқати сабабҳо чӣ маъно дорад? Ин барои нишон додани параметри afterClusterTime аст. Бе ин, он ба ҳар ҳол танҳо арзишҳоро мегузарад. Ғайбат, аз версияи 3.6 сар карда, ҳамеша кор мекунад.

Агар мо тавлиди доимии имзоҳоро тарк кунем, он ҳатто дар сурати мавҷуд набудани хусусияте, ки ба равиш ва талаботи мо ҷавобгӯ нест, системаро суст мекунад. Пас, мо чӣ кор кардем?

Онро зуд иҷро кунед!

Ин як чизи хеле оддӣ аст, аммо ҳилла ҷолиб аст - ман онро мубодила мекунам, шояд касе таваҷҷӯҳ кунад.
Мо хэш дорем, ки маълумоти имзошударо нигоҳ медорад. Ҳама маълумот тавассути кэш мегузарад. Кэш на вақти мушаххасро, балки Диапазонро имзо мекунад. Вақте ки баъзе арзишҳо меоянд, мо Диапазон тавлид мекунем, 16 битҳои охирро ниқоб мекунем ва ин арзишро имзо мекунем:

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

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

Мо чиро омӯхтем?

Дарсҳое, ки мо аз ин омӯхтаем:

  • Мо бояд материалхо, хикояхо, маколахоро хонем, зеро мо бисьёр чизхои шавковар дорем. Вақте ки мо дар ягон хусусият кор мекунем (махсусан ҳоло, вақте ки мо транзаксия кардем ва ғайра), мо бояд хонем ва фаҳмем. Ин вақтро талаб мекунад, аммо ин воқеан хеле муфид аст, зеро он равшан мекунад, ки мо дар куҷо ҳастем. Чунин ба назар мерасад, ки мо чизи наве наёфтем - мо танҳо компонентҳоро гирифтем.

    Умуман, дар вакти гузарондани конференцияи академй (масалан, Сигмон) дар тафаккур тафовути муайяне ба амал меояд — хама ба идеяхои нав диккат медиханд. Дар бораи алгоритми мо чӣ нав аст? Дар ин ҷо чизи наве нест. Навоварӣ бештар дар он аст, ки мо равишҳои мавҷударо бо ҳам омезем. Аз ин рӯ, аввалин чизе, ки аз Лампарт сар карда, хондани классикон аст.

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

    Дар ин ҷо тамоман чизи нав нест! Аммо ҳамин ки ҳамаашро омехта кардем... Ин ҳамон аст, ки мегӯянд, ки рецепти салати Оливье сафсата аст, зеро тухм, майонез ва бодирингро аллакай ихтироъ кардаанд... Гап дар бораи ҳамон ҳикоя аст.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Ман бо ин тамом мекунам. Сипос!

Саволҳои шумо

Саволи шунавандагон (минбаъд - В): — Ташаккур, Михаил, барои маъруза! Мавзӯи вақт ҷолиб аст. Шумо ғайбатро истифода мебаред. Гуфтанд, ки ҳар кас вақти худро дорад, ҳар кас вақти маҳаллии худро медонад. Тавре ки ман мефаҳмам, мо ронанда дорем - мизоҷони зиёде бо ронандагон, дархосткунандагон низ вуҷуд доранд, инчунин пораҳо ... Ва агар ногаҳон ногаҳонӣ пайдо кунем, система чӣ кор мекунад: касе қарор мекунад, ки он барои як дақиқа пеш, касе як дақиқа қафо? Мо ба куҷо мерасем?

МТ: – Аслан саволи олӣ! Ман танҳо мехостам дар бораи пораҳо сӯҳбат кунам. Агар саволро дуруст фаҳмам, мо чунин ҳолат дорем: пораи 1 ва 2 аст, хондан аз ин ду пора ба вуҷуд меояд - онҳо ихтилоф доранд, онҳо бо ҳамдигар муносибат намекунанд, зеро замоне, ки онҳо медонанд, гуногун аст, махсусан замоне, ки онҳо дар оплогҳо вуҷуд доранд.
Биёед бигӯем, ки shard 1 як миллион сабт кард, shard 2 умуман ҳеҷ коре накард ва дархост ба ду пора омад. Ва аввалинаш пас аз ClusterTime зиёда аз як миллион дорад. Дар чунин вазъият, тавре ки ман шарҳ додам, shard 2 ҳеҷ гоҳ ҷавоб намедиҳад.

Дар: – Ман мехостам бидонам, ки онҳо чӣ гуна синхронизатсия мекунанд ва як вақти мантиқӣ интихоб мекунанд?

МТ: - Синхронизатсия хеле осон аст. Шард, вақте ки afterClusterTime ба назди ӯ меояд ва ӯ дар "Oplog" вақт намеёбад, ҳеҷ гуна тасдиқро оғоз намекунад. Яъне ваќтро бо дастонаш ба ин арзиш мебардорад. Ин маънои онро дорад, ки он ягон воқеаи мувофиқи ин дархост надорад. Вай ин ҳодисаро ба таври сунъӣ эҷод мекунад ва ба ин васила Пайвастани сабаб мешавад.

Дар: – Чӣ мешавад, агар пас аз ин ҳодисаҳои дигаре, ки дар ягон шабака гум шуда буданд, ба сари ӯ ояд?

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

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Дар: – Дар мавриди навбатдорӣ чанд савол дорам. Пайвастагии сабабҳо тахмин мекунад, ки як навбати мушаххаси амалҳо вуҷуд дорад, ки бояд иҷро шаванд. Агар яке аз бастаҳои мо нопадид шавад, чӣ мешавад? Ана, 10-ум меояд, 11-ум... 12-ум аз байн рафтааст ва дигарон мунтазири амалй шудани он мебошанд. Ва ногаҳон мошини мо мурд, мо коре карда наметавонем. Оё дарозии максималии навбат вуҷуд дорад, ки пеш аз иҷро ҷамъ мешавад? Вақте ки ягон давлат гум мешавад, чӣ нокомии марговар рух медиҳад? Гузашта аз ин, агар бинависем, ки ягон ҳолати қаблӣ вуҷуд дорад, пас бояд аз он оғоз кунем? Аммо онҳо ӯро тела надоданд!

МТ: - Инчунин саволи олӣ! Мо чӣ кор карда истодаем? MongoDB дорои мафҳуми кворум менависад, кворум мехонад. Дар кадом мавридҳо паёмро гум кардан мумкин аст? Вақте ки навиштан кворум нест ё вақте ки хондан кворум нест (як намуди ахлот низ метавонад часпида бошад).
Оид ба мувофиқати сабабҳо санҷиши калони таҷрибавӣ гузаронида шуд, ки натиҷаи он ин буд, ки дар сурати ғайрикворум будани навиштан ва хондан, вайронкунии мувофиқати сабабҳо ба амал меояд. Айнан он чизе ки шумо мегӯед!

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

Дар: – Вақте ки мо як мисолеро эҷод мекунем, ки барои мо sharding иҷро мекунад (мутаносибан на устод, балки ғулом), он ба вақти Unix-и мошини худ ё вақти “усто” такя мекунад; Оё он бори аввал ҳамоҳанг карда мешавад ё давра ба давра?

МТ: — Ҳозир аниқлайман. Шард (яъне тақсимоти уфуқӣ) - ҳамеша дар он ҷо ибтидоӣ мавҷуд аст. Ва як пора метавонад "устод" дошта бошад ва метавонад нусхабардорӣ бошад. Аммо пора ҳамеша сабтро дастгирӣ мекунад, зеро он бояд баъзе доменҳоро дастгирӣ кунад (шард дорои ибтидоӣ мебошад).

Дар: – Пас, ҳама чиз танҳо ба «усто» вобаста аст? Оё вақти устод ҳамеша истифода мешавад?

МТ: — Бале. Шумо метавонед ба таври маҷозӣ бигӯед: вақте ки воридшавӣ ба "усто", ба "Oplog" рух медиҳад, соат ҳаракат мекунад.

Дар: – Мо муштарӣ дорем, ки ба ҳам мепайвандад ва дар бораи вақт чизе донистан лозим нест?

МТ: - Ба шумо умуман лозим нест, ки чизе донед! Агар мо дар бораи он ки чӣ тавр он дар муштарӣ кор мекунад, гап занем: вақте ки муштарӣ мехоҳад мутобиқати Causal-ро истифода барад, вай бояд сессияро кушояд. Ҳоло ҳама чиз вуҷуд дорад: транзаксияҳо дар сеанс ва гирифтани ҳуқуқҳо... Сеанс ин тартиб додани рӯйдодҳои мантиқӣ бо муштарӣ мебошад.

Агар ӯ ин сессияро кушояд ва дар он ҷо гӯяд, ки ӯ мувофиқати сабабҳоро мехоҳад (агар сессия мувофиқати сабабҳоро ба таври нобаёнӣ дастгирӣ кунад), ҳама чиз ба таври худкор кор мекунад. Ронанда ин вақтро ба ёд меорад ва ҳангоми гирифтани паёми нав онро зиёд мекунад. Он дар хотир дорад, ки кадом посухи қаблӣ аз сервере, ки маълумотро баргардонд, баргашт. Дархости навбатӣ дорои afterCluster ("вақт аз ин зиёдтар") хоҳад буд.

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

Дар: – Як қабати нави илми ҳисоббарор – намудҳои додаҳои CRDT (Навъҳои такрории маълумотҳои бе низоъ) – ба мавзӯи мувофиқати ниҳоӣ сахт алоқаманд аст. Оё шумо дар бораи интегратсияи ин намуди маълумот ба базаи маълумот фикр кардаед ва шумо дар ин бора чӣ гуфта метавонед?

МТ: — Саволи хуб! CRDT барои муноқишаҳои навиштан маъно дорад: дар MongoDB, устоди ягона.

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

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

МТ: - Одамони бад дар дохили периметр ба аспи троянӣ монанданд! Одамони бад дар дохили периметр метавонанд корҳои бади зиёде кунанд.

Дар: – Маълум аст, ки гузоштан, тахминан, дар сервер сӯрохе, ки тавассути он шумо метавонед як боғи филҳоро тела диҳед ва тамоми кластерро то абад хароб кунед... Барои барқарор кардани дастӣ вақт лозим аст... Ин, нарм карда гӯем, ин аст. хато. Аз тарафи дигар, ин ҷолиб аст: дар ҳаёти воқеӣ, дар амал, ҳолатҳое ҳастанд, ки табиатан ҳамлаҳои дохилӣ ба ин монанд рух медиҳанд?

МТ: - Азбаски ман дар ҳаёти воқеӣ кам ба нақзи амният дучор мешавам, ман гуфта наметавонам, ки оё онҳо рух медиҳанд. Аммо агар дар бораи фалсафаи рушд сухан ронем, чунин фикр мекунем: мо периметре дорем, ки бачаҳои амниятро таъмин мекунад - ин қалъа, девор аст; ва дар дохили периметр шумо метавонед ҳар чизе ки мехоҳед, кунед. Маълум аст, ки корбароне ҳастанд, ки қобилияти танҳо дидан доранд ва корбароне ҳастанд, ки қобилияти тоза кардани директорияро доранд.

Вобаста ба ҳуқуқҳо, зараре, ки корбарон метавонанд расонанд, метавонад муш бошад ё фил. Маълум аст, ки корбаре, ки дорои ҳуқуқи комил аст, метавонад ҳама чизро анҷом диҳад. Истифодабарандаи дорои ҳуқуқҳои маҳдуд метавонад ба таври назаррас камтар зарар расонад. Махсусан, вай системаро вайрон карда наметавонад.

Дар: - Дар периметри муҳофизатшуда касе кӯшиш кард, ки барои сервер протоколҳои ғайричашмдошт эҷод кунад, то серверро комилан нест кунад ва агар бахти шумо бошад, тамоми кластер ... Оё он ягон вақт ин "хуб" мешавад?

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

Дар: - Ташаккур барои гузориш. Сергей (Яндекс). Дар Монг як доимӣ мавҷуд аст, ки шумораи аъзои овоздиҳиро дар Маҷмӯаи Replica маҳдуд мекунад ва ин доимӣ 7 (ҳафт) аст. Чаро ин доимӣ аст? Чаро ин як навъ параметр нест?

МТ: - Мо маҷмӯи репликаҳоро бо 40 гиреҳ дорем. Ҳамеша аксарият вуҷуд дорад. Ман намедонам кадом версия...

Дар: – Дар Replica Set шумо метавонед аъзои ғайри овоздиҳиро иҷро кунед, аммо ҳадди аксар 7 аъзои овоздиҳанда вуҷуд доранд. Чӣ тавр мо метавонем аз қатъшавӣ дар ин ҳолат наҷот ёбем, агар Маҷмӯи Replica-и мо дар 3 маркази додаҳо паҳн шуда бошад? Як маркази маълумот метавонад ба осонӣ хомӯш шавад ва мошини дигар метавонад аз кор афтад.

МТ: - Ин аллакай каме аз доираи гузориш берун аст. Ин як саволи умумӣ аст. Шояд ман баъдтар дар ин бора ба шумо мегӯям.

HighLoad++, Михаил Тюленев (MongoDB): Пайвастани сабабҳо: аз назария ба амалия

Баъзе рекламаҳо 🙂

Ташаккур ба шумо барои бо мо мондан. Мақолаҳои мо ба шумо маъқуланд? Мехоҳед мундариҷаи ҷолибтарро бубинед? Бо фармоиш додан ё тавсия додан ба дӯстон моро дастгирӣ кунед, абр VPS барои таҳиягарон аз $4.99, аналоги беназири серверҳои сатҳи ибтидоӣ, ки аз ҷониби мо барои шумо ихтироъ шудааст: Тамоми ҳақиқат дар бораи VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps аз $19 ё чӣ гуна мубодила кардани сервер? (бо RAID1 ва RAID10, то 24 ядро ​​ва то 40 ГБ DDR4 дастрас аст).

Dell R730xd дар маркази додаҳои Equinix Tier IV дар Амстердам 2 маротиба арзонтар аст? Танҳо дар ин ҷо 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ аз $199 дар Нидерландия! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - аз $99! Дар бораи хондан Корпоратсияи инфраструктураро чӣ гуна бояд сохт. синф бо истифодаи серверҳои Dell R730xd E5-2650 v4 ба маблағи 9000 XNUMX евро барои як динор?

Манбаъ: will.com

Илова Эзоҳ