HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ конфСрСнция HighLoad++ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ 6 ΠΈ 7 апрСля 2020 Π³ΠΎΠ΄Π° Π² Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³Π΅.
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΈ Π±ΠΈΠ»Π΅Ρ‚Ρ‹ ΠΏΠΎ ссылкС. HighLoad++ Siberia 2019. Π—Π°Π» Β«ΠšΡ€Π°ΡΠ½ΠΎΡΡ€ΡΠΊΒ». 25 июня, 12:00. ВСзисы ΠΈ прСзСнтация.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π‘Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ практичСскиС трСбования ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‚ с Ρ‚Π΅ΠΎΡ€ΠΈΠ΅ΠΉ, Π³Π΄Π΅ Π½Π΅ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ Π²Π°ΠΆΠ½Ρ‹Π΅ для коммСрчСского ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° аспСкты. Π’ этом Π΄ΠΎΠΊΠ»Π°Π΄Π΅ прСдставлСн процСсс Π²Ρ‹Π±ΠΎΡ€Π° ΠΈ комбинирования Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ созданию ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Causal consistency Π½Π° основС акадСмичСских исслСдований исходя ΠΈΠ· Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ коммСрчСского ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Π‘Π»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈ ΡƒΠ·Π½Π°ΡŽΡ‚ ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… тСорСтичСских ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ… ΠΊ logical clocks, dependency tracking, system security, clock synchronization, ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ MongoDB ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ….

ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (Π΄Π°Π»Π΅Π΅ – МВ): – Π― Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ Causal consistency – это Ρ„ΠΈΡ‡Π°, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² MongoDB. Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ распрСдСлённых систСм, ΠΌΡ‹ Π΅Ρ‘ сдСлали ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’ процСссС ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с большим количСством акадСмичСского Research, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ эта Ρ„ΠΈΡ‡Π° достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½Π°. Π’Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ вписываСтся Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ трСбуСтся Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π΅, Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Ρƒ вСсьма спСцифичСских Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π² любом production applications.

Π― Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹, являясь ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΌ акадСмичСского Research, Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ ΠΈΠ· Π½Π΅Π³ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ΅ΠΌ прСподнСсти нашим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π² качСствС Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ блюда, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, бСзопасно ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π½Π°Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ (Causal consistency). ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌΡΡ с понятиями

Для Π½Π°Ρ‡Π°Π»Π° я Ρ…ΠΎΡ‡Ρƒ Π² ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ… ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ Causal consistency. Π•ΡΡ‚ΡŒ Π΄Π²Π° пСрсонаТа – Π›Π΅ΠΎΠ½Π°Ρ€Π΄ ΠΈ ПСнни (сСриал «ВСория большого Π²Π·Ρ€Ρ‹Π²Π°Β»):

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ПСнни Π² Π•Π²Ρ€ΠΎΠΏΠ΅, Π° Π›Π΅ΠΎΠ½Π°Ρ€Π΄ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для Π½Π΅Ρ‘ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΡŽΡ€ΠΏΡ€ΠΈΠ·, тусовку. И ΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Π΅Ρ‚, Ρ‡Π΅ΠΌ Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ΡŒ Π΅Ρ‘ ΠΈΠ· Ρ„Ρ€Π΅Π½Π΄-листа, ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ всСм Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ Π°ΠΏΠ΄Π΅ΠΉΡ‚ Π½Π° feed: Β«Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΡ€Π°Π΄ΡƒΠ΅ΠΌ ПСнни!Β» (ΠΎΠ½Π° Π² Π•Π²Ρ€ΠΎΠΏΠ΅, ΠΏΠΎΠΊΠ° спит, Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ этого всСго ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Ρ‚Π°ΠΌ). Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅ удаляСт этот пост, стираСт ΠΈΠ· Β«Π€ΠΈΠ΄Π°Β» ΠΈ восстанавливаСт access, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»Π° ΠΈ скандала Π½Π΅ Π±Ρ‹Π»ΠΎ.
Π­Ρ‚ΠΎ всё прСкрасно, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ систСма распрСдСлённая, ΠΈ события пошли Π½Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ Ρ‚Π°ΠΊ. ΠœΠΎΠΆΠ΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, случится, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ access ПСнни ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ появился этот пост, Ссли события Π½Π΅ связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π½ΠΎ-слСдствСнными связями. БобствСнно, это – ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Causal consistency для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ бизнСс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС).

На самом Π΄Π΅Π»Π΅ это достаточно Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ свойства Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… – ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ ΠΊΡ‚ΠΎ ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ модСлям.

МодСли согласованности (Consistency Models)

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ модСль консистСнции Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…? Π­Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ распрСдСлённая систСма Π΄Π°Ρ‘Ρ‚ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ.

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ всС ΠΌΠΎΠ΄Π΅Π»ΠΈ консистСнции сводятся ΠΊ Ρ‚ΠΎΠΌΡƒ, насколько распрСдСлённая систСма ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° систСму, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΎΠ΄Π½ΠΎΠΌ nod’С Π½Π° лэптопС. И Π²ΠΎΡ‚ насколько систСма, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° тысячах гСораспрСдСлённых «Нодов», ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° лэптоп, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС эти свойства Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ автоматичСски.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠ΄Π΅Π»ΠΈ консистСнции Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ распрСдСлённым систСмам ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. ВсС систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π½ΡŒΡˆΠ΅ сущСствовали ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ испытывали. Π’Π°ΠΌ Π±Ρ‹Π» ΠΎΠ΄ΠΈΠ½ Buffer Cache, ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ всё всСгда Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ.

МодСль Strong

БобствСнно, самая пСрвая модСль – это Strong (ΠΈΠ»ΠΈ линия rise ability, ΠΊΠ°ΠΊ Π΅Ρ‘ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚). Π­Ρ‚ΠΎ модСль консистСнции, которая Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ получаСтся ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, становится Π²ΠΈΠ΄Π½ΠΎ всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ систСмы.

Π­Ρ‚ΠΎ создаёт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ порядок всСх событий Π² Π‘Π”. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ сильноС свойство консистСнции, ΠΈ ΠΎΠ½ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎΠ΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ поддСрТиваСтся. Оно просто ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎΠ΅ ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅ – ΠΈΠΌ просто Ρ€Π΅Π΄ΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ называСтся rise ability.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ, Π±ΠΎΠ»Π΅Π΅ сильноС свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ поддСрТиваСтся Π² Β«Π‘ΠΏΠ°Π½Π½Π΅Ρ€Π΅Β» – называСтся External Consistency. ΠœΡ‹ ΠΎ Π½Ρ‘ΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

Causal

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ – это Causal, ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎ, ΠΎ Ρ‡Ρ‘ΠΌ я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ». ΠœΠ΅ΠΆΠ΄Ρƒ Strong ΠΈ Causal сущСствуСт Π΅Ρ‰Ρ‘ нСсколько ΠΏΠΎΠ΄ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я Π½Π΅ Π±ΡƒΠ΄Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Π½ΠΎ ΠΎΠ½ΠΈ всС сводятся ΠΊ Causal. Π­Ρ‚ΠΎ ваТная модСль, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° – самая сильная ΠΈΠ· всСх ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, самая сильная консистСнция ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ сСти ΠΈΠ»ΠΈ partitions.

Causals – это собствСнно ситуация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ события связаны ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π½ΠΎ-слСдствСнной связью. ΠžΡ‡Π΅Π½ΡŒ часто ΠΈΡ… Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΊΠ°ΠΊ Read your on rights с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Если ΠΊΠ»ΠΈΠ΅Π½Ρ‚ наблюдал ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ значСния, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ. Он ΡƒΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ прСфиксныС чтСния. Π­Ρ‚ΠΎ всё сводится ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅.
Causals ΠΊΠ°ΠΊ модСль консистСнции – частичноС упорядочиваниС событий Π½Π° сСрвСрС, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ события со всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π°Π±Π»ΡŽΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС – Π›Π΅ΠΎΠ½Π°Ρ€Π΄ ΠΈ ПСнни.

Eventual

Π’Ρ€Π΅Ρ‚ΡŒΡ модСль – это Eventual Consistency. Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС распрСдСлённыС систСмы, минимальная модСль, которая Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысл. Она ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: ΠΊΠΎΠ³Π΄Π° Ρƒ нас происходят Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния Π² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ становятся консистСнтными.

Π’ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½Π° ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»Π°ΡΡŒ Π±Ρ‹ Π² External Consistency – Π±Ρ‹Π»Π° Π±Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ другая история. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ это ΠΎΡ‡Π΅Π½ΡŒ популярная модСль, самая распространённая. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ распрСдСлённых систСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Eventual Consistency.

Π― Ρ…ΠΎΡ‡Ρƒ привСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π§Ρ‚ΠΎ эти стрСлочки ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚?

  • Latency. ΠŸΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ силы консистСнции ΠΎΠ½Π° становится большС ΠΏΠΎ понятным ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ: Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ большС записСй, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ всСх хостов ΠΈ Π½ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² кластСрС, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΌ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ. БоотвСтствСнно Π² Eventual Consistency самый быстрый ΠΎΡ‚Π²Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π² memory Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ ΠΈ этого Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ достаточно.
  • Availability. Если это ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ систСмы ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ€Π°Π·Ρ€Ρ‹Π²ΠΎΠ² сСти, partitions, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΠΎΡ‚ΠΊΠ°Π·ΠΎΠ² – ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ возрастаСт ΠΏΡ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ консистСнции, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌ достаточно Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ хост ΠΆΠΈΠ» ΠΈ ΠΏΡ€ΠΈ этом Π²Ρ‹Π΄Π°Π²Π°Π» ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅. Eventual Consistency Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… – это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.
  • Anomalies. ΠŸΡ€ΠΈ этом, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, возрастаСт количСство Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ. Π’ Strong Consistency ΠΈΡ… Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‡Ρ‚ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ, Π° Eventual Consistency ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ люди Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Eventual Consistency, Ссли ΠΎΠ½Π° содСрТит Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ? ΠžΡ‚Π²Π΅Ρ‚ Π² Ρ‚ΠΎΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Eventual Consistency-ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹, Π° Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ; сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мастСр для чтСния ΠΈ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ консистСнтныС Π΄Π°Π½Π½Ρ‹Π΅; часто Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ консистСнции. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ часто количСство Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π’Π΅ΠΎΡ€Π΅ΠΌΠ° CAP

Когда Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ слова consistency, availability – Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡƒΠΌ? ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ – CAP theorem! Π― сСйчас Ρ…ΠΎΡ‡Ρƒ Ρ€Π°Π·Π²Π΅ΡΡ‚ΡŒ миф… Π­Ρ‚ΠΎ Π½Π΅ я – Π΅ΡΡ‚ΡŒ ΠœΠ°Ρ€Ρ‚ΠΈΠ½ КлСппман, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ написал ΠΏΡ€Π΅ΠΊΡ€Π°ΡΠ½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ, ΠΏΡ€Π΅ΠΊΡ€Π°ΡΠ½ΡƒΡŽ ΠΊΠ½ΠΈΠΆΠΊΡƒ.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’Π΅ΠΎΡ€Π΅ΠΌΠ° CAP – это ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, сформулированный Π² 2000-Ρ… Π³ΠΎΠ΄Π°Ρ…, ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Consistency, Availability, Partitions: take any two, ΠΈ нСльзя Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ. Π­Ρ‚ΠΎ Π±Ρ‹Π» Π½Π΅ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ. Он Π±Ρ‹Π» Π΄ΠΎΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° нСсколько Π»Π΅Ρ‚ спустя, это сдСлали Π”ΠΆΠΈΠ»Π±Π΅Ρ€Ρ‚ ΠΈ Π›ΠΈΠ½Ρ‡. Π—Π°Ρ‚Π΅ΠΌ это стало ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΌΠ°Π½Ρ‚Ρ€Π° – систСмы стали Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π½Π° CA, CP, AP ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π­Ρ‚Π° Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° Π±Ρ‹Π»Π° Π΄ΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° самом Π΄Π΅Π»Π΅ Π²ΠΎΡ‚ для ΠΊΠ°ΠΊΠΈΡ… случаСв… Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Availability Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ Π½Π΅ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ нуля Π΄ΠΎ сотни (0 – систСма «мёртвая», 100 – ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ быстро; ΠΌΡ‹ Π΅Ρ‘ Ρ‚Π°ΠΊ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ), Π° ΠΊΠ°ΠΊ свойство Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ всСх Π΅Π³ΠΎ executions ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅.

О Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° Ρ‚Π°ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅Ρ‚ Π½ΠΈ слова! Π•ΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· 100 Π»Π΅Ρ‚ – ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ прСкрасный available-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡ‹ CAP.
Π’Ρ‚ΠΎΡ€ΠΎΠ΅: Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»Π°ΡΡŒ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° для ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² значСниях ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π°, ΠΏΡ€ΠΈΡ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ эти измСнСния – линия resizable. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ практичСски Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Eventual Consistency, Strong Consistency (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ).

К Ρ‡Π΅ΠΌΡƒ это всё? К Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° CAP ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° Π΄ΠΎΠΊΠ°Π·Π°Π½Π°, практичСски Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ°, Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π’ тСорСтичСской Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΠ½Π° ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ всё ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ Π²Π΅Ρ€Π΅Π½, Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊ, Π² ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ, Π½Π΅ Π΄ΠΎΠΊΠ°Π·Π°Π½.

Causal consistency – самая сильная модСль

Π’ΠΎ, Ρ‡Ρ‚ΠΎ сСйчас происходит – ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Ρ‚Ρ€ΠΈ Π²Π΅Ρ‰ΠΈ: Consistency, Availability ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Partitions. Π’ частности Causal consistency – самая сильная модСль консистСнции, которая ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Partitions (Ρ€Π°Π·Ρ€Ρ‹Π²ΠΎΠ² Π² сСти) всё Ρ€Π°Π²Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½Π° ΠΈ прСдставляСт Ρ‚Π°ΠΊΠΎΠΉ большой интСрСс, поэтому ΠΌΡ‹ Сю ΠΈ занялись.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Она, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ‚Ρ€ΡƒΠ΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ частности, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ большой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ со стороны сСрвСра: ΠΊΠΎΠ³Π΄Π° всС записи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎ Π΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΡ‚ Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΎΠ½Π° Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ partitions.

ВнутрСнняя кухня MongoDB

Помня ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π»Π°Π½Ρ‡, ΠΌΡ‹ пСрСмСщаСмся Π½Π° ΠΊΡƒΡ…Π½ΡŽ. Π― расскаТу ΠΏΡ€ΠΎ модСль систСмы, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ – Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ MongoDB для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΠ»Ρ‹ΡˆΠΈΡ‚ ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

MongoDB (Π΄Π°Π»Π΅Π΅ – Β«ΠœΠΎΠ½Π³ΠΎΠ‘Π”Β») – это распрСдСлённая систСма, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³; ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡˆΠ°Ρ€Π΄Π° ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ.

Π¨Π°Ρ€Π΄ΠΈΠ½Π³ Π² Β«ΠœΠΎΠ½Π³ΠΎΠ‘Π”Β» (Π½Π΅ рСляционная Π‘Π”) выполняСт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ балансировку, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ каТдая коллСкция Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (ΠΈΠ»ΠΈ Β«Ρ‚Π°Π±Π»ΠΈΡ†Π°Β» Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… рСляционных Π΄Π°Π½Π½Ρ‹Ρ…) Π½Π° кусочки, ΠΈ ΡƒΠΆΠ΅ сСрвСр автоматичСски Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΡˆΠ°Ρ€Π΄Π°ΠΌΠΈ.

Query Router, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ распрСдСляСт запросы, для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° являСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Он ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚, Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ находятся, направляСт всС запросы ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ ΡˆΠ°Ρ€Π΄Ρƒ.

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚: MongoDB – это single master. Π•ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Primary – ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ€Π°Ρ‚ΡŒ записи, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π² сСбС содСрТит. НСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Multi-master write.

