Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° 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) минус ΠΎΡ‰Π΅ извСстно Π²Ρ€Π΅ΠΌΠ΅ (всичко Π½Π° всичко няколко милисСкунди, Π·Π° Π΄Π° компСнсирамС Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° във Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ процСситС).

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

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

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster