Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Redis

Π₯Π΅ΠΉ Π₯Π°Π±Ρ€!

ДнСс ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌΠ΅ Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π²ΠΎΠ΄ Π½Π° слоТна статия Π·Π° внСдряванСто Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Redis ΠΈ Π²ΠΈ ΠΊΠ°Π½ΠΈΠΌ Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° пСрспСктивитС Π½Π° Redis ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ΠΌΠ°. Анализ Π½Π° Π²ΡŠΠΏΡ€ΠΎΡΠ½ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Redlock ΠΎΡ‚ ΠœΠ°Ρ€Ρ‚ΠΈΠ½ КлСпман, Π°Π²Ρ‚ΠΎΡ€ Π½Π° ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° "ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ с голямо Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅β€œ, Π΄Π°Π΄Π΅Π½ΠΎ Ρ‚ΡƒΠΊ.

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎΡ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ², ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΠΌΠ½ΠΎΠ³ΠΎ срСди, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ процСси трябва Π΄Π° работят Π²ΡŠΡ€Ρ…Ρƒ сподСлСни рСсурси ΠΏΠΎ Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ сС Π½Π°Ρ‡ΠΈΠ½.

Има Ρ€Π΅Π΄ΠΈΡ†Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ описват ΠΊΠ°ΠΊ Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΡ‚Π΅ DLM (Distributed Lock Manager) с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Redis, Π½ΠΎ всяка Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ прСдоставят, са доста слаби Π² сравнСниС с Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ постиТимо с ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-слоТСн Π΄ΠΈΠ·Π°ΠΉΠ½.

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° опишСм условСн ΠΊΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ дСмонстрира ΠΊΠ°ΠΊ Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Redis. Π©Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ redlock, Ρ‚ΠΎΠΉ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° диспСчСр Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ ΠΈ спорСд нас Ρ‚ΠΎΠ·ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π΅ ΠΏΠΎ-бСзопасСн ΠΎΡ‚ обичайния ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с Π΅Π΄Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅. НадявамС сС, Ρ‡Π΅ общността Ρ‰Π΅ Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°, Ρ‰Π΅ прСдостави ΠΎΠ±Ρ€Π°Ρ‚Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΈ Ρ‰Π΅ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° ΠΏΠΎ-слоТни ΠΈΠ»ΠΈ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ.