ΠœΡ‹ сдСлали Ρ€Π΅Π»ΠΈΠ· 4.2 – Ρ‚Π°ΠΌ появились Π½ΠΎΠ²Ρ‹Π΅ интСрСсныС Π²Π΅Ρ‰ΠΈ. Π’ частности, вставили Lucene –поиск – ΠΈΠΌΠ΅Π½Π½ΠΎ executable java прямо Π² «Монго», ΠΈ Ρ‚Π°ΠΌ стало Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск Ρ‡Π΅Ρ€Π΅Π· Lucene, Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² «ЭластикС».

И сдСлали Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ – Charts, ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ доступСн Π½Π° «АтласС» (собствСнный Cloud «Монго»). Π£ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Free Tier – ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с этим. Charts ΠΌΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ понравился – визуализация Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‡Π΅Π½ΡŒ интуитивная.

Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ Causal consistency

Π― насчитал порядка 230 статСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ Π½Π° эту Ρ‚Π΅ΠΌΡƒ – ΠΎΡ‚ ЛСсли Π›Π°ΠΌΠΏΠ΅Ρ€Ρ‚Π°. БСйчас ΠΈΠ· памяти своСй я Π²Π°ΠΌ ΠΈΡ… донСсу ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ части этих ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ².

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Всё Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ со ΡΡ‚Π°Ρ‚ΡŒΠΈ ЛСсли Π›Π°ΠΌΠΏΠ΅Ρ€Ρ‚Π°, которая Π±Ρ‹Π»Π° написана Π² 1970-Ρ… Π³ΠΎΠ΄Π°Ρ…. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ исслСдования Π² этой Ρ‚Π΅ΠΌΠ΅. БСйчас Causal consistency ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ интСрСс Π² связи с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ распрСдСлённых систСм.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

КакиС ограничСния Π΅ΡΡ‚ΡŒ? Π­Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ ограничСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ систСмы, сильно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² акадСмичСских ΡΡ‚Π°Ρ‚ΡŒΡΡ…. Часто ΠΎΠ½ΠΈ достаточно искусствСнны.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

  • Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Β«ΠœΠΎΠ½Π³ΠΎΠ”Π‘Β» – это single master, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» (это сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚).
  • ΠœΡ‹ считаСм, Ρ‡Ρ‚ΠΎ порядка 10 тысяч ΡˆΠ°Ρ€Π΄ΠΎΠ² систСма Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ явно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
  • Π•ΡΡ‚ΡŒ Ρƒ нас ΠΎΠ±Π»Π°ΠΊΠΎ, Π½ΠΎ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ скачиваСт binary, запускаСт Ρƒ сСбя Π½Π° лэптопС, ΠΈ всё прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.
  • ΠœΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Research Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ: внСшниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Β«ΠœΠΎΠ½Π³ΠΎΠ”Π‘Β» – это опСнсорс. БоотвСтствСнно, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΡƒΠΌΠ½Ρ‹Π΅, Π·Π»Ρ‹Π΅ – ΠΌΠΎΠ³ΡƒΡ‚ Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ всё ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ. ΠœΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ византийскиС Π€Π΅ΠΉΠ»ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ.
  • Для Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° – Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: Ссли эта Ρ„ΠΈΡ‡Π° Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… performance degradation Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒΡΡ.
  • Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ – Π²ΠΎΠΎΠ±Ρ‰Π΅ антиакадСмичСский: ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… вСрсий ΠΈ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ…. Π‘Ρ‚Π°Ρ€Ρ‹Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π°ΠΏΠ΄Π΅ΠΉΡ‚Ρ‹, ΠΈ Π‘Π” Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ старыС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, всё это Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ограничСния.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Causal consistency

Π― сСйчас расскаТу ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. Если Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Causal consistency, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈ. ΠœΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π»ΠΈ ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π±Π»ΠΎΠΊΡƒ: Dependency Tracking, Π²Ρ‹Π±ΠΎΡ€ часов, ΠΊΠ°ΠΊ эти часы ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΊΠ°ΠΊ ΠΌΡ‹ обСспСчиваСм Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ – это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½ Ρ‚ΠΎΠ³ΠΎ, ΠΎ Ρ‡Ρ‘ΠΌ я Π±ΡƒΠ΄Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ:

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

ПолноС отслСТиваниС зависимостСй (Full Dependency Tracking)

Π—Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ? Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ – каТдая запись, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… содСрТало Π² сСбС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΠ½ΠΎ зависит. Π‘Π°ΠΌΠΎΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈ Π½Π°ΠΈΠ²Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ – это ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит Π² сСбС запись, содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… сообщСниях:

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΎΠΌΠ΅Ρ€ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках – это Π½ΠΎΠΌΠ΅Ρ€Π° записСй. Иногда эти записи со значСниями ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Π°ΠΆΠ΅ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, ΠΈΠ½ΠΎΠ³Π΄Π° вСрсии ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ. Π‘ΡƒΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ содСрТит Π² сСбС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ (явно нСсёт это всё Π² сСбС).

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ (ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³)? ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅Π½: любоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти зависит ΠΎΡ‚ всСх ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² этой соцсСти, пСрСдавая, скаТСм, «ЀСйсбук» ΠΈΠ»ΠΈ Β«Π’ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅Β» Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ исслСдований ΠΈΠΌΠ΅Π½Π½ΠΎ Full Dependency Tracking – это ΠΏΡ€Π΅ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ сСти, для ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ситуаций это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π―Π²Π½ΠΎΠ΅ отслСТиваниС зависимостСй (Explicit Dependency Tracking)

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ – Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ. Π—Π΄Π΅ΡΡŒ Ρ‚ΠΎΠΆΠ΅ рассматриваСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠΉ, которая явно зависит. Π§Ρ‚ΠΎ ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ зависит, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, опрСдСляСт ΡƒΠΆΠ΅ Application. Когда Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΏΡ€ΠΈ запросС Π²Ρ‹Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ зависимости Π±Ρ‹Π»ΠΈ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹. Π’ этом ΠΈ ΡΡƒΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Causal consistency Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Она Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ запись 5 зависит ΠΎΡ‚ записСй 1, 2, 3, 4 – соотвСтствСнно, ΠΎΠ½Π° ΠΆΠ΄Ρ‘Ρ‚, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ измСнСниям, внСсённым постановлСниСм access’а ПСнни, ΠΊΠΎΠ³Π΄Π° всС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ измСнСния ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ нас Π½Π΅ устраиваСт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всё Ρ€Π°Π²Π½ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ слишком ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ это Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΡΡ‚ΡŒ. Π•ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ подход…

Часы Лэмпорта (Lamport Clock)

Они ΠΎΡ‡Π΅Π½ΡŒ старыС. Lamport Clock ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ эти dependency ΡΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΡΠΊΠ°Π»ΡΡ€Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΈ называСтся Lamport Clock.

Бкалярная функция – это Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ абстрактноС число. Часто Π΅Π³ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ логичСским Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ событии этот counter увСличиваСтся. Counter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ извСстСн процСссу, посылаСт ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ сообщСниС. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ процСссы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ рассинхронизированны, Ρƒ Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½ΠΎΠ΅ врСмя. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ сообщСниями систСма ΠΊΠ°ΠΊ-Ρ‚ΠΎ балансируСт часы. Π§Ρ‚ΠΎ происходит Π² этом случаС?

Π― Ρ€Π°Π·Π±ΠΈΠ» Ρ‚ΠΎΡ‚ большой ΡˆΠ°Ρ€Π΄ Π½Π°Π΄Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятно: Friends ΠΌΠΎΠ³ΡƒΡ‚ ΠΆΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ Π½ΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит кусок ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π° Feed – Π²ΠΎΠΎΠ±Ρ‰Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π½ΠΎΠ΄Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится кусок этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π½Π΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ? Π‘Π½Π°Ρ‡Π°Π»Π° Feed скаТСт: «РСплицировался», Π° ΠΏΠΎΡ‚ΠΎΠΌ – Friends. Если систСма Π½Π΅ обСспСчиваСт ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Feed Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½, ΠΏΠΎΠΊΠ° зависимости Friends Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Friends Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ доставлСны, Ρ‚ΠΎ Ρƒ нас ΠΊΠ°ΠΊ Ρ€Π°Π· Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ситуация, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я упомянул.

Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ увСличиваСтся логичСски врСмя counter Π½Π° Feed’С:

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, основноС свойство этого Lamport Clock ΠΈ Causal consistency (ΠΎΠ±ΡŠΡΡΠ½Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‡Π΅Ρ€Π΅Π· Lamport Clock) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ события A ΠΈ B, ΠΈ событиС B зависит ΠΎΡ‚ события A *, Ρ‚ΠΎ ΠΈΠ· этого слСдуСт, Ρ‡Ρ‚ΠΎ LogicalTime ΠΎΡ‚ Event A мСньшС, Ρ‡Π΅ΠΌ LogicalTime ΠΎΡ‚ Event B.

* Иногда Π΅Ρ‰Ρ‘ говорят, Ρ‡Ρ‚ΠΎ A happened before B, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ A ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½ΡŒΡˆΠ΅ B – это Π½Π΅ΠΊΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ частично упорядочиваСт всё мноТСство событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ.

Π’ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ сторону Π½Π΅Π²Π΅Ρ€Π½ΠΎ. Π­Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· основных минусов Lamport Clock – частичный порядок. Π’Π°ΠΌ Π΅ΡΡ‚ΡŒ понятиС ΠΎΠ± ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… событиях, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ событий, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΠΈ (A happened before B), Π½ΠΈ (A happened before B). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π›Π΅ΠΎΠ½Π°Ρ€Π΄ΠΎΠΌ Π² Π΄Ρ€ΡƒΠ·ΡŒΡ ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Ρ‘ (Π΄Π°ΠΆΠ΅ Π½Π΅ Π›Π΅ΠΎΠ½Π°Ρ€Π΄ΠΎΠΌ, Π° Π¨Π΅Π»Π΄ΠΎΠ½ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€).
Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ свойство, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ часто ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Lamport-часами: смотрят ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΈΠ· этого Π΄Π΅Π»Π°ΡŽΡ‚ Π²Ρ‹Π²ΠΎΠ΄ – ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, эти события зависимы. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½Ρƒ сторону это Π²Π΅Ρ€Π½ΠΎ: Ссли LogicalTime A мСньшС LogicalTime B, Ρ‚ΠΎ B Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ happened before A; Π° Ссли большС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ.

Π’Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ часы (Vector Clock)

ЛогичСскоС Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ часов Лэмпорта – это Π’Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ часы. Они ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ здСсь Π΅ΡΡ‚ΡŒ, содСрТит Π² сСбС свои, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ часы, ΠΈ ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π²Π΅ΠΊΡ‚ΠΎΡ€.
Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ индСкс Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Feed, Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ индСкс Π²Π΅ΠΊΡ‚ΠΎΡ€Π° – Π·Π° Friends (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих Π½ΠΎΠ΄ΠΎΠ²). И Π²ΠΎΡ‚ ΠΎΠ½ΠΈ сСйчас Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ: Π½ΡƒΠ»Π΅Π²ΠΎΠΉ индСкс Β«Π€ΠΈΠ΄Π°Β» увСличиваСтся ΠΏΡ€ΠΈ записи – 1, 2, 3:

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π§Π΅ΠΌ Π’Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ часы Π»ΡƒΡ‡ΡˆΠ΅? Π’Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ события ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ происходят Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π½ΠΎΠ΄Π°Ρ…. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ для систСмы ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊ Β«ΠœΠΎΠ½Π³ΠΎΠ‘Π”Β». Однако ΠΌΡ‹ это Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ, хотя это ΠΈ прСкрасная ΡˆΡ‚ΡƒΠΊΠ°, ΠΈ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ Π½Π°ΠΌ подошла Π±Ρ‹, навСрноС…

Если Ρƒ нас 10 тысяч ΡˆΠ°Ρ€Π΄ΠΎΠ², ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ 10 тысяч ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π΄Π°ΠΆΠ΅ Ссли сТимаСм, Π΅Ρ‰Ρ‘ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Π΅ΠΌ – всё Ρ€Π°Π²Π½ΠΎ полСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π² Ρ€Π°Π·Ρ‹ мСньшС, Ρ‡Π΅ΠΌ ΠΎΠ±ΡŠΡ‘ΠΌ всСго этого Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, скрипя сСрдцСм ΠΈ Π·ΡƒΠ±Π°ΠΌΠΈ, ΠΌΡ‹ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

Spanner TrueTime. АтомныС часы

Π― Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ рассказ ΠΎ Β«Π‘ΠΏΠ°Π½Π½Π΅Ρ€Π΅Β». Π­Ρ‚ΠΎ крутая ΡˆΡ‚ΡƒΠΊΠ°, прям XXI Π²Π΅ΠΊ: Π°Ρ‚ΠΎΠΌΠ½Ρ‹Π΅ часы, GPS-синхронизация.

ИдСя какая? Β«Π‘ΠΏΠ°Π½Π½Π΅Ρ€Β» – это гугловская систСма, которая Π½Π΅Π΄Π°Π²Π½ΠΎ Π΄Π°ΠΆΠ΅ стала доступна для людСй (ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Π»Π°Π»ΠΈ ΠΊ Π½Π΅ΠΉ SQL). КаТдая транзакция Ρ‚Π°ΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ time stamp. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ врСмя синхронизировано*, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ times – Ρƒ Π°Ρ‚ΠΎΠΌΠ½Ρ‹Ρ… часов Π΅ΡΡ‚ΡŒ врСмя оТидания, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ «происходит» ΡƒΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ врСмя.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, просто записывая Π² Π‘Π” ΠΈ оТидая ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, автоматичСски гарантируСтся Serializability события. Π£ Π½ΠΈΡ… самая сильная Consistency-модСль, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ – ΠΎΠ½Π° External Consistency.

* Π­Ρ‚ΠΎ основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° часов Лэмпарта – ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ синхронны Π½Π° распрСдСлённых систСмах. Они ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ NTP всё Ρ€Π°Π²Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Β«Π‘ΠΏΠ°Π½Π½Π΅Ρ€Β» ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚ΠΎΠΌΠ½Ρ‹Π΅ часы ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ, каТСтся, Ρ‚ΠΎ микросСкунд.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ? ΠœΡ‹ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π΅ΡΡ‚ΡŒ встроСнныС Π°Ρ‚ΠΎΠΌΠ½Ρ‹Π΅ часы. Когда ΠΎΠ½ΠΈ появятся, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ встроСнными Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ лэптоп, Π±ΡƒΠ΄Π΅Ρ‚ какая-Ρ‚ΠΎ супСркрутая GPS-синхронизация – Ρ‚ΠΎΠ³Π΄Π° да… А ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ – это «Амазон», Base Stations – для фанатиков… ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ использовали Π΄Ρ€ΡƒΠ³ΠΈΠ΅ часы.

Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Π΅ часы (Hybrid Clock)

Π­Ρ‚ΠΎ фактичСски Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΊΠ°Π΅Ρ‚ Π² Β«ΠœΠΎΠ½Π³ΠΎΠ‘Π”Β» ΠΏΡ€ΠΈ обСспСчСнии Causal consistency. Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Π΅ ΠΎΠ½ΠΈ Π² Ρ‡Ρ‘ΠΌ? Π“ΠΈΠ±Ρ€ΠΈΠ΄ – это скалярноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΎΠ½ΠΎ состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

  • ΠŸΠ΅Ρ€Π²ΠΎΠ΅ – это unix’вая эпоха (сколько сСкунд ΠΏΡ€ΠΎΡˆΠ»ΠΎ с Β«Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°Β»).
  • Π’Ρ‚ΠΎΡ€ΠΎΠ΅ – Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚, Ρ‚ΠΎΠΆΠ΅ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ unsigned int.

