α αα α!
αααααααααΎαααΆαααααΌααααα’αααααΌαααΆαααααααα’ααααααααααα»αααααΆααα½αα’αααΈααΆαα’αα»ααααααΆαα
αΆαααααα
ααα
αΆααααααααΎααααΆαα Redis α αΎαα’ααααΎαα’αααα±αααα·ααΆαα’αααΈααΆαααααΉααα»ααααα Redis ααΆαααααΆααααα½αα ααΆααα·ααΆααααααα½ααααααααΆα Redlock αα
αααα»ααααα½αααΈ Martin Kleppmann α’ααααα·ααααααααα
"
ααΆαα αΆαααααα ααα αΆαααΊααΆαα»αααααααααΆααααααααααααα»ααααααααΎαααα»αααα·ααααΆαααΆα αααΎα αααααααΎαααΆαααααααααααΆααααΌαααααααΎαααΆαααΎααααΆααα½ααααα»αααααααααααΆα ααα»ααα αα·ααα ααα
ααΆααααααΆααα αα·ααααααΆααα½αα ααα½ααα ααΈαααααααα·αααααΆα’αααΈααααα’αα»αααα DLM (Distributed Lock Manager) αααααααΎ Redis ααα»αααααααααΆαααααΈαα½ααααααΎαα·ααΈααΆααααααααααααααΆ α αΎαααΆαααΆααΆααααα½ααααααααααΊαααααααΆααααΎαααααααααα ααΉαα’αααΈαααα’αΆα αααααα ααΆαααΆαα½αααΉαααΆααα ααΆαααα»αααααααΆαααΆαααααα·α α
αα αααα»αα’αααααααα ααΎαααΉαααααΆααΆααααααΆα’αααΈαααα½ααααααααΆα Canonical ααΆααααααααα ααααααα αΆαααΈααααα’αα»ααααααΆαα αΆααααα ααα αΆααααααααΎ Redis α ααΎαααΉααα·ααΆαα’αααΈ algorithm αααα α ααΆ α αΆααααααααα αααΆα’αα»αααααααααα·ααΈαααααααααααααααααΆαα ααα αΆα α αΎαααΆααααα·αααααααΎα αααα½ααααααααΆααααααΆααα»ααααα·ααΆαααΆααα·ααΈααΆααααααααα½αααααααΆα ααΎααααααΉαααΆαα ααααααΉααα·ααΆαααΆ αααααααα·αααααα’ αα·αααααΎααΆααΆα ααα»α α αΆααααααΎααααααΆαααααααααααα»αααααΆα α¬αααα½αα
ααΆαα’αα»αααα
αα»αααΉααααααα ααΆααα·αααααΆαααααα½ααααααααΆα ααΎαααααααααααααΆααααΆα αααΎααα ααΆααααΆαα’αα»αααααααααααααα½α ααΆααααα α αα½αααα’αΆα ααααΌαααΆαααααΎαααααΆααααΆα―αααΆααααα
Redlock-rb (ααΆαα’αα»αααααααααΆαα Ruby) α ααααΆααααααα Redlock-rb ααααααααααααα αα (ααααΌα) αααααΆααααΆαααΆααααα½αααααΆαα ααα αΆα α αΎααα·αααααΉααααααααΆαααααααα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) α ααΆαα½αααΉαααΆαααΆαααααααααΆααααααααααααα async αα·αα αΆαααααScarletLock (ααΆαα’αα»αααααααααΆαα C# .NET ααΆαα½αααΉαααααΆαααα·αααααααααα’αΆα ααααααα ααΆααααααααααΆα)Redlock4Net (ααΆαα’αα»αααααααααΆαα C# .NET)node-redlock (ααΆαα’αα»αααααααααΆαα NodeJS) α αα½ααααα αΌαααΆαααΆαααααααααΆααααΆααααααΈαααα
ααΆαααΆααΆαα»ααααα·ααΆααα·αααΆαα’αΆα ααααΆα
ααΎαααΉαααααααΌααΆαααΆααα ααΆααααααΎαααΆαα½αααΉααααααααααααααα·ααΈαααΆααααααΎααα·αααΆαααααααΌαααΆαααΆααΆα’αααααααΆαααααααΌαααΆαααΎααααΈααααΎααααΆααααΆαα αΆααααα ααα αΆαααααααααααααα·αααααΆαα
- αααααααααααααα·αα»ααααα·ααΆαα ααΆααα·αααΆαααααα αΌααα αα·ααα ααα αα αααααΆαα½α ααΆαααα’αα·αα·ααααααΆααααα»ααααααααα’αΆα ααΆααααααΆαα
- ααΆαα’αΆα ααααΆααααααααααααααααα· A: ααααΆαααΆαααΆααααΆααααα ααΆαααααα’αΆα αα αα½α αααα»αααΆαααα½αααΆααα αααααΈααΆαααΆαααΈαααααααααα αΆααααααααΆααααΆααα α¬α α»αα αααΎαααααααΈαααααααααααα
- ααΆαα’αΆα ααααΆααααααααααααααααα· B: ααΆαα’ααα±αααα α»αα αααΆαααΆααααΆαα Redis ααΆαα αααΎααααα»αααααΎαααΆα α’αα·αα·ααα’αΆα ααα½αααΆα αα·ααααα ααααα
α ααα»α’αααΈααΆαααΆααΆαα’αα»αααααααααα’ααααΎααΆαααααΆαα‘αΎααα·αααΆααααΆαααααΊαα·ααααααααααΆαααααα»αααααΈααα
ααΎααααΈαααααΈα’αααΈαααααΎαααΉααααααα’ ααΌααα·ααΆαααααΆαααΆααα
αα
α»ααααααααΆαα½ααααααΆαααα
αΆαααααα
ααα
αΆαααΆαα
αααΎααααααα’ααααΎ Redis α
αα·ααΈααΆαααααααα»αααΎααααΈα αΆααααααααΆααααααααΎ Redis ααΊααΎααααΈαααααΎαααΌααααα αααα»αα§ααΆα αααα ααΆααααααΆ ααααααΌαααΆααααααΎαααΆαα½αααΉαα’αΆαα»ααΆαααααα ααΆααααΌαααΆααααααα αααααααΎαα»αααΆααα»αααααααααααΆααα αααα»α Redis ααΌα αααααα·αααΌααα·αααΆαααααααααααΌαααΆαα ααααααΆα (αααααααααααααα· 2 αα αααα»ααααααΈααααααΎα)α αα ααααααα’αα·αα·ααααααΌαααΆααααα ααααααΆα ααΆαα»αααα
αα glance ααααΌα, αααααααααΆααααααααΎαααΆαααα’, ααα»ααααααΆααααα αΆαα½α: ααααΆααααααααααααααΎααααααΎαα ααα»α αααα½αααααΆααααΆαααα ααΎααΆαα’αααΈααΎαα‘αΎαααααα·αααΎα§ααΆα ααααααΆαααΈα Redis αααΆααα? αααααααααααΆααα! α αΎαααΎαααΉαααααΎααΆ ααααα·αααΎα’αααααααΎαααααα αΆααα·αα’αΆα ααααΎααΆαα ααΆα’αα»αα αααααΎαααααα·αα’αΆα ααααΎαααΆαααΆαααα ααΆααααααΆαααααΎααΌα ααα ααΎαααΉααα·αα’αΆα α’αα»ααααααΆαααααΉαααααΌαααΌααααααααααααααα·ααΆαααααααΆαα αα·ααα αααααααΎαααααΌαααΆααΆαα»ααααα·ααΆαααααα ααΈαααααααΆαα αααααα αααα»α Redis ααΊα’ααααΆαα
ααΆααααααααα αααα»αααααΌαααααα ααααααααααααΆααααααΆααααΎαα‘αΎαα
- α’αα·αα·αα A ααα½αααΆααααα ααΎααα
- αααααΆααααα»αααααααα αΌααααααΉαααααΌαααΆαααααααα ααΆαααα
- α’αααααΎαααΆαααααΌαααΆαααα‘αΎαααΆααααΆα’αααααΉαααΆαα
- α’αα·αα·αα B ααα½αααΆααααα ααΎααααΆαααΌα ααααΆααα A ααΆαα αΆαααααα½α α αΎαα ααΆααααααααΎαα»ααααα·ααΆα!
αα½αααΆαααΆααΆααΏαααααααΆααΆαααααα»αααααα αααα»αααΆαααααααα·ααα ααΌα ααΆααΆααααΆααα α’αα·αα·ααααΆα αααΎαα’αΆα ααΆαααααααα»αααααααα½αα αααα»αααααΈαααααα αααααααααΆαααα’ααααΎααΆαα ααααα’αΆα ααααΌαααΆαα’αα»ααααα ααΎαα·αααΌα ααααααααΎαααααΆααααααααααΆααααααΆααα·αααααΆαα αααα»αα’ααααααααα
ααΆαα’αα»ααααααααΉαααααΌαααΆαα½αα§ααΆα ααααααα½α
αα»αααΉαααααΆααΆαααααααααΎα ααα»α ααααααΆαααααΆαααααααα ααΆααααααααααααα»αααα½ααααααΆααα·αααααΆααΆαααΎ α αΌαααΎααααααΈαααααααααααΆαααααΈααααΆαααααααα²ααααΆαααααΉαααααΌα αααααααΆαααααααααΆαααααα·αααΆααΆααα»ααααΆααα αααα»ααααααα·ααΈαααααααααααααααΆααααααΆααα’αΆα ααα½αααααΆαααΈααααα½ααα ααααα½α α αΎααααααΆαααααΆααααααααΆαααα ααΎ single instance αααααΎααΆααΌαααααΆααααααααΌαααΆαααααΎαα αααα»ααααα½ααααααααΆαα ααα αΆααααααΆααα·αααααΆαα ααΈαααα
ααΎααααΈααα½αααΆααα ααΌαααααΎααΌα αααα
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 α αΎααααααΆαααααααααΎαααααααΈα pseudo-random ααΈααΆα αααααααααΆαααΆααααααΆααααααΆαααααααααΉαααΆααα½ααααα αΌαααααΆαααααααααΆααΌααΈααααα»ααα»αααΆααααα αΆαααΈααααΌαα·ααΆααΈ ααΌαααΉαααααααααΆααα’αα·αα·ααα ααΆαα·αααΆααα»ααααα·ααΆααα ααα»ααααααΆαααα ααααΆα’αΆαααααααΎαα·α αα ααΆααα αααα»αααα·ααααΆαα αααΎαα
αααααααΆαααααΎαααααΎααΆαααααΆααααα’αΆαα»ααΆαααααααααααΌαααΆαααα α ααΆ "α’αΆαα»ααΆαααα" α ααααααααααΊααΆααα ααα½ααααααααΆαα»ααααααΆαα αΆααααααααΌαααΆαα ααααααΆααααααααααααααααα· αα·αα ααα½ααααααααΆαααα’αα·αα·ααααααΌααααα ααααααα·ααααα·ααΆα αα»ααααα’αα·αα·ααααααααααα’αΆα α αΆααααααααΆαααα ααααα·αααααΆαααΎααΆαααΆααΆααΆαααα·ααααα αα·ααα ααα ααΆαααΆααΆαααααααΌαααΆααααααααααΉαααααααααααΆααααΆαααα½αααα»ααααα αααα αΆααααααΎαααΈααααααααααααΌαααΆααα·αα
ααΌα ααααβααΎαβααΆαβαα·ααΆααααΆβα’αααΈβαα·ααΈβααβααα’βαα½αβαααα»αβααΆαβααα½αβααΆαβαα·αβαααβαααβαααα αααααααα (ααααα·αααΎααΎααααα»ααα·ααΆαα’αααΈααααααααααααα·αα ααα αΆααααααΆαα§ααΆα ααααααα½α αα·ααααααααΆα) ααΊααΆααα»ααααα·ααΆαα α αΌααααααΈααααα·αααααα ααααααααα ααα αΆα αααααΎααα·αααΆαααΆαααΆααΆααααααααα
αααα½ααααααααΆα Redlock
αααααααααΆαα ααα αΆααααααα½ααααααααΆααααααααΆααΎαααΆα N Redis masters α ααααΆααααΆαααααααΊα―αααΆαααααΆαααααα»αααΈααααΆαα αα·ααα αα ααΌα ααααααΎααα·αααααΎααΆαα αααα α¬αααααααααααααααα½ααααααααααααΆαα½αααααααααααα ααΎαβααΆαβαα·ααΆαβαα½α βα αΎαβα’αααΈβααααβααα½αβααΆα αα·αβαααβαααβαααβαα»ααααα·ααΆαβααΎβα§ααΆα αααβαααα½αα ααΎααααααααααΆ algorithm αααααααΎααΆαααΆαα½α instance αααα½α ααΉαααααΎαα·ααΈααααααΆααα·αααααΆααα αα αααα»αα§ααΆα αααααααααΎαααΎαααααα N ααα 5 αααααΆαααααααα ααα»ααα ααΌα αααα ααΎαααΉαααααΌαααΆαααααΎαα Redis α ααα½α 5 αα ααΎαα»αααααΌααααααααααααΆ α¬αααΆαααΈααα·αααα·α ααΎααααΈααΆααΆααΆαα½αααΆααααΎαααααααΆαααΆαα αααΎααααα―αααΆαααααΈααααΆαα αα·ααα ααα
ααΎααααΈααα½αααΆααα α’αα·αα·ααα’αα»ααααααααα·ααααα·ααΆαααΌα ααΆααααααα
- ααα½αααΆααααααααΆαα αα α»αααααααα·αααΆαα·ααααΈαα·ααΆααΈα
- ααααΆααΆαααΆαααααααααΆααααΎααααΈααα½αααΆαααΆαα αΆααααααΎααααΈ N ααΆααα’αα αααααααΎααααααααααΉαααΌα ααααΆ αα·ααααααα ααααααααα»ααααααααααΈααΆααα’ααα αα αααα»αααααΆααααΆαααΈ 2 αα ααααααα’αα·αα·αααααααααααΎααΌαααααΆαααΈαα½αα α’αα·αα·ααααααΎααΆααααααΆαααααΎααααΈααα½αααΆαααΆαααααααΈαααααααααΆααααΎαααααααααα ααΉααααααααΆαααααΆααααΈααΆαα αΆααααααααααααααααααααα·α α§ααΆα ααα ααααα·αααΎααααααααααΆααααααααΆααααΊ 10 αα·ααΆααΈ αααααΆααααααΆααααα’αΆα αααα·ααα αααα»αα ααααα ~ 5-50 αα·ααααΈαα·ααΆααΈα ααΆαα»αααααΆααααααΆαααΆαααααααΆαααΈααααααα’αΆα αα ααααααΌαααΆαααΆααΆααα’ααααααααααΆααΌαααΎααααΈααααΆααΆαααΆααααααααΆαα Redis ααααααΆαααα ααααα·αααΎ instance αα·αα’αΆα ααααΎααΆα αααααΎαααααΆααΆαααααΆαααα instance ααααααααα±ααααΆαααΆααααΆααααα’αΆα ααααΎαα ααΆαα
- ααΎααααΈαααα α’αα·αα·ααααααΆααΆααΎαααααααΆααΆαααααααα»ααα ααα»ααααΆαα ααΎααααΈααααΎααΌα αααα ααΆααααΈααααααααααααΆααΆααααααααααααααααΆαααααΆαααα½ααααα»αααα αΆαααΈ 1α ααααα·αααΎ αα·ααα»αααααΆααα’αα·αα·ααα’αΆα ααα½αααΆαααααα ααΎααααΈααΆαα αααΎα (αααΆαα αα ααΆαα 3) αα·ααααααααΆααα»ααααααΆααΆαα αααΆαα ααα½αααΆααα αα·α ααΆαααααααα αΆαααα ααααααΌαααΆαα αΆαααα»αααΆααΆαααα½αα
- ααααα·αααΎααααααΌαααΆαααα½α αααααααααααααΆαα αΆααααααααΌαααΆαααααΆααααααα αΆααααααΎαααααΈαααααααΆαααααΆαααααααα»ααα αααααΆαααααΆαααα»αααα αΆαααΈ 3α
- ααααα·αααΎα’αα·αα·αααααΆααααααα»αααΆαααα½αααΆααααααα ααα»αααα½αα ααα½α (ααΆααααΆαα·αα’αΆα α αΆααααααααα» N/2+1 α¬ααααααα αΆααααααΊα’αα·αααααΆα) αααααΆααΉαααααΆααΆαααααααααααααααΈααΆααα’αα (ααΌααααΈααα’αααααααα·αααΆααΆαα·αα’αΆα αααααααΆααααΆααααααα )
ααΎβαααα½αβαααααααΆαβα’ααααΆαβαα?
αααα½ααααααααΆααααααΊααα’ααααΎααΆαααααααααΆ αααααΈααΆαα·αααΆαααΆα‘α·ααΆααααΎααααΆααααααααααααΎαααΆαααΆααα’ααααΉαααααΎαααΆαααααα αααααααΆαααα»ααααα»ααα αααα»αααααΎαααΆαααΈαα½αααα ααααααΎαααΆααααα»αααααΏααααα αΆαααααα ααααααΆ α αΎαααα α»αααΊααΌα ααΎαααααααααα ααΉααααααααΆααα»ααααααΆααααΈααΆαα αΆααααα α ααααααΆααααααααααααααααα·α ααΆααααααααααααΊααααααααααΆαα ααΉαααααΆαααΆαααααααΆαααααΆαααα»αααααΌαααααααααΆα αα»αααααΌαααααΈαα½ααααΆαααΆα‘α·ααΆαααα»ααααα»α α αΎαααΆααααααΆααΎαα’αΆα ααΉαααα’ααααΎααΆααα·ααααααΆααΆααα»αααααΆαααααααααΆαααΆααα»αααααΌααααααααααααΆααΊααΌα α
αα α ααα»α ααα ααΎαααααΌααααααΎαα αααΆααααααΆαααα·ααααα αα·ααα ααααααααΎαααααααα»αααααααααααΆααα»αα ααΆααααα αα·ααα ααααααΌαααΆαααΆααΆαα»αααααΆααα’αα·αα·ααααΆαααααα αααααα»αα’αα‘α»αααααααααααΆααα»ααααΆα (ααααααααααα½αααΆααααα»αααα αΆαααΈ 3) αααααααααΆααααααα (ααα»αααΈαααΈ αα·ααααΈαα·ααΆααΈααΎααααΈααΌααΆαααααααααΆααααΆααα»αααααΆαααααααααΆαααΆαααααΎαααΆα)α
α’ααααααα½αα±ααα
αΆααα’αΆααααααααΆααααααααααΆααααααααα’αααΈαααααααααααααααααααΆαααΆαααΆααααααααααα½αααα
ααααααααα
ααααΆααΆααααααααααΎααΆααααΆααα
αα ααααααα’αα·αα·αααααΆααααααα»αααΆαααα½αααΆααα ααΆααααΌαααααααΆααΆαααααααααααααΆααααΈααΆααααααΆααααα αααααα αααααααΌαααΆαααααΎααΎααααΈ de-synchronize α’αα·αα·ααααΆα αααΎααααααααΆααΆαααα½αααΆααααα ααΎααααΆαααΌα ααααΆαααα»αααααααα½α (αααα’αΆα ααΆαα±ααααΆαααααΆαααΆα "ααααααα½αααααΆα" ααααα·αααΆαα’ααααααα)α ααΎαααΈααα ααΆααααααΏαα’αα·αα·ααααααΆααΆαααΎααααΈααα½αααΆαααΆαα αΆαααααααΎααααΈ Redis ααΆαα αααΎα ααααααα’α½α ααΆααααααΌα α ααα’αα αααααααΆαααΆααα½αααααΆαα’αΆα ααΎαα‘αΎα (αα·ααα·α ααΆααααααΌαααΆααααααΆααααΆαααααΆααΆαααααααα) α ααΌα ααααααΆαα§ααααααα· α’αα·αα·αααα½αααααααΆααΆαααααΎααΆααααααααΆ SET αα N instances αααα»ααααααααΆαααααΆαααααααΎ multiplexing α
ααΆααΆαααααααααα»αααΆαααααααααααααα ααΈαααααΆααΎααΆααΆαααΆααααααΆαααααΆαααΆαααααΆααα’αα·αα·ααααααααΆααααααα»αααΆαααα½αααΆαααααΆαα αααΎαααΎααααΈαααα αααααααααα½αααΆα (αααααααα) ααΌα αααααα½ααααα·αα αΆαααΆα ααααα αΆααααα»αααααααα»αααααααααααΆαα’αΆα ααα½αααΆααααααααα (αααααΈααΆααΆααααααααααααααΆαααΎαα‘αΎα α αΎαα’αα·αα·ααααΆαααααααααΆααααααααΆαα½α 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 ααααααα αΆαααΆαα
αΆαααααα·αααααΉαααααΌαα
ααΎβα’αααβα’αΆα βαααααβααααα»ααΆαβααΆβααααΌαβααΆαβααβαα»ααααα·ααΆα αααα αΆαβααΈβαααα½αβαααααααΆαβααααααβααααΆβαααβααΆαβααααΆαα α¬βααβααΎαβααα α»αβαα βαααα»αβα ααα»α βααΆαβααΎβααΆαβαα?
ααΆααα·α αΆαααΆα’αααΈααΆαααΆααααα½α
ααΆαα’αΆα ααααΆαααααααααααα’αΆαααααααΎααααααααααΆααααΈα
- ααααααααααααααααααααα· (αα ααααααα»αααααα)α ααααΆααα α»α ααΉαα’αΆα ααααΎααΆαααααααα ααΎααααΈααααΎαααααΆααααα
- ααΆααα·ααααααΆα’αα·αα·ααααΆααααααΆαα½αααααΆαα αα·ααα αααααααΆαααααααα αααααααααααα ααααΆααα·αααααΌαααΆαααα½αα¬ααααΌαααΆαααα½αα αΎαααΆαααΆαααΆααααα ααα ααΌα ααααααΆααααααΆααΆααΎαααΉααα·αα αΆαααΆα ααααα αΆααααα»ααααααααΎααααΈααα½αααΆαααααααααααααααα
- ααΆααα·ααααααΆαα ααααααα’αα·αα·ααααααΌαααααΆααΆααααααααααΎααααΈααα½αααΆααα ααΆαααα αΆαααααααααααααααααΌαααΆααααααααααααααΌαααΆαααΎααααΈααα½αααΆαααααΆαα αααΎαα αααααΆαααααααααααααΆαααααααΆαααΆααα½αααααΆαααααααααααΎαα‘αΎααα αααααααα½αααααααααΎααααΈααααΆαα
ααααααΆαααΆααααα ααΆαααΆααα·ααααααα’αΆα ααααΆαααααΎααΉα TTL ααααααααααααΆα ααΌα ααααααααα·αααΎααΆααααααααΆααααααΆ ααΆααα·αααα’αΆα ααΉαααααΆααααααα ααΆααΎαα‘αΎααα αααααΆαααα’αα·αα·ααααα½αααΆααα α αΎααααααΆααααα αααααα ααααααααααααα αα»αααααααααΆα’αΆα αααα ααααΆααΆαα
ααΆαααααΆααα αααααΆααααααα±ααααααααααααΆαααΆααααααΆααααΆαααααα αααααααααα½αα’αΆα αα αααα·αα’αΆα ααααΎααΆααααααΆααααααααααααΆααααααα
ααΆαα’αα»αααα ααΆααααΆααα αα·α fsync
ααα»αααααΆα αααΎαααααΎ Redis ααΈααααααα½αααααααΌαααΆαααααΎαααΆααααΆαααΈαααα αΆαααααααααααΎαααΆααααααααΆααααααΉαααΆαααΊααααΆααααααααΌαααΆαααΎααααΈααα½αααΆα αα·αα ααααααΆαααΆαα αΆαααα αα·αα ααα½αααααα·ααααα·ααΆααα·α/α ααααααΆααααα’αΆα αααα αααααα»ααα½ααα·ααΆααΈα ααΎααααΈααααααααααΌαααΆαααα ααΆααα»αααααΆααααααααα»αααΆαααααΆααααααααΆαα½ααααΆαααΈααα N Redis ααΎααααΈααΆαααααααααΆαααΊααααΆαα αααααΊααΆαα»αααααΆααααααα α»αα»α (α¬ "ααΆααα»ααα»ααααααΈααα" αααααααααααΌαααΆαααΆαααααα»ααααααα·ααααααααΆαα ααααΎααΆααααααααΆααΆααα’αα αα·αα’αΆαααΆααααααααΆαα αααααααα ααααααααααΆαααααααΆααααΎααααΎααα αααααΆααααΆαααΈαααααα αα·αααααα»ααΈαα½ααααΊααααααααααΆ) .
αααααΆαααΆαααΆααααα ααΎαααααααΌααααααα·α αΆαααΆααααα αααααΆααααααΉαααΆααααα»ααα·ααααααααααααααα ααααα·αααΎααΎααα·ααααααααΎαααααΌααΆαα½αααΉαααΆαααααΆαα‘αΎααα·ααααα’αΆα αα»αα α·αααααΆαααΈααΆααααΆαααα
ααΆααΌαααααΆα ααΎααααΈαααααΆααα’αααΈαααα αΆααα α§αααΆααΆααΎαααααααα ααΆαααααααα Redis ααααα·αααΆαααΆααααα»ααα·αααααααααααααααααΆαααααααα α’αα·αα·αααααααααααααΎααααΈαααααααΆαα 3 αααα»αα αααα 5 ααααΈα ααααΈαα½ααααα»αα ααααααααΈαααα’αα·αα·αααααααααααααΎααααΈαααααααΆααααααΌαααΆαα αΆααααααΎαα‘αΎααα·α α αΎααα ααααααααΆα 3 ααααΈααααααααααααΆααααααΆαααΌα ααααΆ αααααΎαα’αΆα αααααααΆααααΆα α αΎαα’αα·αα·ααααααααααα’αΆα αααααααΆααα§ααΆα ααααααααΆαα αΆααααααΎαα‘αΎααα·ααααααααΆαααΎαααααααααααααα·αα»ααααα·ααΆαααα αααααααΆααΆαααααΆα ααα»αααααα
ααααα·αααΎα’αααααΎααα·ααααααααΆααα»α (AOF) ααααΆαααΆαααΉααααααΎαα‘αΎαααααα·α
α α§ααΆα ααα α’αααα’αΆα
ααααααααααΆααααΆαααΈααααααααααΎααΆααααααααΆ SHUTDOWN α αΎαα
αΆααααααΎαααΆα‘αΎααα·αα α
αΆααααΆααααΈααααα·ααααα·ααΆααα»αααααααα
αααα»α Redis ααααΌαααΆαα’αα»ααααααΆααααααα ααΆαααααααααααααααΆααααα αΌα ααΎαααααΈααΆαααΆαααΈαααααααΌαααΆααα·αααααα αααααΌαααΆαααΆααα’ααααααααΎαααΊααα’α αααααΆααΏαααααααΆαα αααΆαααΆααΆααα·αααΆαααα
αΆαααααΌαααΆαααΆααΆα α’αααΈαααααααΌαααααΎαααα»αααααΈααΆα
αααααΎα? ααααα·αααΎ Redis ααααΌαααΆαααααααα
ααΆααααααααααΆαααααΆαααΎα ααΆαα½αααΉαααΆαααααΎααααΆααααα fsync αα
ααΎααΆαααΆαααα·ααΆααΈ αααααΆα’αΆα
αα
αα½α
αααααΆαααααΆααααΈααΆαα
αΆααααααΎαα‘αΎααα·αααΎαααΉααα·αααΆαααααααααΎαααα ααΆαααααΉααααΈ ααααα·αααΎααΎαα
ααααΆααΆαα»ααααα·ααΆαα
αΆααααααα‘α»ααααα
αΆααααααΎαα‘αΎααα·α αααααΎααα½αααααΎαααααΎαααΆα fsync=always
αα
αααα»αααΆαααααααααααΆααααΆααααα»ααα·αααααααααααααααα ααΆααΉααααααΆααααααΎαααΆαααΆαααααα»α αααααααα·ααααααααααα CP αααααααΌαααΆαααααΎααΆαααααααΈ ααΎααααΈα’αα»αααααααα
ααα
αΆαααααα»ααααα·ααΆαα
ααα»ααααααααΆαααΆαααΊαααααΎαααΆαααΆα αΆααααΌα ααΆαα glance ααααΌαα ααΆαααααΆααα αα»ααααα·ααΆααααααα½ααααααααΆαααααΌαααΆααααααΆ ααΈααααααα ααααααααααα»ααααΌαααΆαα αΆααααααΎαα‘αΎααα·ααααααΆααααΈααΆααααΆααα ααΆαα·αα αΌααα½ααααα»αααΆαα αΆααααααΆαα½αααααα αα α»ααααααααααααααααα
ααΎααααΈααΆααΆααΆαααΌααααα αΆααα ααΎαααααΆααααααααΌαααΆααΆααΆαααααΆααααΈααΆααααΆααα ααααα»αα αααα·αα’αΆα ααααΎααΆααααα»ααααααααα½αααΎαααΈ TTL α’αα·ααααΆαααααΎαααααΎααααα·α α αα·ααΈαααααΎαααΉααααα αΆααα αΌααααααΆαααα·α αααααα»αααααα αα·αααΆαα ααααααΆααααααααααααααααα·ααΌαααααΆααα’αααααααααααα ααααααΆαααα
αααααααΎααΆααααααΆαααα αΆααααααΎαα‘αΎααα·α ααΆααΆαααααΆααααααα’αΆα ααααΎαα ααΆαααΎααααΈαααααα ααΆαααΌααα»ααααα·ααΆα ααΎαααααΈααΆα’ααααααΆαααααΆααααααααααααααααΆαα½ααα αααα»α Redis αααααα αααααΆαααΆαααΆααααα ααΌαα αααΆαααΆ αααα’αΆα αααααΆαα±ααααΆαααΆαααΆααα·αααα ααααααΆαααααΆαααΎαααααααΆαααΆααααα½αα α§ααΆα ααα ααααα·αααΎααααΈααΆαα αααΎααααΆααα ααααααααααΉαααααΆααα ααΆαα·αα’αΆα ααααΎααΆαααΆααααααααΆαα TTL (α αΎαααααΆαααααΆαααΆαα½αα’αΆα ααααΌαααΆαααΆααΆαααααα»αα’αα‘α»ααααααα)α
ααΎααααααΎαααΆαα’αΆα ααααΆααααααα½ααααααααΆα: ααΎααααααΈαααΆααααααααΆαα
ααααα·αααΎααΆαααΆααααααΆαα’αα»αααααααα’αα·αα·ααααΆαααα αΆαααΌα α ααΆα’αΆα ααΆαααααααααααααα αΆααααααααΆαααΎα αα·αα’αα»ααααααααααΆααααααΆαααααααΈαααα ααΆαααααΆααα ααααα·αααΎαααΆαααΈαααααααααα»ααααααααα»αααΆαααααΆ α αΎαααααααα»ααααααααααΆαα αΆααααααΆαααααα·αααΆα αααα’αααα’αΆα ααααΎααααααΈα Lua αα ααΆαααααααααααΈααααααααΈα TTL αααα ααααα·αααΎαααα ααααΆα α αΎααααααααααααΆαα ααααΆαααααα ααααααααααα½αααΆααα ααα ααααααΌαααΆαααα½αα
α’αα·αα·αααα½ααααα·α αΆαααΆαααααααααααΌαααα½αααΆαα‘αΎααα·α ααααα·αααΎααΆααΆααααααααααααΎααααΈα αΆααααααααΈααΆαα αααΎααααα»ααααααααα»ααααΆαα
αα·αααα αααα½ααααααααΆααα
αα
ααααααα·αααααΆααααααΌααα ααΌα
ααααα
ααα½αα’αα·ααααΆααααΆαααααΆααΆαααααα αΎααααααααααΎααααΈααα½αααΆαααααααΌαααααΆαααααα·α ααΎαα·αααΌα
αααααα αααααααααααααα·ααΆαααΆααααα½αααΉαααααΌαααΆααααααααααΆαα
ααααα: www.habr.com