ИзпълнСниС

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към описаниСто Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ°, прСдоставямС няколко Π²Ρ€ΡŠΠ·ΠΊΠΈ към Π³ΠΎΡ‚ΠΎΠ²ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° справка.

  • Redlock-rb (имплСмСнтация Π·Π° Ruby). Има ΠΈ Π²ΠΈΠ»ΠΈΡ†Π° Redlock-rb, ΠΊΠΎΠΉΡ‚ΠΎ добавя ΠΏΠ°ΠΊΠ΅Ρ‚ (gem) Π·Π° ΠΏΠΎ-лСсно разпространСниС, Π° ΠΈ Π½Π΅ само Π·Π° Ρ‚ΠΎΠ²Π°.
  • Redlock-py (РСализация Π½Π° Python).
  • Aioredlock (имплСмСнтация Π·Π° Asyncio Python).
  • Redlock-php (имплСмСнтация Π·Π° PHP).
  • PHPRedisMutex (Π΄Ρ€ΡƒΠ³Π° рСализация Π·Π° PHP)
  • cheprasov/php-redis-lock (PHP Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Π±Ρ€Π°Π²ΠΈ)
  • Redsync (имплСмСнтация Π·Π° Go).
  • РСдисън (имплСмСнтация Π·Π° Java).
  • Redis::DistLock (имплСмСнтация Π·Π° Perl).
  • Redlock-cpp (имплСмСнтация Π·Π° C++).
  • Redlock-cs (имплСмСнтация Π·Π° C#/.NET).
  • RedLock.net (имплСмСнтация Π·Π° C#/.NET). Π‘ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° асинхронни ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ.
  • ScarletLock (имплСмСнтация Π·Π° C# .NET с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ)
  • Redlock4Net (имплСмСнтация Π·Π° C# .NET)
  • възСл-redlock (имплСмСнтация Π·Π° NodeJS). Π’ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° Π±Ρ€Π°Π²ΠΈ.

Π“Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π·Π° сигурност ΠΈ наличност

Π©Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°ΠΌΠ΅ нашия Π΄ΠΈΠ·Π°ΠΉΠ½ само с Ρ‚Ρ€ΠΈ свойства, ΠΊΠΎΠΈΡ‚ΠΎ спорСд нас осигуряват ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡ‚Π΅ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅.

  1. Π—Π°Ρ‰ΠΈΡ‚Π½ΠΎ свойство: Π’Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅. Π’ΡŠΠ² всСки Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ само Π΅Π΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΡŠΡ€ΠΆΠΈ ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π°.
  2. Бвойство Π½Π° наличност A: Няма блокирания. Π’ΠΈΠ½Π°Π³ΠΈ Π΅ възмоТно Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ» рСсурса, сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ ΠΈΠ»ΠΈ сС ΠΏΡ€ΠΈΠ·Π΅ΠΌΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ дисков сСгмСнт.
  3. Бвойство Π½Π° наличност B: ВолСрантност към Π³Ρ€Π΅ΡˆΠΊΠΈ. Π”ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ-голямата част ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° Redis работят, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Ρ‚ ΠΈ освобоТдават ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ.

Π—Π°Ρ‰ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ€Π΅Π΄Π°, Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ случай
Π—Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠΌ, Π½Π΅ΠΊΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Redis.

Най-лСсният Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ рСсурс с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Redis Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡ Π² СкзСмпляра. ОбикновСно сС създава ΠΊΠ»ΡŽΡ‡ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΆΠΈΠ²ΠΎΡ‚, Ρ‚ΠΎΠ²Π° сС постига с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° функцията Π·Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅, прСдоставСна Π² Redis, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ късно Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΡŽΡ‡ сС освобоТдава (свойство 2 Π² нашия списък). ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ трябва Π΄Π° освободи рСсурса, Ρ‚ΠΎΠΉ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° ΠΊΠ»ΡŽΡ‡Π°.

На ΠΏΡ€ΡŠΠ² ΠΏΠΎΠ³Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ доста Π΄ΠΎΠ±Ρ€Π΅, Π½ΠΎ ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: Π½Π°ΡˆΠ°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° създава Π΅Π΄Π½Π° СдинствСна Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π°. Какво сС случва, Π°ΠΊΠΎ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€ΡŠΡ‚ Π½Π° хост Redis сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ? Π’ΠΎΠ³Π°Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ€ΠΎΠ±! И Π½ΠΈΠ΅ Ρ‰Π΅ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅, Π°ΠΊΠΎ водСщият Π΅ Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½. Π—Π° съТалСниС Ρ‚Π°Π·ΠΈ опция Π½Π΅ Π΅ ТизнСспособна. ΠŸΡ€Π°Π²Π΅ΠΉΠΊΠΈ Ρ‚ΠΎΠ²Π°, няма Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ свойството Π·Π° Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ сигурността, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ рСпликацията Π² Redis Π΅ асинхронна.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π² Ρ‚Π°ΠΊΡŠΠ² ΠΌΠΎΠ΄Π΅Π» възниква ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅:

  1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ A ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° главния.
  2. Главният сС проваля, ΠΏΡ€Π΅Π΄ΠΈ Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŽΡ‡ Π΄Π° бъдС ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ към подчинСния.
  3. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ‚ сС повишава Π΄ΠΎ Π»ΠΈΠ΄Π΅Ρ€.
  4. ΠšΠ»ΠΈΠ΅Π½Ρ‚ B ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° ΡΡŠΡ‰ΠΈΡ рСсурс, ΠΊΠΎΠΉΡ‚ΠΎ A Π²Π΅Ρ‡Π΅ Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ». ΠΠΠ Π£Π¨Π•ΠΠ˜Π• НА Π‘Π˜Π“Π£Π ΠΠžΠ‘Π’Π’Π!

Понякога Π΅ напълно Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ, Ρ‡Π΅ ΠΏΡ€ΠΈ спСциални обстоятСлства, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ²Ρ€Π΅Π΄Π°, ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π·Π°Π΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’ Ρ‚Π°ΠΊΠΈΠ²Π° случаи ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° рСпликация. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, описано Π² Ρ‚Π°Π·ΠΈ статия.

ΠŸΡ€Π°Π²ΠΈΠ»Π½ΠΎ изпълнСниС с Π΅Π΄ΠΈΠ½ СкзСмпляр

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π΅ΠΌ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈΡ‚Π΅ Π½Π° описаната ΠΏΠΎ-Π³ΠΎΡ€Π΅ конфигурация с Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ СкзСмпляр, Π½Π΅ΠΊΠ° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π΄Π° сС справим с Ρ‚ΠΎΠ·ΠΈ прост случай, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ Π²Π°Π»ΠΈΠ΄Π½ΠΎ Π² прилоТСния, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ условиСто Π·Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅ Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅, Π° ΡΡŠΡ‰ΠΎ ΠΈ Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ СкзСмпляр слуТи ΠΊΠ°Ρ‚ΠΎ основа, която сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² описания Ρ‚ΡƒΠΊ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ.

Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, Π½Π°ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ слСдното:

SET resource_name my_random_value NX PX 30000

Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° инсталира ΠΊΠ»ΡŽΡ‡ само Π°ΠΊΠΎ Π²Π΅Ρ‡Π΅ Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° (NX опция), с ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π° валидност ΠΎΡ‚ 30000 XNUMX милисСкунди (PX опция). ΠšΠ»ΡŽΡ‡ΡŠΡ‚ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° β€žmyrandomvalue" Π’Π°Π·ΠΈ стойност трябва Π΄Π° бъдС ΡƒΠ½ΠΈΠΊΠ°Π»Π½Π° Π·Π° всички ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ ΠΈ всички заявки Π·Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅.
По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° стойност сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° бСзопасно освобоТдаванС Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π°, ΠΊΠ°Ρ‚ΠΎ скрипт ΠΊΠ°Π·Π²Π° Π½Π° Redis: ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π° само Π°ΠΊΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΈ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½Π°Ρ‚Π° Π² Π½Π΅Π³ΠΎ стойност Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΎΡ‡Π°ΠΊΠ²Π°ΡˆΠ΅. Π’ΠΎΠ²Π° сС постига с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° слСдния Lua скрипт:

if redis.call("get",KEYS[1]) == ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end

Π’ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ, Π·Π° Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, Π΄ΡŠΡ€ΠΆΠ°Π½ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. НапримСр ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π° бъдС Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² някаква опСрация, която ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° ΠΏΠΎ-дълго ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ (Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ Π΄Π° ΠΈΠΌΠ° Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΈΠ·Ρ‚Π΅Ρ‡Π΅) ΠΈ ΠΏΠΎ-късно Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΅ поставил.
Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ DEL Π½Π΅ Π΅ бСзопасно, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, Π΄ΡŠΡ€ΠΆΠ°Π½ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ горния скрипт, всяко Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π΅ β€žΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΎβ€œ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π½ΠΈΠ·, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ само ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π³ΠΎ Π΅ поставил ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅.

Какъв трябва Π΄Π° бъдС Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π½ΠΈΠ·? ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΌ, Ρ‡Π΅ трябва Π΄Π° Π΅ 20 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ /dev/urandom, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎ-Π΅Π²Ρ‚ΠΈΠ½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½ΠΈΠ·Π° Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π·Π° Π²Π°ΡˆΠΈΡ‚Π΅ Ρ†Π΅Π»ΠΈ. НапримСр, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈΡ‚Π΅ RC4 с /dev/urandom ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚Π΅ псСвдослучаСн ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π½Π΅Π³ΠΎ. Π•Π΄Π½ΠΎ ΠΏΠΎ-просто Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π° комбинация ΠΎΡ‚ unix Π²Ρ€Π΅ΠΌΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π½Π° способност ΠΎΡ‚ микросСкунди плюс ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°; Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° сигурСн, Π½ΠΎ вСроятно сС справя със Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ контСксти.

Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠ°Ρ‚ΠΎ мярка Π·Π° ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° ΠΊΠ»ΡŽΡ‡Π°, сС Π½Π°Ρ€ΠΈΡ‡Π° "ΠΆΠΈΠ²ΠΎΡ‚ Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π°". Π’Π°Π·ΠΈ стойност Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΏΡ€Π΅Π΄ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π΄Π° бъдС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ освободСно, Ρ‚Π°ΠΊΠ° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ трябва Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈ опСрация, ΠΏΡ€Π΅Π΄ΠΈ Π΄Ρ€ΡƒΠ³ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄Π° ΠΌΠΎΠΆΠ΅ Π½Π° свой Ρ€Π΅Π΄ Π΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈ Ρ‚ΠΎΠ·ΠΈ рСсурс, Π±Π΅Π· Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΄Π° Π½Π°Ρ€ΡƒΡˆΠ°Π²Π° Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π·Π° Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅. Π’Π°Π·ΠΈ гаранция Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° само Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π° ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° Π·Π°ΠΊΡƒΠΏΡƒΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π°.

Π’Π°ΠΊΠ° Ρ‡Π΅ ΠΎΠ±ΡΡŠΠ΄ΠΈΡ…ΠΌΠ΅ Π΄ΠΎΠ±ΡŠΡ€ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ ΠΈ освобоТдаванС Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅. БистСмата (Π°ΠΊΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Π½Π΅Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° систСма, ΡΡŠΡΡ‚ΠΎΡΡ‰Π° сС ΠΎΡ‚ Π΅Π΄ΠΈΠ½ СдинствСн ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ СкзСмпляр) Π΅ Π·Π°Ρ‰ΠΈΡ‚Π΅Π½Π°. НСка Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΠΌ Ρ‚Π°Π·ΠΈ концСпция към Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° систСма, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ нямамС Ρ‚Π°ΠΊΠΈΠ²Π° Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ.

ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π½Π° Redlock

РазпространСната вСрсия Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ N Redis masters. Π’Π΅Π·ΠΈ възли са напълно нСзависими Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ рСпликация ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½Π° систСма Π·Π° координация. Π’Π΅Ρ‡Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊ сигурно Π΄Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ΅ΠΌ ΠΈ освободим Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ СкзСмпляр. ΠŸΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠ΅ Π·Π° дадСност, Ρ‡Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π΅Π΄ΠΈΠ½ СкзСмпляр, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ N Π½Π° 5, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Ρ€Π°Π·ΡƒΠΌΠ½Π° стойност. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Ρ‰Π΅ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ 5 мастСра Π½Π° Redis Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, Π·Π° Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ Ρ‚Π΅ дСйстват Π΄ΠΎ голяма стСпСн нСзависимо Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³.

Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° слСднитС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

  1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π² милисСкунди.
  2. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° всички N СкзСмпляра, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ΅ Π½Π° ΠΊΠ»ΡŽΡ‡ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ стойности във всички случаи. Π’ Π•Ρ‚Π°ΠΏ 2, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ настройва Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π·Π° всСки СкзСмпляр, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° забавянС, Π·Π° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π² сравнСниС с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ сС освобоТдава Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ. НапримСр, Π°ΠΊΠΎ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π΅ 10 сСкунди, Ρ‚ΠΎΠ³Π°Π²Π° забавянСто ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ‚ ~5-50 милисСкунди. Π’ΠΎΠ²Π° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° ситуацията, ΠΏΡ€ΠΈ която ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° останС Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ Π·Π° дълго Π²Ρ€Π΅ΠΌΠ΅, ΠΎΠΏΠΈΡ‚Π²Π°ΠΉΠΊΠΈ сС Π΄Π° достигнС Π΄ΠΎ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ Redis възСл: Π°ΠΊΠΎ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€ΡŠΡ‚ Π΅ Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½, Ρ‚ΠΎΠ³Π°Π²Π° Π½ΠΈΠ΅ сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΌΠ΅ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ с Π΄Ρ€ΡƒΠ³ СкзСмпляр възмоТно Π½Π°ΠΉ-скоро.
  3. Π—Π° Π΄Π° Π²Π·Π΅ΠΌΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ изчислява ΠΊΠΎΠ»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΅ ΠΈΠ·Ρ‚Π΅ΠΊΠ»ΠΎ; Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠΉ ΠΈΠ·Π²Π°ΠΆΠ΄Π° ΠΎΡ‚ дСйствитСлната Π²Ρ€Π΅ΠΌΠ΅Π²Π° стойност ΠΊΠ»Π΅ΠΉΠΌΠΎΡ‚ΠΎ Π·Π° Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π² ΡΡ‚ΡŠΠΏΠΊΠ° 1. Ако ΠΈ само Π°ΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ успял Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ СкзСмпляри (ΠΏΠΎΠ½Π΅ 3) ΠΈ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ, ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ, Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ сС счита Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ.
  4. Ако Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ сС ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ минус ΠΈΠ·ΠΌΠΈΠ½Π°Π»ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, изчислСно Π² ΡΡ‚ΡŠΠΏΠΊΠ° 3.
  5. Ако ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π½Π΅ успСС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° (ΠΈΠ»ΠΈ Π½Π΅ Π΅ успял Π΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈ N/2+1 СкзСмпляра, ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π½Π°), Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚ΠΎΠΉ Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π° Π΄Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈ всички СкзСмпляри (Π΄ΠΎΡ€ΠΈ Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π΅ смятал, Ρ‡Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π° ).

ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ асинхронСн Π»ΠΈ Π΅?

Π’ΠΎΠ·ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ сС основава Π½Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‡Π΅ Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ няма синхронизиран часовник, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° работят всички процСси, мСстното Π²Ρ€Π΅ΠΌΠ΅ във всСки процСс всС ΠΎΡ‰Π΅ Ρ‚Π΅Ρ‡Π΅ с ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Ρ‚Π΅ΠΌΠΏΠΎ ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° Π΅ ΠΌΠ°Π»ΠΊΠ° Π² сравнСниС с ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ сС освобоТдава. Π’ΠΎΠ²Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ситуацията, Ρ‚ΠΈΠΏΠΈΡ‡Π½Π° Π·Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ: всСки ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ ΠΈΠΌΠ° Π»ΠΎΠΊΠ°Π»Π΅Π½ часовник ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°ΠΌΠ΅ Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ часовата Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ Π΅ ΠΌΠ°Π»ΠΊΠ°.

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ трябва ΠΏΠΎ-Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Π΄Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°ΠΌΠ΅ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅: Π²Π·Π°ΠΈΠΌΠ½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ само Π°ΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π΄ΡŠΡ€ΠΆΠΈ ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π°, ΠΈΠ·Π»Π΅Π·Π΅ ΠΏΡ€Π΅Π· Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π΅ Π²Π°Π»ΠΈΠ΄Π½ΠΎ (Ρ‚Π°Π·ΠΈ стойност, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° Π² ΡΡ‚ΡŠΠΏΠΊΠ° 3), минус ΠΎΡ‰Π΅ извСстно Π²Ρ€Π΅ΠΌΠ΅ (ΠΎΠ±Ρ‰ΠΎ няколко милисСкунди Π·Π° компСнсиранС Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π°Ρ‚Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ процСситС).

Π‘Π»Π΅Π΄Π½Π°Ρ‚Π° интСрСсна статия Ρ€Π°Π·ΠΊΠ°Π·Π²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚Π°ΠΊΠΈΠ²Π° систСми, ΠΊΠΎΠΈΡ‚ΠΎ изискват ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ: Π›ΠΈΠ·ΠΈΠ½Π³: Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ устойчив Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎΡΡ‚ Π½Π° разпрСдСлСния Ρ„Π°ΠΉΠ»ΠΎΠ² кСш.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ ΠΎΠΏΠΈΡ‚ ΠΏΡ€ΠΈ нСуспСх

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π½Π΅ успСС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, Ρ‚ΠΎΠΉ трябва Π΄Π° ΠΎΠΏΠΈΡ‚Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ слСд ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ забавянС; Ρ‚ΠΎΠ²Π° сС ΠΏΡ€Π°Π²ΠΈ, Π·Π° Π΄Π° сС дСсинхронизират мноТСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ Π΄Π° придобият Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ рСсурс Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ (ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ситуация Π½Π° "Ρ€Π°Π·Π΄Π²ΠΎΠ΅Π½ мозък", Π² която няма ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΠΈ). ОсвСн Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ СкзСмпляри Π½Π° Redis, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-тСсСн Π΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†ΡŠΡ‚, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС ситуация Π½Π° Ρ€Π°Π·Π΄Π²ΠΎΠ΅Π½ мозък (ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠ° Π΅ нСобходимостта ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ ΠΎΠΏΠΈΡ‚ΠΈ). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Π² идСалния случай ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ трябва Π΄Π° сС ΠΎΠΏΠΈΡ‚Π° Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ SET Π΄ΠΎ N СкзСмпляра Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° мултиплСксиранС.

Π’ΡƒΠΊ си струва Π΄Π° ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΊΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ успСят Π΄Π° придобият ΠΏΠΎ-голямата част ΠΎΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡΡ‚Π°, Π΄Π° освободят (частично) ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° Π½Π΅ сС Π½Π°Π»Π°Π³Π° Π΄Π° Ρ‡Π°ΠΊΠ°Ρ‚ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ Π΄Π° ΠΈΠ·Ρ‚Π΅Ρ‡Π΅, ΠΏΡ€Π΅Π΄ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСсурса Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΡ‚ΠΎ ΠΎΡ‚Π½ΠΎΠ²ΠΎ (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π°ΠΊΠΎ възникнС фрагмСнтация Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π·Π°Π³ΡƒΠ±ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ с СкзСмпляритС Π½Π° Redis, Ρ‚ΠΎΠ³Π°Π²Π° трябва Π΄Π° ΠΏΠ»Π°Ρ‚ΠΈΡ‚Π΅ Π½Π°ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π·Π° наличност, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‡Π°ΠΊΠ°Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ Π΄Π° ΠΈΠ·Ρ‚Π΅Ρ‡Π΅).

ОсвобоТдаванС Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π°

ΠžΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π΅ проста опСрация, която просто изисква ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° всички СкзСмпляри, нСзависимо Π΄Π°Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ» ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ СкзСмпляр.

Π‘ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π·Π° сигурност

БСзопасСн Π»ΠΈ Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚? НСка сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° си прСдставим ΠΊΠ°ΠΊΠ²ΠΎ сС случва Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ сцСнарии.

ΠšΠ°Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ, Π½Π΅ΠΊΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ΠΌ, Ρ‡Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ успял Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ СкзСмпляри. ВсСки СкзСмпляр Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΊΠ»ΡŽΡ‡ с Сднакъв ΠΆΠΈΠ²ΠΎΡ‚ Π·Π° всички. ВсСки ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΎΠ±Π°Ρ‡Π΅ Π΅ инсталиран ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚Π΅ Ρ‰Π΅ ΠΈΠ·Ρ‚Π΅ΠΊΠ°Ρ‚ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅. Но Π°ΠΊΠΎ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠ»ΡŽΡ‡ Π΅ инсталиран Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ ΠΏΠΎ-лош ΠΎΡ‚ T1 (Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ с ΠΏΡŠΡ€Π²ΠΈΡ ΡΡŠΡ€Π²ΡŠΡ€), Π° послСдният ΠΊΠ»ΡŽΡ‡ Π΅ инсталиран във Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ ΠΏΠΎ-лошо ΠΎΡ‚ T2 (Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ ΠΎΡ‚ послСдния ΡΡŠΡ€Π²ΡŠΡ€), Ρ‚ΠΎΠ³Π°Π²Π° смС сигурни, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠ»ΡŽΡ‡ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Ρ‚ΠΈΡ‡Π°, Ρ‰Π΅ ΠΎΡ†Π΅Π»Π΅Π΅ ΠΏΠΎΠ½Π΅ MIN_VALIDITY=TTL-(T2-T1)-CLOCK_DRIFT. Всички Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Ρ‰Π΅ ΠΈΠ·Ρ‚Π΅ΠΊΠ°Ρ‚ ΠΏΠΎ-късно, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° смС сигурни, Ρ‡Π΅ всички ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Π°Π»ΠΈΠ΄Π½ΠΈ ΠΏΠΎΠ½Π΅ Π·Π° Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅.

ΠŸΡ€Π΅Π· Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΏΡ€Π΅Π· ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ остават Π²Π°Π»ΠΈΠ΄Π½ΠΈ, Π΄Ρ€ΡƒΠ³ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ N/2+1 SET NX ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° успСят, Π°ΠΊΠΎ N/2+1 ΠΊΠ»ΡŽΡ‡Π° Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, вСднъТ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΡ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, Π΅ нСвъзмоТно Π΄Π° сС ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π² ΡΡŠΡ‰ΠΈΡ ΠΌΠΎΠΌΠ΅Π½Ρ‚ (Ρ‚ΠΎΠ²Π° Π±ΠΈ Π½Π°Ρ€ΡƒΡˆΠΈΠ»ΠΎ свойството Π·Π° Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅).
ИскамС ΠΎΠ±Π°Ρ‡Π΅ Π΄Π° смС сигурни, Ρ‡Π΅ няколко ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° успСят Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Ако ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ» ΠΏΠΎ-голямата част ΠΎΡ‚ СкзСмпляритС Π·Π° ΠΎΠΊΠΎΠ»ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ максималната ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ, Ρ‚ΠΎΠΉ Ρ‰Π΅ счита Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π·Π° Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎ ΠΈ Ρ‰Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈ СкзСмпляритС. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ трябва Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ само случая, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ успял Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π° ΠΏΠΎ-голямата част ΠΎΡ‚ инстанциитС Π·Π° Π²Ρ€Π΅ΠΌΠ΅, ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ Π΄Π°Ρ‚Π°Ρ‚Π° Π½Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅. Π’ случая, ΠΏΠΎ горния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΡ€Π΅Π· Π²Ρ€Π΅ΠΌΠ΅ MIN_VALIDITY Π½ΠΈΠΊΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ трябва Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Ρ‰Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ N/2+1 СкзСмпляра Π² Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Π²Ρ€Π΅ΠΌΠ΅ (ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° Π² края Π½Π° Π΅Ρ‚Π°ΠΏ 2) само ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° мнозинството Π΅ ΠΏΠΎ-голямо ΠΎΡ‚ TTL Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎ.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π΄Π° прСдоставитС ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ доказатСлство Π·Π° сигурност, Π΄Π° посочитС ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ ΠΈΠ»ΠΈ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠ° Π² Π³ΠΎΡ€Π½ΠΎΡ‚ΠΎ?

Π‘ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚

Наличността Π½Π° систСмата зависи ΠΎΡ‚ Ρ‚Ρ€ΠΈ основни характСристики:

  1. Автоматично освобоТдаванС Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ (ΠΏΡ€ΠΈ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° срока Π½Π° валидност Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅): ΠšΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π·Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ.
  2. Π€Π°ΠΊΡ‚ΡŠΡ‚, Ρ‡Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ си ΠΏΠΎΠΌΠ°Π³Π°Ρ‚, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Ρ‚ Π±Ρ€Π°Π²ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΆΠ΅Π»Π°Π½Π°Ρ‚Π° Π±Ρ€Π°Π²Π° Π½Π΅ Π΅ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΡ‚Π° ΠΈΠ»ΠΈ Π΅ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΡ‚Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π°; Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΅ вСроятно Π΄Π° Π½Π΅ сС Π½Π°Π»Π°Π³Π° Π΄Π° Ρ‡Π°ΠΊΠ°ΠΌΠ΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Ρ‚Π΅ΠΊΠ°Ρ‚, Π·Π° Π΄Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ΅ΠΌ ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠ°Ρ‚Π°.
  3. Π€Π°ΠΊΡ‚ΡŠΡ‚, Ρ‡Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ трябва Π΄Π° ΠΎΠΏΠΈΡ‚Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, Ρ‚ΠΎΠΉ Ρ‡Π°ΠΊΠ° сравнитСлно ΠΏΠΎ-дълго Π²Ρ€Π΅ΠΌΠ΅ ΠΎΡ‚ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ. Π’ΠΎΠ²Π° намалява вСроятността ΠΎΡ‚ възникванС Π½Π° ситуация Π½Π° Ρ€Π°Π·Π΄Π²ΠΎΠ΅Π½ мозък ΠΏΡ€ΠΈ конкурСнция Π·Π° рСсурси.

Има ΠΎΠ±Π°Ρ‡Π΅ Π½Π°ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π·Π° наличност, Ρ€Π°Π²Π½ΠΎ Π½Π° TTL Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ сСгмСнти, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π°ΠΊΠΎ ΠΈΠΌΠ° съсСдни сСгмСнти, Π½Π°ΠΊΠ°Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ. Π’ΠΎΠ²Π° сС случва Π²ΠΈΠ½Π°Π³ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ ΠΈ слСд Ρ‚ΠΎΠ²Π° сС ΠΎΡ‚ΠΊΡŠΡΠ½Π΅ към Π΄Ρ€ΡƒΠ³ сСгмСнт, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ освободи.

По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π±Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ сСгмСнти, систСмата ΠΌΠΎΠΆΠ΅ Π΄Π° останС Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π·Π° Π±Π΅Π·ΠΊΡ€Π°Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚, ΠΎΡ‚ΠΊΠ°Π· ΠΈ fsync

Много Ρ…ΠΎΡ€Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Redis, Π·Π°Ρ‰ΠΎΡ‚ΠΎ сС нуТдаят ΠΎΡ‚ висока производитСлност Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° латСнтността, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Π½Π΅ ΠΈ освобоТдаванС Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈ броя Π½Π° придобиванията/освобоТдаванията, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ Π·Π° сСкунда. Π—Π° Π΄Π° сС изпълни Ρ‚ΠΎΠ²Π° изискванС, ΠΈΠΌΠ° стратСгия Π·Π° комуникация с N Redis ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π·Π° намаляванС Π½Π° забавянСто. Π’ΠΎΠ²Π° Π΅ стратСгия Π·Π° мултиплСксиранС (ΠΈΠ»ΠΈ β€žΠΌΡƒΠ»Ρ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€Π°Π½Π΅ Π½Π° бСдния Ρ‡ΠΎΠ²Π΅ΠΊβ€œ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΡΠΎΠΊΠ΅Ρ‚ΡŠΡ‚ Π΅ поставСн Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ Ρ€Π΅ΠΆΠΈΠΌ, ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° всички ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈ Ρ‡Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ ΠΏΠΎ-късно, ΠΊΠ°Ρ‚ΠΎ сС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° двупосочно ΠΏΡŠΡ‚ΡƒΠ²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ всСки СкзСмпляр Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ) .

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π½ΠΈΠ΅ ΡΡŠΡ‰ΠΎ трябва Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΡΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½ΠΎΡ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Π°ΠΊΠΎ сС стрСмим Π΄Π° създадСм ΠΌΠΎΠ΄Π΅Π» с Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΎΡ‚ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈ.

По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π·Π° Π΄Π° изясним ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π½Π΅ΠΊΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ΠΌ, Ρ‡Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Redis ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π±Π΅Π· Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ успява Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π° 3 ΠΎΡ‚ 5 инстанции. Π•Π΄ΠΈΠ½ ΠΎΡ‚ СкзСмпляритС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ успя Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π°, сС рСстартира ΠΈ Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ° ΠΎΡ‚Π½ΠΎΠ²ΠΎ 3 СкзСмпляра Π·Π° ΡΡŠΡ‰ΠΈΡ рСсурс, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅, Π° Π΄Ρ€ΡƒΠ³ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ Π½Π° свой Ρ€Π΅Π΄ Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π° рСстартирания СкзСмпляр, Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°ΠΉΠΊΠΈ свойството Π·Π° сигурност, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π½Π° Π±Ρ€Π°Π²ΠΈ.

Ако Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ Π½Π°ΠΏΡ€Π΅Π΄ (AOF), ситуацията Ρ‰Π΅ сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ Π»Π΅ΠΊΠΎ. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° популяризиратС ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° SHUTDOWN ΠΈ Π³ΠΎ рСстартиратС. Въй ΠΊΠ°Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π² Redis са сСмантично Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ ΠΏΠΎ Ρ‚Π°ΠΊΡŠΠ² Π½Π°Ρ‡ΠΈΠ½, Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π΄Π° Ρ‚Π΅Ρ‡Π΅ Π΄ΠΎΡ€ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½, всички наши изисквания са Π½Π°Ρ€Π΅Π΄. Π’ΠΎΠ²Π° Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ, стига Π΄Π° Π΅ осигурСно Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅. Какво Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ Π² случай Π½Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠΊΠ°? Ако Redis Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠ°Ρ‚ΠΎ fsync сС синхронизира Π½Π° диска всяка сСкунда, Ρ‚ΠΎΠ³Π°Π²Π° Π΅ възмоТно слСд рСстартиранС Π΄Π° нямамС нашия ΠΊΠ»ΡŽΡ‡. Π’Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π½ΠΎ, Π°ΠΊΠΎ искамС Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ сигурност ΠΏΡ€ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° всяко рСстартиранС Π½Π° инстанция, трябва Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ fsync=always Π² настройкитС Π·Π° Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° напълно Ρ‰Π΅ ΡƒΠ±ΠΈΠ΅ производитСлността, Π΄ΠΎ Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° CP систСмитС, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° сигурно внСдряванС Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ.

Но ситуацията Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π°, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π° ΠΏΡ€ΡŠΠ² ΠΏΠΎΠ³Π»Π΅Π΄. По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ сигурността Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° сС Π·Π°ΠΏΠ°Π·Π²Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ инстанцията сС рСстартира слСд ΠΏΠΎΠ²Ρ€Π΅Π΄Π°, тя Π²Π΅Ρ‡Π΅ Π½Π΅ участва Π² Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

Π—Π° Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π°, просто трябва Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ слСд ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€ΡŠΡ‚ остава Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π·Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅, ΠΌΠ°Π»ΠΊΠΎ Π½Π°Π΄Π²ΠΈΡˆΠ°Π²Π°Ρ‰ максималния TTL, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Ρ‰Π΅ ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅ Π΄Π°Ρ‚Π°Ρ‚Π° Π½Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ освобоТдаванС Π½Π° всички ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎ рСстартиранС ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅ възмоТно Π΄Π° сС постигнС сигурност Π΄ΠΎΡ€ΠΈ ΠΏΡ€ΠΈ липса Π½Π° Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½ΠΎ постоянство Π² Redis. Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΎΠ±Π°Ρ‡Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³Π»ΠΎΠ±Π° Π·Π° Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚Ρ‚Π°. НапримСр, Π°ΠΊΠΎ ΠΏΠΎ-голямата част ΠΎΡ‚ СкзСмпляритС сС провалят, систСмата Ρ‰Π΅ станС Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π·Π° TTL (ΠΈ Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ рСсурс Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π±Π»ΠΎΠΊΠΈΡ€Π°Π½ ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅).

Π£Π²Π΅Π»ΠΈΡ‡Π°Π²Π°ΠΌΠ΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ°: Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°ΠΌΠ΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ

Ако Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π° ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅, сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ ΠΌΠ°Π»ΠΊΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ, възмоТно Π΅ Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡΡ‚Π°. По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π°ΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ Π·Π°Π΅Ρ‚ с изчислСния ΠΈ стойността Π½Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π΅ опасно ниска, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ‚Π΅ Lua скрипт Π΄ΠΎ всички инстанции, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° TTL Π½Π° ΠΊΠ»ΡŽΡ‡Π°, Π°ΠΊΠΎ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ всС ΠΎΡ‰Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΈ стойността ΠΌΡƒ всС ΠΎΡ‰Π΅ Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° стойност, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ бСшС ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΡ‚ΠΎ.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ трябва Π΄Π° обмисли ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Π½Π΅ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ само Π°ΠΊΠΎ Π΅ успял Π΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ СкзСмпляри Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π½Π° валидност.

Вярно Π΅, Ρ‡Π΅ тСхничСски Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ Π½Π΅ сС промСня, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ максималният Π±Ρ€ΠΎΠΉ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ ΠΎΠΏΠΈΡ‚ΠΈ Π·Π° ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ трябва Π΄Π° бъдС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай свойствата Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈ.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€