Π­Ρ‚ΠΎ собствСнно, ΠΈ всё. Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: Ρ‡Π°ΡΡ‚ΡŒ, которая ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° врСмя, всё врСмя синхронизируСтся с часами; ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° происходит ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, эта Ρ‡Π°ΡΡ‚ΡŒ синхронизируСтся с часами ΠΈ получаСтся, Ρ‡Ρ‚ΠΎ врСмя всСгда Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅, Π° increment позволяСт Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ для Β«ΠœΠΎΠ½Π³ΠΎΠ‘Π”Β»? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ бэкап-рСсторы Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ событиС индСксируСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ события; для Π‘Π” события – это измСнСния Π² Π‘Π”, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π‘Π°ΠΌΡƒΡŽ Π³Π»Π°Π²Π½ΡƒΡŽ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ я скаТу Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π°ΠΌ (поТалуйста, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅)! ΠœΡ‹ Ρ‚Π°ΠΊ сдСлали ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ выглядят упорядочСнныС, индСксированныС Π΄Π°Π½Π½Ρ‹Π΅ Π² MongoDB OpLog. OpLog – это структура Π΄Π°Π½Π½Ρ‹Ρ…, которая содСрТит Π² сСбС Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС измСнСния Π² Π±Π°Π·Π΅: ΠΎΠ½ΠΈ сначала ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² OpLog, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ собствСнно ΠΊ Storage Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° это рСплицированная Π΄Π°Ρ‚Π° ΠΈΠ»ΠΈ ΡˆΠ°Ρ€Π΄.

Π­Ρ‚ΠΎ Π±Ρ‹Π»Π° главная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°. Всё-Ρ‚Π°ΠΊΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΅Ρ‰Ρ‘ ΠΈ практичСскиС трСбования ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±Π°Π·Ρ‹, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ просто – ΠΌΠ°Π»ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС сломанных Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΎΠΏΠ»ΠΎΠ³ΠΈ оказались проиндСксированы Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΌΠΈ часами, сильно ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€. Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π°Π²Π΄Π°Π»ΠΎ сСбя ΠΈ ΠΊΠ°ΠΊ-Ρ‚ΠΎ волшСбно Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΆΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅. Π‘Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎ!

Бинхронизация часов

БущСствуСт нСсколько способов синхронизации, описанных Π² Π½Π°ΡƒΡ‡Π½ΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅. Π― Π³ΠΎΠ²ΠΎΡ€ΡŽ ΠΎ синхронизации, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΡˆΠ°Ρ€Π΄Π°. Если ΠΎΠ΄Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°-сСт – Ρ‚Π°ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ синхронизации Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ: это «сингл-мастСр»; Ρƒ нас Π΅ΡΡ‚ΡŒ OpLog, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всС измСнСния ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ – Π² этом случаС всё ΡƒΠΆΠ΅ sequentially ordered Π² самом «ОплогС». Но Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΡˆΠ°Ρ€Π΄Π°, здСсь синхронизация Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Π°ΠΆΠ½Π°. Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ часы большС ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ! Но Ρƒ нас ΠΈΡ… Π½Π΅Ρ‚.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ – это Β«Π₯Π°Ρ€Ρ‚Π±ΠΈΡ‚Ρ‹Β» (Heartbeats). МоТно ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ сигналами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходит ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Но Β«Π₯Π°Ρ€Ρ‚Π±ΠΈΡ‚Ρ‹Β» – слишком ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ latency ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

True time – ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, прСкрасная ΡˆΡ‚ΡƒΠΊΠ°. Но, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, это, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, будущСС… Π₯отя Π² «АтласС» ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ быстрыС «амазоновскиС» синхронизаторы Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Но это Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступно для всСх.

Gossiping – это ΠΊΠΎΠ³Π΄Π° всС сообщСния Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя врСмя. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ. КаТдоС сообщСниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ΄Π°ΠΌΠΈ, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Ρ€ΠΎΡƒΡ‚Π΅Ρ€ Π΄Π°Ρ‚Π°-Π½ΠΎΠ΄Ρ‹, Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всё для Β«ΠœΠΎΠ½Π³ΠΎΠ”Π‘Β» – это ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ элСмСнты, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π² сСбС часы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΊΡƒΡ‚. Π£ Π½ΠΈΡ… Π²Π΅Π·Π΄Π΅ Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ½ΠΎ пСрСдаётся. 64 Π±ΠΈΡ‚Π°? Π­Ρ‚ΠΎ позволяСт, это ΠΌΠΎΠΆΠ½ΠΎ.

Как всё это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ вмСстС?

Π—Π΄Π΅ΡΡŒ я Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°-сСт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅. Π•ΡΡ‚ΡŒ Primary ΠΈ Secondary. Secondary Π΄Π΅Π»Π°Π΅Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ Π½Π΅ всСгда ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ синхронизирован с Primary.

ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ вставка (insert) Π² Β«ΠŸΡ€Π°ΠΉΠΌΠ΅Ρ€ΠΈΒ» с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎΡ‚ insert ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΊΠ°ΡƒΠ½Ρ‚Π΅Ρ€ Π½Π° 11, Ссли это максимально. Или ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ значСния часов ΠΈ синхронизируСтся ΠΏΠΎ часам, Ссли значСния часов большС. Π­Ρ‚ΠΎ позволяСт ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ запись, происходит Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Часы Π² Β«ΠœΠΎΠ½Π³ΠΎΠ”Π‘Β» ΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС записи Π² «Оплог». Π­Ρ‚ΠΎ ΠΈ являСтся событиСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ мСняСт состояниС систСмы. ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π²ΠΎ всСх классичСских ΡΡ‚Π°Ρ‚ΡŒΡΡ… событиСм считаСтся ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ сообщСния Π² Π½ΠΎΠ΄: сообщСниС ΠΏΡ€ΠΈΡˆΠ»ΠΎ – Π·Π½Π°Ρ‡ΠΈΡ‚, систСма ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π° своё состояниС.

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ исслСдовании Π½Π΅ совсСм ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ это сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ. ΠœΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ссли ΠΎΠ½ΠΎ Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² «ОплогС», Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ состояния систСмы являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ запись Π² «Оплог». Π­Ρ‚ΠΎ Π½Π°ΠΌ всё ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚: ΠΈ модСль ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚, ΠΈ позволяСт вСсти упорядочиваниС Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°-сСта, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ.

ВозвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΆΠ΅ записано Π² «Оплог» – ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² «ОплогС» ΡƒΠΆΠ΅ Π»Π΅ΠΆΠΈΡ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ Π΅Π³ΠΎ врСмя – 12. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, скаТСм, начинаСтся Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π½ΠΎΠ΄Π° (Secondary), ΠΈ ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ ΡƒΠΆΠ΅ afterClusterTime Π² самом сообщСнии. Он Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: «МнС Π½ΡƒΠΆΠ½ΠΎ всё, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ послС 12 ΠΈΠ»ΠΈ Π²ΠΎ врСмя Π΄Π²Π΅Π½Π°Π΄Ρ†Π°Ρ‚ΠΈΒ» (см. рис. Π²Ρ‹ΡˆΠ΅).

Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ называСтся Causal a consistent (CAT). Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ понятиС Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎ это Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ срСз Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ консистСнтно само ΠΏΠΎ сСбС. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это состояниС систСмы, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ наблюдалось Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ 12.

БСйчас здСсь ΠΏΠΎΠΊΠ° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΊΠ°ΠΊ Π±Ρ‹ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Secondary Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π» Π΄Π°Π½Π½Ρ‹Π΅ с Primary. Он Тдёт… И Π²ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΈ – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°Π·Π°Π΄ эти значСния.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ всё ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΠΎΡ‡Ρ‚ΠΈ Ρ‡Ρ‚ΠΎ.

Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Β«ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‡Ρ‚ΠΎΒ»? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» ΠΈ понял, ΠΊΠ°ΠΊ это всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Понял, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· происходит ClusterTime, ΠΎΠ½ обновляСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ логичСскиС часы, ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ запись ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π­Ρ‚Π° функция Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 20 строк. Допустим, этот Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ максимально большоС 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ число, минус Π΅Π΄ΠΈΠ½ΠΈΡ†Π°.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ «минус Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Β»? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ часы подставятся Π² это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, это самоС большоС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΈ большС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ), ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ запись Π² «Оплог», ΠΈ часы ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΅Ρ‰Ρ‘ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ – ΠΈ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Ρ‚Π°ΠΌ просто всС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, дальшС Π½Π΅ΠΊΡƒΠ΄Π°, unsaint int’ы).

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ послС этого систСма становится Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ нСдоступна Π½ΠΈ для Ρ‡Π΅Π³ΠΎ. Π•Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ – ΠΌΠ½ΠΎΠ³ΠΎ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠŸΠΎΠ»Π½Ρ‹ΠΉ availability:

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ, Ссли это рСплицируСтся Π΅Ρ‰Ρ‘ ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ, Ρ‚ΠΎ просто лоТится вСсь кластСр. ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ нСприСмлСмая ситуация, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ любой Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΈ просто! ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ рассматривали этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых Π²Π°ΠΆΠ½Ρ‹Ρ…. Как Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ?

