ื ืขื™ืœื” ืžื‘ื•ื–ืจืช ื‘ืืžืฆืขื•ืช Redis

ื”ื™ื™ ื”ื‘ืจ!

ื”ื™ื•ื ืื ื• ืžื‘ื™ืื™ื ืœื™ื“ื™ืขืชื›ื ืชืจื’ื•ื ืฉืœ ืžืืžืจ ืžื•ืจื›ื‘ ืขืœ ื™ื™ืฉื•ื ื ืขื™ืœื” ืžื‘ื•ื–ืจืช ื‘ืืžืฆืขื•ืช Redis ื•ืžื–ืžื™ื ื™ื ืืชื›ื ืœื“ื‘ืจ ืขืœ ื”ืกื™ื›ื•ื™ื™ื ืฉืœ Redis ื›ื ื•ืฉื. ื ื™ืชื•ื— ืฉืœ ืืœื’ื•ืจื™ืชื Redlock ื”ืžื“ื•ื‘ืจ ืžืžืจื˜ื™ืŸ ืงืœืคืžืŸ, ืžื—ื‘ืจ ื”ืกืคืจ "ื™ื™ืฉื•ืžื™ ืขื•ืžืก ื’ื‘ื•ื”", ื ืชื•ืŸ ื›ืืŸ.

ื ืขื™ืœื” ืžื‘ื•ื–ืจืช ื”ื™ื ืคืจื™ืžื™ื˜ื™ื‘ื™ ืฉื™ืžื•ืฉื™ ืžืื•ื“ ื”ืžืฉืžืฉ ื‘ืกื‘ื™ื‘ื•ืช ืจื‘ื•ืช ืฉื‘ื”ืŸ ืชื”ืœื™ื›ื™ื ืฉื•ื ื™ื ื—ื™ื™ื‘ื™ื ืœืขื‘ื•ื“ ืขืœ ืžืฉืื‘ื™ื ืžืฉื•ืชืคื™ื ื‘ืื•ืคืŸ ื‘ืœืขื“ื™.

ื™ืฉื ืŸ ืžืกืคืจ ืกืคืจื™ื•ืช ื•ืคื•ืกื˜ื™ื ืฉืžืชืืจื™ื ื›ื™ืฆื“ ืœื™ื™ืฉื DLM (Distributed Lock Manager) ื‘ืืžืฆืขื•ืช Redis, ืืš ื›ืœ ืกืคืจื™ื” ื ื•ืงื˜ืช ื‘ื’ื™ืฉื” ืฉื•ื ื” ื•ื”ืขืจื‘ื•ืช ืฉื”ืŸ ืžืกืคืงื•ืช ื—ืœืฉื•ืช ืœืžื“ื™ ื‘ื”ืฉื•ื•ืื” ืœืžื” ืฉื ื™ืชืŸ ืœื”ืฉื™ื’ ืขื ืขื™ืฆื•ื‘ ืžืขื˜ ื™ื•ืชืจ ืžืชื•ื—ื›ื.

ื‘ืžืืžืจ ื–ื” ื ื ืกื” ืœืชืืจ ืืœื’ื•ืจื™ืชื ืงื ื•ื ื™ ืžื•ืชื ื” ื”ืžื“ื’ื™ื ื›ื™ืฆื“ ืœื™ื™ืฉื ื ืขื™ืœื” ืžื‘ื•ื–ืจืช ื‘ืืžืฆืขื•ืช Redis. ื ื“ื‘ืจ ืขืœ ืืœื’ื•ืจื™ืชื ืฉื ืงืจื ืจื“ืœื•ืง, ื”ื•ื ืžื™ื™ืฉื ืžื ื”ืœ ืžื ืขื•ืœื™ื ืžื‘ื•ื–ืจ, ื•ืœื“ืขืชื ื•, ืืœื’ื•ืจื™ืชื ื–ื” ื‘ื˜ื•ื— ื™ื•ืชืจ ืžื”ื’ื™ืฉื” ื”ืจื’ื™ืœื” ืฉืœ ืžื•ืคืข ื™ื—ื™ื“. ืื ื• ืžืงื•ื•ื™ื ืฉื”ืงื”ื™ืœื” ืชื ืชื— ืื•ืชื•, ืชืกืคืง ืžืฉื•ื‘ ื•ืชืฉืชืžืฉ ื‘ื• ื›ื ืงื•ื“ืช ื”ืชื—ืœื” ืœืคืจื•ื™ืงื˜ื™ื ืžื•ืจื›ื‘ื™ื ืื• ืืœื˜ืจื ื˜ื™ื‘ื™ื™ื ื™ื•ืชืจ.

ื™ื™ืฉื•ื

ืœืคื ื™ ืฉื ืขื‘ื•ืจ ืœืชื™ืื•ืจ ื”ืืœื’ื•ืจื™ืชื, ืื ื• ืžืกืคืงื™ื ืžืกืคืจ ืงื™ืฉื•ืจื™ื ืœืžื™ืžื•ืฉื™ื ืžื•ื›ื ื™ื. ื”ื ื™ื›ื•ืœื™ื ืœืฉืžืฉ ืœืขื™ื•ืŸ.

  • Redlock-rb (ื™ื™ืฉื•ื ืขื‘ื•ืจ ืจื•ื‘ื™). ื™ืฉ ื’ื ืžื–ืœื’ Redlock-rb, ืฉืžื•ืกื™ืฃ ื—ื‘ื™ืœื” (ืคื ื™ื ื”) ืœื ื•ื—ื•ืช ื”ื”ืคืฆื”, ื•ืœื ืจืง ื‘ืฉื‘ื™ืœ ื–ื”.
  • Redlock-py (ื™ื™ืฉื•ื Python).
  • ืื™ื™ื•ืจื“ืœื•ืง (ื™ื™ืฉื•ื ืขื‘ื•ืจ Asyncio Python).
  • Redlock-php (ื™ื™ืฉื•ื ืขื‘ื•ืจ PHP).
  • PHPRedisMutex (ื™ื™ืฉื•ื ื ื•ืกืฃ ืขื‘ื•ืจ PHP)
  • cheprasov/php-redis-lock (ืกืคืจื™ื™ืช PHP ืœืžื ืขื•ืœื™ื)
  • ืกื™ื ื›ืจื•ืŸ ืื“ื•ื (ื™ื™ืฉื•ื ืขื‘ื•ืจ Go).
  • ืจื“ื™ืกื•ืŸ (ื™ื™ืฉื•ื ืขื‘ื•ืจ Java).
  • Redis::DistLock (ื™ื™ืฉื•ื ืขื‘ื•ืจ Perl).
  • Redlock-cpp (ื™ื™ืฉื•ื ืขื‘ื•ืจ C++).
  • Redlock-cs (ื™ื™ืฉื•ื ืขื‘ื•ืจ C#/.NET).
  • RedLock.net (ื™ื™ืฉื•ื ืขื‘ื•ืจ C#/.NET). ืขื ืชืžื™ื›ื” ื‘ื”ืจื—ื‘ื•ืช ืืกื™ื ื›ืจื•ืŸ ื•ื ืขื™ืœื”.
  • ืกืงืจืœื˜ ืœื•ืง (ื™ื™ืฉื•ื ืขื‘ื•ืจ C# .NET ืขื ืžืื’ืจ ื ืชื•ื ื™ื ื ื™ืชืŸ ืœื”ื’ื“ืจื”)
  • Redlock4Net (ื™ื™ืฉื•ื ืขื‘ื•ืจ C# .NET)
  • ืฆื•ืžืช-ืื“ื•ื (ื™ื™ืฉื•ื ืขื‘ื•ืจ NodeJS). ื›ื•ืœืœ ืชืžื™ื›ื” ืœื”ืืจื›ืช ืžื ืขื•ืœื™ื.

ืื‘ื˜ื—ื” ื•ื–ืžื™ื ื•ืช ืขืจื‘ื•ื™ื•ืช

ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœื“ื’ืžืŸ ืืช ื”ืขื™ืฆื•ื‘ ืฉืœื ื• ืขื ืฉืœื•ืฉื” ืžืืคื™ื™ื ื™ื ื‘ืœื‘ื“ ืฉืœื“ืขืชื ื• ืžืกืคืงื™ื ืืช ื”ืขืจื‘ื•ื™ื•ืช ื”ืžื™ื ื™ืžืœื™ื•ืช ื”ื ื“ืจืฉื•ืช ืœืฉื™ืžื•ืฉ ื™ืขื™ืœ ื‘ื ืขื™ืœื” ืžื‘ื•ื–ืจืช.

  1. ืจื›ื•ืฉ ื‘ื™ื˜ื—ื•ื ื™: ื”ื“ืจื” ื”ื“ื“ื™ืช. ื‘ื›ืœ ื–ืžืŸ ื ืชื•ืŸ, ืจืง ืœืงื•ื— ืื—ื“ ื™ื›ื•ืœ ืœื”ื—ื–ื™ืง ืืช ื”ืžื ืขื•ืœ.
  2. ื–ืžื™ื ื•ืช ืžืืคื™ื™ืŸ ื': ืื™ืŸ ืžื‘ื•ื™ ืกืชื•ื. ืชืžื™ื“ ืืคืฉืจ ืœืจื›ื•ืฉ ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื ืขื™ืœื”, ื’ื ืื ื”ืœืงื•ื— ืฉื ืขืœ ืืช ื”ืžืฉืื‘ ื ื›ืฉืœ ืื• ื ื•ื—ืช ืขืœ ืžืงื˜ืข ื“ื™ืกืง ืื—ืจ.
  3. ื–ืžื™ื ื•ืช ืžืืคื™ื™ืŸ ื‘': ืกื•ื‘ืœื ื•ืช ืชืงืœื•ืช. ื›ืœ ืขื•ื“ ืจื•ื‘ ื”ืฆืžืชื™ื ืฉืœ Redis ืคื•ืขืœื™ื, ืœืงื•ื—ื•ืช ื™ื›ื•ืœื™ื ืœืจื›ื•ืฉ ื•ืœืฉื—ืจืจ ืžื ืขื•ืœื™ื.

ืžื“ื•ืข ื™ื™ืฉื•ื ื”ืžื‘ื•ืกืก ืขืœ ืฉื—ื–ื•ืจ ื›ืฉืœ ืื™ื ื• ืžืกืคื™ืง ื‘ืžืงืจื” ื–ื”
ื›ื“ื™ ืœื”ื‘ื™ืŸ ืžื” ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœืฉืคืจ, ื‘ื•ืื• ื ื ืชื— ืืช ืžืฆื‘ ื”ืขื ื™ื™ื ื™ื ื”ื ื•ื›ื—ื™ ืขื ืจื•ื‘ ืกืคืจื™ื•ืช ื”ื ืขื™ืœื” ื”ืžื‘ื•ื–ืจื•ืช ื”ืžื‘ื•ืกืกื•ืช ืขืœ Redis.

ื”ื“ืจืš ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ ืœื ืขื•ืœ ืžืฉืื‘ ื‘ืืžืฆืขื•ืช Redis ื”ื™ื ืœื™ืฆื•ืจ ืžืคืชื— ื‘ืžื•ืคืข. ื‘ื“ืจืš ื›ืœืœ, ืžืคืชื— ื ื•ืฆืจ ืขื ืื•ืจืš ื—ื™ื™ื ืžื•ื’ื‘ืœ, ื–ื” ืžื•ืฉื’ ื‘ืืžืฆืขื•ืช ืชื›ื•ื ืช expires ื”ืžืกื•ืคืงืช ื‘-Redis, ื›ืš ืฉื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ืžืคืชื— ื–ื” ืžืฉืชื—ืจืจ (ื ื›ืก 2 ื‘ืจืฉื™ืžื” ืฉืœื ื•). ื›ืืฉืจ ื”ืœืงื•ื— ืฆืจื™ืš ืœืฉื—ืจืจ ืืช ื”ืžืฉืื‘, ื”ื•ื ืžื•ื—ืง ืืช ื”ืžืคืชื—.

ื‘ืžื‘ื˜ ืจืืฉื•ืŸ, ื”ืคืชืจื•ืŸ ื”ื–ื” ืขื•ื‘ื“ ื“ื™ ื˜ื•ื‘, ืื‘ืœ ื™ืฉ ื‘ืขื™ื”: ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœื ื• ื™ื•ืฆืจืช ื ืงื•ื“ืช ื›ืฉืœ ืื—ืช. ืžื” ืงื•ืจื” ืื ืžื•ืคืข Redis ื”ืžืืจื— ื ื›ืฉืœ? ืื– ื‘ื•ื ื ื•ืกื™ืฃ ืขื‘ื“! ื•ื ืฉืชืžืฉ ื‘ื• ืื ื”ืžืฆื™ื’ ืื™ื ื• ื–ืžื™ืŸ. ืœืžืจื‘ื” ื”ืฆืขืจ, ืืคืฉืจื•ืช ื–ื• ืื™ื ื” ืงื™ื™ืžืช. ืขืœ ื™ื“ื™ ื›ืš, ืœื ื ื•ื›ืœ ืœื™ื™ืฉื ื›ืจืื•ื™ ืืช ืžืืคื™ื™ืŸ ื”ื”ื—ืจื’ื” ื”ื”ื“ื“ื™ืช ืฉืื ื• ืฆืจื™ื›ื™ื ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืื‘ื˜ื—ื”, ืžื›ื™ื•ื•ืŸ ืฉื”ืฉื›ืคื•ืœ ื‘-Redis ื”ื•ื ืืกื™ื ื›ืจื•ื ื™.

ื‘ืจื•ืจ ืฉื‘ืžื•ื“ืœ ื›ื–ื” ืžืชืจื—ืฉ ืžืฆื‘ ื’ื–ืข:

  1. ืœืงื•ื— ื' ืจื•ื›ืฉ ืžื ืขื•ืœ ืขืœ ื”ืžืืกื˜ืจ.
  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 ื•ืœืื—ืจ ืžื›ืŸ ืœื™ืฆื•ืจ ื–ืจื ืคืกืื•ื“ื• ืืงืจืื™ ืžืžื ื•. ืคืชืจื•ืŸ ืคืฉื•ื˜ ื™ื•ืชืจ ื›ื•ืœืœ ืฉื™ืœื•ื‘ ืฉืœ ื–ืžืŸ ื™ื•ื ื™ืงืก ื‘ืจื–ื•ืœื•ืฆื™ื™ืช ืžื™ืงืจื•-ืฉื ื™ื•ืช ื‘ืชื•ืกืคืช ืžื–ื”ื” ื”ืœืงื•ื—; ื–ื” ืœื ื›ืœ ื›ืš ืžืื•ื‘ื˜ื—, ืื‘ืœ ื–ื” ื›ื ืจืื” ืขื•ืžื“ ื‘ืžืฉื™ืžื” ื‘ืจื•ื‘ ื”ื”ืงืฉืจื™ื.

ื”ื–ืžืŸ ื‘ื• ืื ื• ืžืฉืชืžืฉื™ื ื›ืžื“ื“ ืœืžืฉืš ื—ื™ื™ ื”ืžืคืชื— ื ืงืจื "ื—ื™ื™ ื”ืžื ืขื•ืœ". ืขืจืš ื–ื” ื”ื•ื ื’ื ืžืฉืš ื”ื–ืžืŸ ืœืคื ื™ ืฉื—ืจื•ืจ ื”ื ืขื™ืœื” ืื•ื˜ื•ืžื˜ื™ืช ื•ื’ื ืžืฉืš ื”ื–ืžืŸ ืฉื™ืฉ ืœืœืงื•ื— ืœื”ืฉืœื™ื ืคืขื•ืœื” ืœืคื ื™ ืฉืœืงื•ื— ืื—ืจ ื™ื›ื•ืœ ื‘ืชื•ืจื• ืœื ืขื•ืœ ืืช ื”ืžืฉืื‘ ื”ื–ื”, ืžื‘ืœื™ ืœื”ืคืจ ื‘ืคื•ืขืœ ืขืจื‘ื•ื™ื•ืช ืื™-ื”ื›ืœืœื” ื”ื“ื“ื™ืช. ืื—ืจื™ื•ืช ื–ื• ืžื•ื’ื‘ืœืช ืจืง ืœื—ืœื•ืŸ ื–ืžืŸ ืžืกื•ื™ื, ืฉืžืชื—ื™ืœ ืžืจื’ืข ืจื›ื™ืฉืช ื”ืžื ืขื•ืœ.

ืื– ื“ื™ื‘ืจื ื• ืขืœ ื“ืจืš ื˜ื•ื‘ื” ืœืจื›ื•ืฉ ื•ืœืฉื—ืจืจ ืžื ืขื•ืœ. ื”ืžืขืจื›ืช (ืื ืื ื—ื ื• ืžื“ื‘ืจื™ื ืขืœ ืžืขืจื›ืช ืœื ืžื‘ื•ื–ืจืช ื”ืžื•ืจื›ื‘ืช ืžืžื•ืคืข ื‘ื•ื“ื“ ื•ื–ืžื™ืŸ ืชืžื™ื“) ืžืื•ื‘ื˜ื—ืช. ื‘ื•ืื• ื ืจื—ื™ื‘ ืืช ื”ืจืขื™ื•ืŸ ื”ื–ื” ืœืžืขืจื›ืช ืžื‘ื•ื–ืจืช, ืฉื‘ื” ืื™ืŸ ืœื ื• ืขืจื‘ื•ื™ื•ืช ื›ืืœื”.

ืืœื’ื•ืจื™ืชื 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 ืฉืœ ืžืงื˜ืขื™ ื”ืจืฉืช, ื›ืš ืฉืื ื™ืฉ ืžืงื˜ืขื™ื ืจืฆื™ืคื™ื, ื”ืขื•ื ืฉ ืขืฉื•ื™ ืœื”ื™ื•ืช ื‘ืœืชื™ ืžื•ื’ื‘ืœ. ื–ื” ืงื•ืจื” ื‘ื›ืœ ืคืขื ืฉืœืงื•ื— ืจื•ื›ืฉ ืžื ืขื•ืœ ื•ืื– ืงื•ืจืข ืœืงื˜ืข ืื—ืจ ืœืคื ื™ ืฉื”ื•ื ื™ื›ื•ืœ ืœืฉื—ืจืจ ืื•ืชื•.

ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ื‘ื”ื™ื ืชืŸ ืžืงื˜ืขื™ ืจืฉืช ืจืฆื™ืคื™ื ืื™ื ืกื•ืคื™ื™ื, ืžืขืจื›ืช ื™ื›ื•ืœื” ืœื”ื™ืฉืืจ ืœื ื–ืžื™ื ื” ืœืคืจืง ื–ืžืŸ ืื™ื ืกื•ืคื™.

ื‘ื™ืฆื•ืขื™ื, failover ื•-fsync

ืื ืฉื™ื ืจื‘ื™ื ืžืฉืชืžืฉื™ื ื‘-Redis ืžื›ื™ื•ื•ืŸ ืฉื”ื ื–ืงื•ืงื™ื ืœื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ืฉืœ ืฉืจืช ื ืขื™ืœื” ืžื‘ื—ื™ื ืช ื”ื”ืฉื”ื™ื” ื”ื ื“ืจืฉืช ืœืจื›ื™ืฉื” ื•ืฉื—ืจื•ืจ ืฉืœ ืžื ืขื•ืœื™ื, ื•ืžืกืคืจ ื”ืจื›ื™ืฉื•ืช/ืฉื—ืจื•ืจื™ื ืฉื ื™ืชืŸ ืœื”ืฉืœื™ื ื‘ืฉื ื™ื™ื”. ื›ื“ื™ ืœืขืžื•ื“ ื‘ื“ืจื™ืฉื” ื–ื•, ืงื™ื™ืžืช ืืกื˜ืจื˜ื’ื™ื” ืœืชืงืฉื•ืจืช ืขื ืฉืจืชื™ N Redis ื›ื“ื™ ืœื”ืคื—ื™ืช ืืช ื–ืžืŸ ื”ืื—ื–ื•ืจ. ื–ื•ื”ื™ ืืกื˜ืจื˜ื’ื™ื™ืช ืจื™ื‘ื•ื™ (ืื• "ืจื™ื‘ื•ื‘ ืฉืœ ืขื ื™", ื›ืืฉืจ ื”ืฉืงืข ืžื•ืขื‘ืจ ืœืžืฆื‘ ืœื ื—ื•ืกื, ืฉื•ืœื— ืืช ื›ืœ ื”ืคืงื•ื“ื•ืช ื•ืงื•ืจื ืืช ื”ืคืงื•ื“ื•ืช ืžืื•ื—ืจ ื™ื•ืชืจ, ื‘ื”ื ื—ื” ืฉื–ืžืŸ ื”ื”ืœื™ื›ื” ื”ืœื•ืš ื•ืฉื•ื‘ ื‘ื™ืŸ ื”ืœืงื•ื— ืœื›ืœ ืžื•ืคืข ื“ื•ืžื”) .

ืขื ื–ืืช, ืขืœื™ื ื• ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ื’ื ืืช ื”ืฉื™ืงื•ืœ ื”ืงืฉื•ืจ ืœืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ืื ืื ื• ืฉื•ืืคื™ื ืœื™ืฆื•ืจ ืžื•ื“ืœ ืขื ื”ืชืื•ืฉืฉื•ืช ืืžื™ื ื” ืžืชืงืœื•ืช.

ื‘ืขื™ืงืจื•ืŸ, ื›ื“ื™ ืœื”ื‘ื”ื™ืจ ืืช ื”ื‘ืขื™ื”, ื ื ื™ื— ืฉืื ื• ืžื’ื“ื™ืจื™ื ืืช Redis ืœืœื ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื›ืœืœ. ื”ืœืงื•ื— ืžืฆืœื™ื— ืœื—ืกื•ื 3 ืžืชื•ืš 5 ืžืงืจื™ื. ืื—ื“ ื”ืžื•ืคืขื™ื ืฉื”ืœืงื•ื— ื”ืฆืœื™ื— ืœื—ืกื•ื ืžื•ืคืขืœ ืžื—ื“ืฉ, ื•ื‘ืจื’ืข ื–ื” ื™ืฉ ืฉื•ื‘ 3 ืžื•ืคืขื™ื ืขื‘ื•ืจ ืื•ืชื• ืžืฉืื‘, ืื•ืชื ืื ื• ื™ื›ื•ืœื™ื ืœื—ืกื•ื, ื•ืœืงื•ื— ืื—ืจ ื™ื›ื•ืœ, ื‘ืชื•ืจื•, ืœื—ืกื•ื ืืช ื”ืžื•ืคืข ืฉื”ื•ืคืขืœ ืžื—ื“ืฉ, ืชื•ืš ื”ืคืจื” ืฉืœ ืชื›ื•ื ืช ื”ืื‘ื˜ื—ื”. ืžื ื™ื— ื‘ืœืขื“ื™ื•ืช ืฉืœ ืžื ืขื•ืœื™ื.

ืื ืชืคืขื™ืœ ื ืชื•ื ื™ื ืงื“ื™ืžื” (AOF), ื”ืžืฆื‘ ื™ืฉืชืคืจ ืžืขื˜. ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืœืงื“ื ืฉืจืช ืขืœ ื™ื“ื™ ืฉืœื™ื—ืช ื”ืคืงื•ื“ื” SHUTDOWN ื•ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœื•. ืžื›ื™ื•ื•ืŸ ืฉืคืขื•ืœื•ืช ืชืคื•ื’ื” ื‘- Redis ืžื™ื•ืฉืžื•ืช ื‘ืื•ืคืŸ ืกืžื ื˜ื™ ื‘ืฆื•ืจื” ื›ื–ื• ืฉื”ื–ืžืŸ ืžืžืฉื™ืš ืœื–ืจื•ื ื’ื ื›ืฉื”ืฉืจืช ื›ื‘ื•ื™, ื›ืœ ื”ื“ืจื™ืฉื•ืช ืฉืœื ื• ื‘ืกื“ืจ. ื–ื” ื ื•ืจืžืœื™ ื›ืœ ืขื•ื“ ืžื•ื‘ื˜ื—ืช ื›ื™ื‘ื•ื™ ืงื‘ื•ืข. ืžื” ืœืขืฉื•ืช ื‘ืžืงืจื” ืฉืœ ื”ืคืกืงื•ืช ื—ืฉืžืœ? ืื Redis ืžื•ื’ื“ืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืขื ืกื ื›ืจื•ืŸ fsync ื‘ื“ื™ืกืง ื›ืœ ืฉื ื™ื™ื”, ืื– ื™ืชื›ืŸ ืฉืื—ืจื™ ื”ืคืขืœื” ืžื—ื“ืฉ ืœื ื™ื”ื™ื” ืœื ื• ืืช ื”ืžืคืชื— ืฉืœื ื•. ืชื™ืื•ืจื˜ื™ืช, ืื ื‘ืจืฆื•ื ื ื• ืœื”ื‘ื˜ื™ื— ืื‘ื˜ื—ืช ื ืขื™ืœื” ื‘ืžื”ืœืš ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ืžื•ืคืข ื›ืœืฉื”ื•, โ€‹โ€‹ืขืœื™ื ื• ืœื”ืคืขื™ืœ fsync=always ื‘ื”ื’ื“ืจื•ืช ืœืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš. ื–ื” ื™ื”ืจื•ื’ ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ื‘ื™ืฆื•ืขื™ื, ืขื“ ืœืจืžื” ืฉืœ ืžืขืจื›ื•ืช CP ื”ืžืฉืžืฉื•ืช ื‘ืื•ืคืŸ ืžืกื•ืจืชื™ ืœื™ื™ืฉื•ื ืžืื•ื‘ื˜ื— ืฉืœ ืžื ืขื•ืœื™ื ืžื‘ื•ื–ืจื™ื.

ืื‘ืœ ื”ืžืฆื‘ ื˜ื•ื‘ ื™ื•ืชืจ ืžืžื” ืฉื”ื•ื ื ืจืื” ื‘ืžื‘ื˜ ืจืืฉื•ืŸ. ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืื‘ื˜ื—ืช ื”ืืœื’ื•ืจื™ืชื ื ืฉืžืจืช ืžื›ื™ื•ื•ืŸ ืฉื›ืืฉืจ ื”ืžื•ืคืข ืžื•ืคืขืœ ืžื—ื“ืฉ ืœืื—ืจ ื›ืฉืœ, ื”ื•ื ืื™ื ื• ืžืฉืชืชืฃ ื™ื•ืชืจ ื‘ืฉื•ื ืžื ืขื•ืœ ืฉืคืขื™ืœ ื›ืขืช.

ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ื–ืืช, ืื ื—ื ื• ืจืง ืฆืจื™ื›ื™ื ืœื”ื‘ื˜ื™ื— ืฉืœืื—ืจ ื›ืฉืœ ื”ืžื•ืคืข ื™ื™ืฉืืจ ืœื ื–ืžื™ืŸ ืœืคืจืง ื–ืžืŸ ื”ืขื•ืœื” ื‘ืžืขื˜ ืขืœ ื”-TTL ื”ืžืงืกื™ืžืœื™ ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘ื•. ื›ืš ื ืžืชื™ืŸ ืœืชืืจื™ืš ื”ืชืคื•ื’ื” ื•ืœืฉื—ืจื•ืจ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ื›ืœ ื”ืžืคืชื—ื•ืช ืฉื”ื™ื• ืคืขื™ืœื™ื ื‘ื–ืžืŸ ื”ื›ืฉืœ.

ื‘ืืžืฆืขื•ืช ื”ืคืขืœื” ืžื—ื“ืฉ ืžื•ืฉื”ื™ืช, ื ื™ืชืŸ ื‘ืื•ืคืŸ ืขืงืจื•ื ื™ ืœื”ืฉื™ื’ ืื‘ื˜ื—ื” ื’ื ื‘ื”ื™ืขื“ืจ ื”ืชืžื“ื” ืืจื•ื›ืช ื˜ื•ื•ื— ื‘ืจื“ื™ืก. ืขื ื–ืืช, ืฉื™ืžื• ืœื‘ ืฉื”ื“ื‘ืจ ืขืœื•ืœ ืœื’ืจื•ืจ ืงื ืก ื‘ื’ื™ืŸ ื”ืคืจืช ื ื’ื™ืฉื•ืช. ืœื“ื•ื’ืžื”, ืื ืจื•ื‘ ื”ืžื•ืคืขื™ื ื ื›ืฉืœื™ื, ื”ืžืขืจื›ืช ืชื”ืคื•ืš ืœื ื–ืžื™ื ื” ื’ืœื•ื‘ืœื™ืช ืขื‘ื•ืจ ื”-TTL (ื•ืœื ื ื™ืชืŸ ืœื—ืกื•ื ืžืฉืื‘ ื‘ืžื”ืœืš ืชืงื•ืคื” ื–ื•).

ืื ื• ืžื’ื“ื™ืœื™ื ืืช ื–ืžื™ื ื•ืช ื”ืืœื’ื•ืจื™ืชื: ืื ื• ืžืจื—ื™ื‘ื™ื ืืช ื”ื—ืกื™ืžื”

ืื ื”ืขื‘ื•ื“ื” ื”ืžื‘ื•ืฆืขืช ืขืœ ื™ื“ื™ ืœืงื•ื—ื•ืช ืžื•ืจื›ื‘ืช ืžืฉืœื‘ื™ื ืงื˜ื ื™ื, ื ื™ืชืŸ ืœื”ืคื—ื™ืช ืืช ืžืฉืš ื”ื ืขื™ืœื” ื”ืžื•ื’ื“ืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื•ืœื™ื™ืฉื ืžื ื’ื ื•ืŸ ืœื”ืืจื›ืช ืžื ืขื•ืœื™ื. ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืื ื”ืœืงื•ื— ืขืกื•ืง ื‘ืžื—ืฉื•ื‘ ื•ืขืจืš ืชืคื•ื’ืช ื”ื ืขื™ืœื” ื ืžื•ืš ื‘ืื•ืคืŸ ืžืกื•ื›ืŸ, ื ื™ืชืŸ ืœืฉืœื•ื— ืกืงืจื™ืคื˜ Lua ืœื›ืœ ื”ืžื•ืคืขื™ื ืฉืžืจื—ื™ื‘ ืืช ื”-TTL ืฉืœ ื”ืžืคืชื— ืื ื”ืžืคืชื— ืขื“ื™ื™ืŸ ืงื™ื™ื ื•ื”ืขืจืš ืฉืœื• ืขื“ื™ื™ืŸ ืขืจืš ืืงืจืื™ ื”ืžืชืงื‘ืœ ื›ืืฉืจ ืžื ืขื•ืœ ื ืจื›ืฉ.

ืœืงื•ื— ืฆืจื™ืš ืœืฉืงื•ืœ ืจื›ื™ืฉื” ืžื—ื“ืฉ ืฉืœ ืžื ืขื•ืœ ืจืง ืื ื”ื•ื ื”ืฆืœื™ื— ืœื ืขื•ืœ ืืช ืจื•ื‘ ื”ืžืงืจื™ื ื‘ืชื•ืš ืชืงื•ืคืช ื”ืชื•ืงืฃ.

ื ื›ื•ืŸ, ื˜ื›ื ื™ืช ื”ืืœื’ื•ืจื™ืชื ืœื ืžืฉืชื ื”, ื•ืœื›ืŸ ื™ืฉ ืœื”ื’ื‘ื™ืœ ืืช ื”ืžืกืคืจ ื”ืžืจื‘ื™ ืฉืœ ื ื™ืกื™ื•ื ื•ืช ื—ื•ื–ืจื™ื ื•ื ืฉื ื™ื ืœืจื›ื•ืฉ ืžื ืขื•ืœื™ื, ืื—ืจืช ืžืืคื™ื™ื ื™ ื”ื ื’ื™ืฉื•ืช ื™ื•ืคืจื•.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”