РаспрСдСлСнныС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Redis

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€!

БСгодня ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ слоТной ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ распрСдСлСнных Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ срСдствами Redis ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ пСрспСктивности Redis ΠΊΠ°ΠΊ Ρ‚Π΅ΠΌΡ‹. Анализ рассматриваСмого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Redlock ΠΎΡ‚ ΠœΠ°Ρ€Ρ‚ΠΈΠ½Π° КлСппмана, Π°Π²Ρ‚ΠΎΡ€Π° ΠΊΠ½ΠΈΠ³ΠΈ "ВысоконагруТСнныС прилоТСния", ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ здСсь.

РаспрСдСлСнныС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ – ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ², примСняСмый Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… срСдах, Π³Π΄Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ процСссы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ раздСляСмыми рСсурсами ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

БущСствуСт ряд Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ постов, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ…, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ DLM (ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ распрСдСлСнных Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ) ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ 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).
  • Redisson (рСализация для Java).
  • Redis::DistLock (рСализация для Perl).
  • Redlock-cpp (рСализация для C++).
  • Redlock-cs (рСализация для C#/.NET).
  • RedLock.net (рСализация для C#/.NET). Π‘ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ async ΠΈ lock.
  • ScarletLock (рСализация для C# .NET с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…)
  • Redlock4Net (рСализация для C# .NET)
  • node-redlock (рСализация для NodeJS). Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ продлСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

Π“Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ бСзопасности ΠΈ доступности

ΠœΡ‹ собираСмся ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ всСго с трСмя свойствами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π½Π° наш взгляд, Π΄Π°ΡŽΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для эффСктивного использования распрСдСлСнных Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

  1. Бвойство бСзопасности: Π’Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ лишь ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ.
  2. Бвойство доступности A: ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π΄Π°ΠΆΠ΅ Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π²ΡˆΠΈΠΉ рСсурс, ΠΎΡ‚ΠΊΠ°ΠΆΠ΅Ρ‚ ΠΈΠ»ΠΈ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСгмСнт диска.
  3. Бвойство доступности B: ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ. Пока Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡƒΠ·Π»ΠΎΠ² Redis Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ способны ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, основанной Π½Π° восстановлСнии послС ΠΎΡ‚ΠΊΠ°Π·Π°, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС нСдостаточно
Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΌΡ‹ собираСмся ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π», слоТившССся с Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для распрСдСлСнных Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, основанных Π½Π° Redis.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСсурс ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Redis – ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ Π² инстансС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠ»ΡŽΡ‡ создаСтся с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ, это достигаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ прСдусмотрСнной Π² Redis возмоТности expires, поэтому Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ этот ΠΊΠ»ΡŽΡ‡ высвобоТдаСтся (свойство 2 Π² нашСм спискС). Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ рСсурс, ΠΎΠ½ удаляСт ΠΊΠ»ΡŽΡ‡.

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

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ состояниС Π³ΠΎΠ½ΠΊΠΈ:

  1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ A ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° Π²Π΅Π΄ΡƒΡ‰Π΅ΠΌ.
  2. Π’Π΅Π΄ΡƒΡ‰ΠΈΠΉ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ запись Π² ΠΊΠ»ΡŽΡ‡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° Π²Π΅Π΄ΠΎΠΌΠΎΠΌΡƒ.
  3. Π’Π΅Π΄ΠΎΠΌΡ‹ΠΉ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ.
  4. ΠšΠ»ΠΈΠ΅Π½Ρ‚ B ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ рСсурса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ A. ΠΠΠ Π£Π¨Π•ΠΠ˜Π• Π‘Π•Π—ΠžΠŸΠΠ‘ΠΠžΠ‘Π’Π˜!

Иногда ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π² особых ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π΅, мноТСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° основС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ ΠΈΠ½Ρ‹Ρ… случаях Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, описанноС Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ рСализация с СдинствСнным инстансом

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ нСдостатки ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ с СдинствСнным инстансом, описанной Π²Ρ‹ΡˆΠ΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² этом простом случаС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ допустимо Π² Ρ‚Π΅Ρ… прилоТСниях, Π³Π΄Π΅ состояниС Π³ΠΎΠ½ΠΊΠΈ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ допустимо, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° СдинствСнном инстансС слуТит Ρ‚ΠΎΠΉ основой, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² описанном здСсь распрСдСлСнном Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ приобрСсти Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, поступим Ρ‚Π°ΠΊ:

SET resource_name my_random_value NX PX 30000

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° устанавливаСт ΠΊΠ»ΡŽΡ‡, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ сущСствуСт (опция NX), со сроком дСйствия 30000 миллисСкунд (опция 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 Π² микросСкундном Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ плюс ID ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°; ΠΎΠ½ΠΎ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ бСзопасно, Π½ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, соотвСтствуСт ΡƒΡ€ΠΎΠ²Π½ΡŽ Π·Π°Π΄Π°Ρ‡ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ контСкстов.

ВрСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² качСствС показатСля Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠ»ΡŽΡ‡Π°, называСтся «врСмя дСйствия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈΒ». Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ срок, ΠΏΠΎ истСчСнии ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° автоматичСски высвободится, ΠΈ врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΅ΡΡ‚ΡŒ Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ смоТСт, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот рСсурс, Π±Π΅Π· фактичСского Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Вакая гарантия ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° лишь ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ начинаСтся с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° приобрСтСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ обсудили Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ способ приобрСтСния ΠΈ высвобоТдСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. БистСма (Ссли Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ нСраспрСдСлСнной систСмС, состоящСй ΠΈΠ· СдинствСнного ΠΈ всСгда доступного инстанса) бСзопасна. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠΌ эту ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π΄ΠΎ распрСдСлСнной систСмы, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ Ρƒ нас Π½Π΅Ρ‚.

Алгоритм Redlock

Π’ распрСдСлСнной вСрсии Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прСдполагаСтся, Ρ‡Ρ‚ΠΎ Ρƒ нас N Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… Redis. Π­Ρ‚ΠΈ ΡƒΠ·Π»Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ нСзависимы Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, поэтому ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π½Π΅ΡΠ²Π½ΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ. ΠœΡ‹ ΡƒΠΆΠ΅ рассказали, ΠΊΠ°ΠΊ бСзопасно ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° СдинствСнном инстансС. ΠœΡ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π°Π½Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с СдинствСнным инстансом Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΡ‹ устанавливаСм N Ρ€Π°Π²Π½Ρ‹ΠΌ 5, это Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π°ΠΌ потрСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 5 Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… Redis Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² основном нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ приобрСсти Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

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

ЯвляСтся Π»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ асинхронным?

Π”Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ основываСтся Π½Π° Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ, хотя ΠΈ Π½Π΅Ρ‚ синхронизированных часов, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π±Ρ‹ всС процСссы, локальноС врСмя Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ процСссС всС Ρ€Π°Π²Π½ΠΎ Ρ‚Π΅Ρ‡Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ‚Π΅ΠΌΠΏΠ΅, ΠΈ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅Π²Π΅Π»ΠΈΠΊΠ° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Ρ‰ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΏΠΎ истСчСнии ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° автоматичСски снимаСтся. Π­Ρ‚ΠΎ Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ²: Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ часы, ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π±Π΅ΠΆΠΊΠ° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… Π½Π΅Π²Π΅Π»ΠΈΠΊΠ°.

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

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… согласования Ρ€Π°Π·Π±Π΅ΠΆΠΊΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, рассказываСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ интСрСсная ΡΡ‚Π°Ρ‚ΡŒΡ: Leases: an efficient fault-tolerant mechanism for distributed file cache consistency.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π΅

Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ снова это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π²Ρ‹Π΄Π΅Ρ€ΠΆΠ°Π² ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ; это дСлаСтся с Ρ†Π΅Π»ΡŒΡŽ Ρ€Π°ΡΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мноТСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΡ…ΡΡ приобрСсти Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ рСсурса (Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ситуации Β«Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ·Π³Π°Β», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅ΠΌ быстрСС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ пытаСтся приобрСсти Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° инстансов 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 ΠΊΠ»ΡŽΡ‡Π°, Ссли ΠΊΠ»ΡŽΡ‡ Π΅Ρ‰Π΅ сущСствуСт, Π° Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ являСтся случайным, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»Π° ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π½ΠΎΠΉ лишь Π² случаС, ΠΊΠΎΠ³Π΄Π° Π΅ΠΌΡƒ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ инстансов Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ дСйствия.

ΠŸΡ€Π°Π²Π΄Π°, тСхничСски Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΈ этом Π½Π΅ мСняСтся, поэтому максимальноС количСство ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ приобрСтСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒΡΡ свойства доступности.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