Наш ΠΏΡƒΡ‚ΡŒ – ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ clusterTime

Π’Π°ΠΊ ΠΎΠ½ΠΎ пСрСдаётся Π² сообщСнии (Π΄ΠΎ синСго тСкста). Но ΠΌΡ‹ стали Π΅Ρ‰Ρ‘ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ подпись (синий тСкст):

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Подпись гСнСрируСтся ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π°; сам гСнСрируСтся, обновляСтся (ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ этого Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ видят). ГСнСрируСтся hash, ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ сообщСниС ΠΏΡ€ΠΈ создании подписываСтся, Π° ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ – валидируСтся.
НавСрноС, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос Ρƒ людСй: «Насколько это всё замСдляСт?Β» Π― ΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ быстро Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, особСнно ΠΏΡ€ΠΈ отсутствии этой Ρ„ΠΈΡ‡ΠΈ.

Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Causal consistency Π² Π΄Π°Π½Π½ΠΎΠΌ случаС? Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ afterClusterTime-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. А Π±Π΅Π· этого ΠΎΠ½ просто Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ значСния Π² любом случаС. Gossiping, начиная с вСрсии 3.6, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ всСгда.

Если ΠΌΡ‹ оставим постоянноС Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ подписСй, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΡΡ‚ΡŒ систСму Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ отсутствии Ρ„ΠΈΡ‡ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ соотвСтствуСт нашим ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌ ΠΈ трСбованиям. И Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлали?

Π”Π΅Π»Π°ΠΉ это быстро!

Достаточно простая Π²Π΅Ρ‰ΡŒ, Π½ΠΎ Ρ‚Ρ€ΡŽΠΊ интСрСсный – подСлюсь, ΠΌΠΎΠΆΠ΅Ρ‚, ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ интСрСсно.
Π£ нас Π΅ΡΡ‚ΡŒ Ρ…ΡΡˆ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранятся подписанныС Π΄Π°Π½Π½Ρ‹Π΅. ВсС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π· кэш. Кэш подписываСт Π½Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ врСмя, Π° Range. Когда ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΡ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Range, маскируСм послСдниС 16 Π±ΠΈΡ‚, ΠΈ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΡ‹ подписываСм:

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ Ρ‚Π°ΠΊΡƒΡŽ подпись, ΠΌΡ‹ ускоряСм систСму (условно) Π² 65 тысяч Ρ€Π°Π·. Оно прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚: ΠΊΠΎΠ³Π΄Π° поставили экспСримСнты – Ρ‚Π°ΠΌ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π² 10 тысяч Ρ€Π°Π· ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ врСмя, ΠΊΠΎΠ³Π΄Π° Ρƒ нас ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°ΠΏΠ΄Π΅ΠΉΡ‚. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π² Ρ€Π°Π·Π½ΠΎΠ±ΠΎΠΉ, этого Π½Π΅ получаСтся. Но Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ практичСских случаСв это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ подписи Range вмСстС с подписью ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ бСзопасности.

Π§Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ?

Π£Ρ€ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΈΠ· этого ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ:

  • НуТно Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹, истории, ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ интСрСсного Π΅ΡΡ‚ΡŒ. Когда ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ„ΠΈΡ‡Π΅ΠΉ (особСнно сСйчас, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄Π΅Π»Π°Π»ΠΈ ΠΈ Ρ‚. Π΄.), Π½Π°Π΄ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ. Π­Ρ‚ΠΎ ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅Ρ‚ врСмя, Π½ΠΎ это Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ становится понятно, Π³Π΄Π΅ ΠΌΡ‹ находимся. ΠœΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ – просто взяли ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹.

    Π’ΠΎΠΎΠ±Ρ‰Π΅, Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ опрСдСлённая Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ мСсто акадСмичСская конфСрСнция (Β«Π‘ΠΈΠ³ΠΌΠΎΠ½Β», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) – Ρ‚Π°ΠΌ всС Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° Π½ΠΎΠ²Ρ‹Ρ… идСях. Π’ Ρ‡Ρ‘ΠΌ Π½ΠΎΠ²ΠΈΠ·Π½Π° нашСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°? Π—Π΄Π΅ΡΡŒ Π½ΠΎΠ²ΠΈΠ·Π½Ρ‹ особой Π½Π΅Ρ‚. Новизна скорСС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ смСшали вмСстС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ – Π½ΡƒΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ классиков, начиная с Лэмпарта.

  • Π’ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ трСбования. Π― ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· вас ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π΅ со «сфСричСскими» Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² абстрактном Π²Π°ΠΊΡƒΡƒΠΌΠ΅, Π° с Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎ availability, latency ΠΈ отказоустойчивости.
  • ПослСднСС – это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ ΠΈ ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ€Π°Π·Π½Ρ‹Ρ… статСй Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, вмСстС. ИдСя ΠΏΡ€ΠΎ подписываниС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΡ€ΠΈΡˆΠ»Π° ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ, которая рассматривала Paxos-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для нСвизантийских Π€Π΅ΠΉΠ»ΠΎΡ€ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, для византийских – Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ протокола… Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, это Ρ€ΠΎΠ²Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΈ сдСлали.

    Нового здСсь Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Ρ‚! Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ это всё вмСстС ΡΠΌΠ΅ΡˆΠ°Π»ΠΈβ€¦ Всё Ρ€Π°Π²Π½ΠΎ Ρ‡Ρ‚ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ салата ОливьС – Π΅Ρ€ΡƒΠ½Π΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ яйца, ΠΌΠ°ΠΉΠΎΠ½Π΅Π· ΠΈ ΠΎΠ³ΡƒΡ€Ρ†Ρ‹ ΡƒΠΆΠ΅ придумали… Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π° ΠΆΠ΅ самая история.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

На этом Π·Π°ΠΊΠΎΠ½Ρ‡Ρƒ. Бпасибо!

Вопросы

Вопрос ΠΈΠ· Π·Π°Π»Π° (Π΄Π°Π»Π΅Π΅ – Π’): – Бпасибо, ΠœΠΈΡ…Π°ΠΈΠ» Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄! Π’Π΅ΠΌΠ° ΠΏΡ€ΠΎ врСмя интСрСсная. Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Gossiping. Π‘ΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ всСх Π΅ΡΡ‚ΡŒ своё врСмя, всС Π·Π½Π°ΡŽΡ‚ своё локальноС врСмя. Π― Ρ‚Π°ΠΊ понял, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ – ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, query-planner’ов Ρ‚ΠΎΠΆΠ΅, ΡˆΠ°Ρ€Π΄ΠΎΠ² Ρ‚ΠΎΠΆΠ΅ много… А ΠΊ Ρ‡Π΅ΠΌΡƒ скатываСтся систСма, Ссли Ρƒ нас Π²Π΄Ρ€ΡƒΠ³ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ расхоТдСниС: ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π° ΠΌΠΈΠ½ΡƒΡ‚Ρƒ Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ β€” Π½Π° ΠΌΠΈΠ½ΡƒΡ‚Ρƒ ΠΏΠΎΠ·Π°Π΄ΠΈ? Π“Π΄Π΅ ΠΌΡ‹ окаТСмся?

МВ: – ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ вопрос Π½Π° самом Π΄Π΅Π»Π΅! Π― ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΏΡ€ΠΎ ΡˆΠ°Ρ€Π΄Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΡΠΊΠ°Π·Π°Ρ‚ΡŒ. Если я ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ понимаю вопрос, Ρƒ нас такая ситуация: Π΅ΡΡ‚ΡŒ ΡˆΠ°Ρ€Π΄ 1 ΠΈ ΡˆΠ°Ρ€Π΄ 2, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ происходит с этих Π΄Π²ΡƒΡ… ΡˆΠ°Ρ€Π΄ΠΎΠ² – Ρƒ Π½ΠΈΡ… расхоТдСниС, ΠΎΠ½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ΠΈ Π·Π½Π°ΡŽΡ‚ – Ρ€Π°Π·Π½ΠΎΠ΅, особСнно врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρƒ Π½ΠΈΡ… сущСствуСт Π² ΠΎΠΏΠ»ΠΎΠ³Π°Ρ….
Допустим, ΡˆΠ°Ρ€Π΄ 1 сдСлал ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ записСй, ΡˆΠ°Ρ€Π΄ 2 – Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ, Π° запрос ΠΏΡ€ΠΈΡˆΡ‘Π» Π½Π° Π΄Π²Π° ΡˆΠ°Ρ€Π΄Π°. И Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ afterClusterTime Π±ΠΎΠ»Π΅Π΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации, ΠΊΠ°ΠΊ я объяснил, ΡˆΠ°Ρ€Π΄ 2 Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚.

Π’: – Π― Ρ…ΠΎΡ‚Π΅Π» ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΡƒΡ‚ ΠΎΠ΄Π½ΠΎ логичСскоС врСмя?

МВ: – ΠžΡ‡Π΅Π½ΡŒ просто ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Π¨Π°Ρ€Π΄, ΠΊΠΎΠ³Π΄Π° ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ afterClusterTime, ΠΈ ΠΎΠ½ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² «ОплогС» – ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ no approved. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ своё врСмя Π΄ΠΎ этого значСния. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ событий, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ… этому запросу. Он создаёт это событиС искусствСнно ΠΈ становится Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Causal Consistent.

Π’: – А Ссли ΠΊ Π½Π΅ΠΌΡƒ послС этого Π΅Ρ‰Ρ‘ ΠΏΡ€ΠΈΠ΅Π΄ΡƒΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² сСти Π³Π΄Π΅-Ρ‚ΠΎ Π·Π°Ρ‚Π΅Ρ€ΡΠ»ΠΈΡΡŒ?

МВ: – Π¨Π°Ρ€Π΄ Ρ‚Π°ΠΊ устроСн, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠ΅Π΄ΡƒΡ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это single master. Если ΠΎΠ½ ΡƒΠΆΠ΅ записал, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠ΅Π΄ΡƒΡ‚, Π° Π±ΡƒΠ΄ΡƒΡ‚ послС. НС ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ застряло, ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ½ сдСлаСт no write, Π° ΠΏΠΎΡ‚ΠΎΠΌ эти события ΠΏΡ€ΠΈΠ΅Ρ…Π°Π»ΠΈ – ΠΈ Π½Π°Ρ€ΡƒΡˆΠΈΠ»Π°ΡΡŒ Causal consistency. Когда ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ no write, ΠΎΠ½ΠΈ всС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ΅Ρ…Π°Ρ‚ΡŒ дальшС (ΠΎΠ½ ΠΈΡ… ΠΏΠΎΠ΄ΠΎΠΆΠ΄Ρ‘Ρ‚).

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’: – Π£ мСня Π΅ΡΡ‚ΡŒ нСсколько вопросов ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ. Causal consistency ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ опрСдСлённая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ дСйствий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚, Ссли Ρƒ нас ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚? Π’ΠΎΡ‚ ΠΏΠΎΡˆΡ‘Π» 10-ΠΉ, 11… 12-ΠΉ ΠΏΡ€ΠΎΠΏΠ°Π», Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΆΠ΄ΡƒΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ исполнится. И Ρƒ нас Π²Π΄Ρ€ΡƒΠ³ машина ΡƒΠΌΠ΅Ρ€Π»Π°, ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π•ΡΡ‚ΡŒ Π»ΠΈ максимальная Π΄Π»ΠΈΠ½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, которая копится, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ выполняСтся? Какой fatal failure происходит ΠΏΡ€ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ состояния? Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Ссли ΠΌΡ‹ записываСм, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ состояниС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅, Ρ‚ΠΎ ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΆΠ΅ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ? А ΠΎΡ‚ Π½Π΅Π³ΠΎ Π½Π΅ ΠΎΡ‚Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ!

МВ: – Π’ΠΎΠΆΠ΅ прСкрасный вопрос! Π§Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ? Π’ MongoDB Π΅ΡΡ‚ΡŒ понятиС ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ½Ρ‹Ρ… записСй, ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ½ΠΎΠ³ΠΎ чтСния. Π’ ΠΊΠ°ΠΊΠΈΡ… случаях сообщСниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΏΠ°ΡΡ‚ΡŒ? Когда запись нСкворумная ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ½ΠΎΠ΅ (Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ garbage).
ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Causal consistency Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стало Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² случаС, ΠΊΠΎΠ³Π΄Π° записи ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ – Π½Π΅ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ½Ρ‹Π΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Causal consistency. Π ΠΎΠ²Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅!

Наш совСт: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ хотя Π±Ρ‹ ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ использовании Causal consistency. Π’ этом случаС ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Π΄Π°ΠΆΠ΅ Ссли кворумная запись пропадёт… Π­Ρ‚ΠΎ ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ ситуация: Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΏΠ°Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ½ΡƒΡŽ запись. Causal consistency Π½Π΅ Π΄Π°Ρ‘Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ durability. Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ durability Π΄Π°Ρ‘Ρ‚ replication ΠΈ machinery, связанная с replication.

Π’: – Когда ΠΌΡ‹ создаём instance, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρƒ нас ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ выполняСт (Π½Π΅ master, Π° slave соотвСтствСнно), ΠΎΠ½ опираСтся Π½Π° unix-врСмя собствСнной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈΠ»ΠΈ Π½Π° врСмя «мастСра»; синхронизируСтся Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· ΠΈΠ»ΠΈ пСриодичСски?

МВ: – БСйчас ΠΏΡ€ΠΎΡΡΠ½ΡŽ. Π¨Π°Ρ€Π΄ (Ρ‚. Π΅. Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ партиция) – Ρ‚Π°ΠΌ всСгда Π΅ΡΡ‚ΡŒ Primary. А Π² ΡˆΠ°Ρ€Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ «мастСр» ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ. Но ΡˆΠ°Ρ€Π΄ всСгда ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ запись, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠΌΠ΅Π½ (Π² ΡˆΠ°Ρ€Π΄Π΅ стоит Primary).

Π’: – Π’ΠΎ Π΅ΡΡ‚ΡŒ всё зависит сугубо ΠΎΡ‚ «мастСра»? ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ «мастСр»-врСмя?

МВ: – Π”Π°. МоТно ΠΎΠ±Ρ€Π°Π·Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: часы Ρ‚ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° происходит запись Π² «мастСр», Π² «Оплог».

Π’: – Π£ нас Π΅ΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ коннСктится, ΠΈ Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ врСмя Π½ΠΈΡ‡Π΅Π³ΠΎ?

МВ: – Π’ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ! Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅: Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Causal consistency, Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ сСссию. БСйчас Ρ‚Π°ΠΌ всё: ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² сСссии, ΠΈ retrieve a rights… БСссия – это упорядочСниС логичСских событий, происходящих с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

Если ΠΎΠ½ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ эту сСссию ΠΈ Ρ‚Π°ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ Causal consistency (Ссли ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сСссия ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Causal consistency), всё автоматичСски Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ это врСмя ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ сообщСниС. Он Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΠ»ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ с сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Ρ€Π½ΡƒΠ» Π΄Π°Π½Π½Ρ‹Π΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ afterCluster (Β«time большС этого»).

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ€ΠΎΠ²Π½Ρ‹ΠΌ счётом Π½ΠΈΡ‡Π΅Π³ΠΎ! Π­Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ для Π½Π΅Π³ΠΎ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ. Если люди ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эти Ρ„ΠΈΡ‡ΠΈ, Ρ‡Ρ‚ΠΎ позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ бСзопасно Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ secondaries: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Primary, Π° Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ с гСографичСски Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… secondaries ΠΈ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΡ€ΠΈ этом сСссии, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ записал Π½Π° Primary, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ Π½Π° Secondary, Ρ‚. Π΅. ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ΄Π½Ρƒ сСссию, Π° нСсколько.

Π’: – Π‘ Ρ‚Π΅ΠΌΠΎΠΉ Eventual consistency сильно связан Π½ΠΎΠ²Ρ‹ΠΉ пласт Compute science –типы Π΄Π°Π½Π½Ρ‹Ρ… CRDT (Conflict-free Replicated Data Types). Рассматривали Π»ΠΈ Π²Ρ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ этих Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ ΠΈ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ± этом?

МВ: – Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ вопрос! CRDT ΠΈΠΌΠ΅Π΅Ρ‚ смысл для ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ записи: Π² MongoDB – single master.

Π’: – Π£ мСня вопрос ΠΎΡ‚ дСвопсов. Π’ настоящСм ΠΌΠΈΡ€Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ иСзуитскиС ситуации, ΠΊΠΎΠ³Π΄Π° византийский Failure происходит, ΠΈ Π·Π»Ρ‹Π΅ люди Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π²Ρ‚Ρ‹ΠΊΠ°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΡ€Π°Ρ„Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΡ€ΠΈΡΡ‹Π»Π°Ρ‚ΡŒ?

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

МВ: – Π—Π»Ρ‹Π΅ люди Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° – всё Ρ€Π°Π²Π½ΠΎ Ρ‡Ρ‚ΠΎ троянский конь! Π—Π»Ρ‹Π΅ люди Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»ΠΎΡ…ΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ.

Π’: – ΠŸΠΎΠ½ΡΡ‚Π½ΠΎΠ΅ Π΄Π΅Π»ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π² сСрвСрС, Π³Ρ€ΡƒΠ±ΠΎ говоря, Π΄Ρ‹Ρ€ΠΎΡ‡ΠΊΡƒ, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·ΠΎΠΎΠΏΠ°Ρ€ΠΊ слонов ΠΏΡ€ΠΎΡΡƒΠ½ΡƒΡ‚ΡŒ ΠΈ ΠΎΠ±Π²Π°Π»ΠΈΡ‚ΡŒ вСсь кластСр навсСгда… ΠŸΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ΡΡ врСмя для Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ восстановлСния… Π­Ρ‚ΠΎ, мягко говоря, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ: Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ, Π² ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ситуации, ΠΊΠΎΠ³Π΄Π° Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π°Ρ‚Π°ΠΊΠΈ происходят?

МВ: – ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я нСчасто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡΡŒ с security breach’ами Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ, Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ – ΠΌΠΎΠΆΠ΅Ρ‚, ΠΎΠ½ΠΈ ΠΈ происходят. Но Ссли Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ дСвСлопСрской философии, Ρ‚ΠΎ ΠΌΡ‹ считаСм Ρ‚Π°ΠΊ: Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт рСбят, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ security – это Π·Π°ΠΌΠΎΠΊ, стСна; Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π° Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

Π’ зависимости ΠΎΡ‚ ΠΏΡ€Π°Π², damage, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΡ‹ΡˆΡŒΡŽ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ слоном. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с ΠΏΠΎΠ»Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ всё Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с Π½Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ Π²Ρ€Π΅Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚ΡŒ сущСствСнно мСньшС. Π’ частности, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ систСму.

Π’: – Π’ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠΌ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π΅ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π· Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ для сСрвСра, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΠΊΠΎΠΌ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСрвСр, Π° Ссли ΠΏΠΎΠ²Π΅Π·Ρ‘Ρ‚, Ρ‚ΠΎ ΠΈ вСсь кластСр… Π‘Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Β«Ρ…ΠΎΡ€ΠΎΡˆΠΎΒ»?

МВ: – Ни Ρ€Π°Π·Ρƒ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π» ΠΎ Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π°Ρ…. Π’ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π²Π°Π»ΠΈΡ‚ΡŒ сСрвСр – это Π½Π΅ сСкрСт. Π—Π°Π²Π°Π»ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² сообщСниС Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ такоС… На самом Π΄Π΅Π»Π΅ нСльзя, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всё Ρ€Π°Π²Π½ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Ρ€ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ эту Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ хотят – это Ρ‚ΠΎΠ³Π΄Π° ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹; ΠΎΠ½ΠΈ, Π³Ρ€ΡƒΠ±ΠΎ говоря, сами Ρ€Π°Π·Ρ€ΡƒΡˆΠΈΠ»ΠΈ стСны ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡ…Π½ΡƒΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° слона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ растопчСт… А Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π΅Ρ‚ΡŒΡΡ Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π½ΠΈΠΊΠΎΠΌ, ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΈ Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ!

Π’: – Бпасибо Π·Π° Π΄ΠΎΠΊΠ»Π°Π΄. Π‘Π΅Ρ€Π³Π΅ΠΉ («ЯндСкс»). Π’ «МонгС» Π΅ΡΡ‚ΡŒ константа, которая Π»ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ количСство Π³ΠΎΠ»ΠΎΡΡƒΡŽΡ‰ΠΈΡ… Ρ‡Π»Π΅Π½ΠΎΠ² Π² Replica Set’С, ΠΈ эта константа Ρ€Π°Π²Π½Π° 7 (сСми). ΠŸΠΎΡ‡Π΅ΠΌΡƒ это константа? ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π½Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ?

МВ: – Replica Set Ρƒ нас Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΈ ΠΏΠΎ 40 Π½ΠΎΠ΄ΠΎΠ². Π’Π°ΠΌ всСгда majority. Π― Π½Π΅ знаю какая вСрсия…

Π’: – Π’ Replica Set’С ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π³ΠΎΠ»ΠΎΡΡƒΡŽΡ‰ΠΈΡ… Ρ‡Π»Π΅Π½ΠΎΠ² Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, Π½ΠΎ Π³ΠΎΠ»ΠΎΡΡƒΡŽΡ‰ΠΈΡ… – максимум 7. Как Π² этом случаС ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли Ρƒ нас Replica Set стянут Π½Π° 3 Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°? Один Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ запросто Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ, ΠΈ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° машинка Π²Ρ‹ΠΏΠ°ΡΡ‚ΡŒ.

МВ: – Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π°. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ вопрос. ΠœΠΎΠΆΠ΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌ Π΅Π³ΠΎ ΠΌΠΎΠ³Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ.

HighLoad++, ΠœΠΈΡ…Π°ΠΈΠ» ВюлСнСв (MongoDB): Causal consistency: ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

НСмного Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ πŸ™‚

Бпасибо, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Ρ‘Ρ‚Π΅ΡΡŒ с Π½Π°ΠΌΠΈ. Π’Π°ΠΌ нравятся наши ΡΡ‚Π°Ρ‚ΡŒΠΈ? Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ большС интСрСсных ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ²? ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ нас, ΠΎΡ„ΠΎΡ€ΠΌΠΈΠ² Π·Π°ΠΊΠ°Π· ΠΈΠ»ΠΈ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π² Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ, ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ VPS для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎΡ‚ $4.99, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ entry-level сСрвСров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ Π½Π°ΠΌΠΈ для Вас: Вся ΠΏΡ€Π°Π²Π΄Π° ΠΎ VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ΠΎΡ‚ $19 ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΄Π΅Π»ΠΈΡ‚ΡŒ сСрвСр? (доступны Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ с RAID1 ΠΈ RAID10, Π΄ΠΎ 24 ядСр ΠΈ Π΄ΠΎ 40GB DDR4).

Dell R730xd Π² 2 Ρ€Π°Π·Π° дСшСвлС Π² Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π΅ Equinix Tier IV Π² АмстСрдамС? Волько Ρƒ нас 2 Ρ… 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! Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ Как ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ инфраструктуру ΠΊΠΎΡ€ΠΏ. класса c ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ сСрвСров Dell R730xd Π•5-2650 v4 ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ 9000 Π΅Π²Ρ€ΠΎ Π·Π° ΠΊΠΎΠΏΠ΅ΠΉΠΊΠΈ?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com