ä»æ¥ã¯ãRedisã䜿çšããåæ£ããã¯ã®å®è£ ã«é¢ããè€éãªèšäºã®ç¿»èš³ã«æ³šç®ãããããã¯ãšããŠRedisã®èŠç¹ã«ã€ããŠè©±ãããšãææ¡ããŸãã ãé«è² è·ã¢ããªã±ãŒã·ã§ã³ããšããæ¬ã®èè ã§ããMartinKleppmanãæ€èšããRedlockã¢ã«ãŽãªãºã ã®åæãããã«ç€ºããŸãã
åæ£ããã¯ã¯ãããŸããŸãªããã»ã¹ãçžäºã«æä»çãªæ¹æ³ã§å ±æãªãœãŒã¹ãåŠçããå¿ èŠãããå€ãã®ç°å¢ã§äœ¿çšãããéåžžã«äŸ¿å©ãªããªããã£ãã§ãã
Redisã§DLMïŒDistributed Locking ManagerïŒãå®è£ ããæ¹æ³ã説æããã©ã€ãã©ãªãæçš¿ã¯ãããããããŸãããåã©ã€ãã©ãªã¯ç°ãªãã¢ãããŒããæ¡çšããŠãããæäŸãããä¿èšŒã¯ãããå°ãè€éãªèšèšã§éæã§ãããã®ã«æ¯ã¹ãŠããªã匱ãã§ãã
ãã®èšäºã§ã¯ã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). .
ã»ãã¥ãªãã£ãšå¯çšæ§ã®ä¿èšŒ
åæ£ããã¯ãå¹æçã«äœ¿çšããããã«å¿ èŠãªæå°éã®ä¿èšŒãæäŸãããšæããã3ã€ã®ããããã£ã®ã¿ã䜿çšããŠèšèšãã¢ãã«åããŸãã
- ã»ãã¥ãªãã£ããããã£ïŒçžäºé€å€ãäžåºŠã«1ã€ã®ã¯ã©ã€ã¢ã³ãã®ã¿ãããã¯ãä¿æã§ããŸãã
- ã¢ã¯ã»ã·ããªãã£ããããã£AïŒãããããã¯ã¯ãããŸãããæçµçã«ããªãœãŒã¹ãããã¯ããã¯ã©ã€ã¢ã³ãã«é害ãçºçããããå¥ã®ãã£ã¹ã¯ã»ã°ã¡ã³ãã«ç§»åãããããå Žåã§ããåžžã«ããã¯ãååŸã§ããŸãã
- ã¢ã¯ã»ã·ããªãã£ããããã£BïŒãã©ãŒã«ããã¬ã©ã³ã¹ãã»ãšãã©ã®RedisããŒããå®è¡ãããŠããéãã¯ã©ã€ã¢ã³ãã¯ããã¯ãååŸããŠè§£æŸã§ããŸãã
ãã®å Žåããã§ã€ã«ãªãŒããŒããŒã¹ã®å®è£ ã§ã¯äžååãªçç±
äœãæ¹åããããç解ããããã«ãRedisã«åºã¥ãã»ãšãã©ã®åæ£ããã¯ã©ã€ãã©ãªã®çŸç¶ãåæããŠã¿ãŸãããã
Redisã䜿çšããŠãªãœãŒã¹ãããã¯ããæãç°¡åãªæ¹æ³ã¯ãã€ã³ã¹ã¿ã³ã¹ã«ããŒãäœæããããšã§ããéåžžãããŒã¯éãããæå¹æéã§äœæãããŸããããã¯ãRedisã§æäŸãããæå¹æéæ©èœã䜿çšããŠå®çŸããããããé ããæ©ãããã®ããŒããªãªãŒã¹ãããŸãïŒãªã¹ãã®ããããã£2ïŒãã¯ã©ã€ã¢ã³ãããªãœãŒã¹ã解æŸããå¿ èŠãããå Žåãã¯ã©ã€ã¢ã³ãã¯ããŒãåé€ããŸãã
äžèŠããã®ãœãªã¥ãŒã·ã§ã³ã¯ããŸãæ©èœããŸãããåé¡ããããŸããã¢ãŒããã¯ãã£ã«åäžã®é害ç¹ããããŸãããã¹ã¿ãŒRedisã€ã³ã¹ã¿ã³ã¹ã«é害ãçºçããå Žåã¯ã©ããªããŸããïŒããã§ã¯ãã©ãã¯ãŒãè¿œå ããŸãããïŒãŸãããã¹ããå©çšã§ããªãå Žåã«äœ¿çšããŸããæ®å¿µãªããããã®ãªãã·ã§ã³ã¯å®è¡å¯èœã§ã¯ãããŸããããããè¡ããšãRedisã®ã¬ããªã±ãŒã·ã§ã³ã¯éåæã§ãããããã»ãã¥ãªãã£ã«å¿ èŠãªçžäºé€å€ããããã£ãæ£ããå®è£ ã§ããªããªããŸãã
æããã«ããã®ãããªã¢ãã«ã§ã¯ã¬ãŒã¹æ¡ä»¶ãçºçããŸãã
- ã¯ã©ã€ã¢ã³ãAã¯ãã¹ã¿ãŒã®ããã¯ãååŸããŸãã
- ããŒãžã®æžã蟌ã¿ãã¹ã¬ãŒãã«è»¢éãããåã«ããã¹ã¿ãŒã¯å€±æããŸãã
- ãã©ãã¯ãŒã¯ãªãŒããŒã«ææ ŒããŸãã
- ã¯ã©ã€ã¢ã³ãBã¯ãAã«ãã£ãŠãã§ã«ããã¯ãããŠããã®ãšåããªãœãŒã¹ã®ããã¯ãååŸããŸããã»ãã¥ãªãã£éåïŒ
é害ãªã©ã®ç¹å¥ãªç¶æ³ã§ã¯ãè€æ°ã®ã¯ã©ã€ã¢ã³ããåæã«ããã¯ãä¿æã§ããããšãå®å šã«æ£åžžãªå ŽåããããŸãããã®ãããªå Žåãã¬ããªã±ãŒã·ã§ã³ããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ãé©çšã§ããŸãããã以å€ã®å Žåã¯ããã®èšäºã§èª¬æãããŠãããœãªã¥ãŒã·ã§ã³ããå§ãããŸãã
æ£ããã·ã³ã°ã«ã€ã³ã¹ã¿ã³ã¹ã®å®è£
äžèšã®ã·ã³ã°ã«ã€ã³ã¹ã¿ã³ã¹æ§æã®æ¬ ç¹ãå æããåã«ããã®åçŽãªã±ãŒã¹ãåŠçããæ¹æ³ãç解ããŸããããããã¯ãã¬ãŒã¹æ¡ä»¶ãææ蚱容ãããã¢ããªã±ãŒã·ã§ã³ã§å®éã«èš±å®¹ãããããã§ãããŸããåäžã®ã€ã³ã¹ã¿ã³ã¹ã§ã®ããã¯ã¯ãããã§èª¬æããåæ£ã¢ã«ãŽãªãºã ã®åºç€ãšããŠæ©èœããããã§ãã
ããã¯ãååŸããã«ã¯ã次ã®ããã«ããŸãã
SET resource_name my_random_value NX PX 30000
ãã®ã³ãã³ãã¯ãæå¹æéã30,000ããªç§ïŒãªãã·ã§ã³PXïŒã§ãããŒããŸã ååšããªãå ŽåïŒãªãã·ã§ã³NXïŒã«ã®ã¿ããŒãã€ã³ã¹ããŒã«ããŸããããŒã¯ã
myrandomvalue
ãã«èšå®ãããŠããŸãããã®å€ã¯ããã¹ãŠã®ã¯ã©ã€ã¢ã³ãããã³ãã¹ãŠã®ããã¯èŠæ±ã§äžæã§ããå¿
èŠããããŸãã
åºæ¬çã«ãã©ã³ãã ãªå€ã¯ããã¯ãå®å šã«è§£æŸããããã«äœ¿çšãããããŒãååšããããã«æ ŒçŽãããŠããå€ãæ£ç¢ºã«æåŸ ã©ããã§ããå Žåã«ã®ã¿ããŒãåé€ããããã«Redisã«æ瀺ããã¹ã¯ãªããããããŸããããã¯ã次ã®Luaã¹ã¯ãªããã䜿çšããŠå®è¡ãããŸãã
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
ããã¯ãå¥ã®ã¯ã©ã€ã¢ã³ããããã¯ã解æŸããã®ãé²ãããã«éèŠã§ããããšãã°ãã¯ã©ã€ã¢ã³ããããã¯ãååŸããæåã®ããã¯ãããé·ãç¶ãæäœã§ãããã¯ãïŒããŒã®æå¹æéãåãããŸã§ïŒãåŸã§ä»ã®ã¯ã©ã€ã¢ã³ããèšå®ããããã¯ãåé€ããå ŽåããããŸãã
ã¯ã©ã€ã¢ã³ããå¥ã®ã¯ã©ã€ã¢ã³ãã«ãã£ãŠä¿æãããŠããããã¯ãåé€ããå¯èœæ§ããããããåçŽãªDELã䜿çšããããšã¯å®å šã§ã¯ãããŸãããéã«ãäžèšã®ã¹ã¯ãªããã䜿çšããå Žåãåããã¯ã¯ã©ã³ãã ãªæååã§ã眲åããããããã以åã«ããã¯ãé 眮ããã¯ã©ã€ã¢ã³ãã®ã¿ãããã¯ãåé€ã§ããŸãã
ãã®ã©ã³ãã ãªæååã¯ã©ãããã¹ãã§ããïŒ / dev / urandomãã20ãã€ãã«ãªãã¯ãã§ãããéæããããšããŠããç®çã«ååãªã ãæååãäžæã«ããããã®ããå®äŸ¡ãªæ¹æ³ãèŠã€ããããšãã§ããŸããããšãã°ãRC4ã«/ dev / urandomãã·ãŒãããŠãããã«åºã¥ããŠç䌌ã©ã³ãã ã¹ããªãŒã ãçæããŠãåé¡ãããŸãããããç°¡åãªè§£æ±ºçã¯ããã€ã¯ãç§ã®unixæéãšã¯ã©ã€ã¢ã³ãIDãçµã¿åãããããšã§ããããã¯ããã»ã©å®å šã§ã¯ãããŸããããããããã»ãšãã©ã®ç¶æ³ã§ã®èª²é¡ã®ã¬ãã«ã«ãããŸãã
ããŒã®æå¹æéã®å°ºåºŠãšããŠäœ¿çšããæéã¯ããããã¯ã®æå¹æéããšåŒã°ããŸãããã®å€ã¯ãããã¯ãèªåçã«è§£æŸããããŸã§ã®æéãšãå¥ã®ã¯ã©ã€ã¢ã³ããçžäºæé€ã®ä¿èšŒã«å®éã«éåããããšãªããªãœãŒã¹ãããã¯ã§ããããã«ãªããŸã§ã«ã¯ã©ã€ã¢ã³ããæäœãå®äºããå¿ èŠãããæéã®äž¡æ¹ã§ãããã®ãããªä¿èšŒã¯ãããã¯ãååŸããç¬éããå§ãŸãç¹å®ã®æéæ ã«ã®ã¿å¶éãããŸãã
ããã§ãããã¯ãååŸããŠè§£æŸããããã®è¯ãæ¹æ³ã«ã€ããŠèª¬æããŸãããã·ã¹ãã ïŒåäžã®åžžã«å©çšå¯èœãªã€ã³ã¹ã¿ã³ã¹ã§æ§æãããæªå²ãåœãŠã®ã·ã¹ãã ã«ã€ããŠè©±ããŠããå ŽåïŒã¯å®å šã§ãããã®æŠå¿µãããã®ãããªä¿èšŒããªãåæ£ã·ã¹ãã ã«æ¡åŒµããŠã¿ãŸãããã
ã¬ããããã¯ã¢ã«ãŽãªãºã
ã¢ã«ãŽãªãºã ã®åæ£ããŒãžã§ã³ã¯ãNåã®å è¡RedisãããããšãåæãšããŠããŸãããããã®ããŒãã¯äºãã«å®å šã«ç¬ç«ããŠãããããã¬ããªã±ãŒã·ã§ã³ããã®ä»ã®æé»çãªèª¿æŽã·ã¹ãã ã¯äœ¿çšããŸãããåäžã®ã€ã³ã¹ã¿ã³ã¹ã§ããã¯ãå®å šã«ååŸããã³è§£æŸããæ¹æ³ã«ã€ããŠã¯ããã§ã«èª¬æããŸãããã¢ã«ãŽãªãºã ãåäžã®ã€ã³ã¹ã¿ã³ã¹ãæäœãããšãã«ãã®ã¡ãœããã䜿çšããããšã¯åœç¶ã®ããšã§ãããã®äŸã§ã¯ãNã5ã«èšå®ããŸãããããã¯ãå®å šã«åŠ¥åœãªå€ã§ãããããã£ãŠãç°ãªãã³ã³ãã¥ãŒã¿ãŒãŸãã¯ä»®æ³ãã·ã³ã§5ã€ã®Redisãã¹ã¿ãŒã䜿çšããŠãããããäºãã«ã»ãŒç¬ç«ããŠåäœããããã«ããå¿ èŠããããŸãã
ããã¯ãååŸããããã«ãã¯ã©ã€ã¢ã³ãã¯æ¬¡ã®æäœãå®è¡ããŸãã
- çŸåšã®æå»ãããªç§åäœã§ååŸããŸãã
- N , . 2, , , , , , . , 10 , ~ 5-50 . , , Redis: , .
- , , ; , 1. , ( 3), , , , , , .
- , , 3.
- - ( N/2+1 , ), ( , , , ).
ã¢ã«ãŽãªãºã ã¯éåæã§ããïŒ
ãã®ã¢ã«ãŽãªãºã ã¯ããã¹ãŠã®ããã»ã¹ãåäœããåæã¯ããã¯ã¯ãããŸããããåããã»ã¹ã®çŸå°æéã¯ã»ãŒåãé床ã§æµããããã¯ãèªåçã«è§£æŸããããŸã§ã®åèšæéãšæ¯èŒããŠãšã©ãŒãå°ãããšããä»®å®ã«åºã¥ããŠããŸãããã®ä»®å®ã¯ãéåžžã®ã³ã³ãã¥ãŒã¿ãŒã§äžè¬çãªç¶æ³ãšéåžžã«ãã䌌ãŠããŸããåã³ã³ãã¥ãŒã¿ãŒã«ã¯ããŒã«ã«ã¯ããã¯ããããéåžžãç°ãªãã³ã³ãã¥ãŒã¿ãŒã§ã®æå·®ãå°ãããšããäºå®ãä¿¡é Œã§ããŸãã
ãã®æ®µéã§ãçžäºæé€ã®ã«ãŒã«ãæ éã«çå®ããå¿ èŠããããŸããçžäºæé€ã¯ãããã¯ãä¿æããŠããã¯ã©ã€ã¢ã³ãããããã¯ãæå¹ãªæéïŒãã®å€ã¯ã¹ããã3ã§ååŸïŒããããã«æéãåŒããæéïŒåèšããã»ã¹éã®æéå·®ãè£æ£ããããã«æ°ããªç§ïŒã
次ã®èå³æ·±ãèšäºã§ã¯ãã¿ã€ãã³ã°ã®ã£ãããå¿ èŠãšãããã®ãããªã·ã¹ãã ã«ã€ããŠè©³ãã説æããŠããŸãããªãŒã¹ïŒåæ£ãã¡ã€ã«ãã£ãã·ã¥ã®äžè²«æ§ã®ããã®å¹ççãªãã©ãŒã«ããã¬ã©ã³ãã¡ã«ããºã ã
倱ææã«åè©Šè¡
ã¯ã©ã€ã¢ã³ããããã¯ã®ååŸã«å€±æããå Žåãã©ã³ãã ãªé 延ã䜿çšããŠãå床ååŸãè©Šã¿ãå¿ èŠããããŸããããã¯ãåããªãœãŒã¹ã®ããã¯ãåæã«ååŸããããšããè€æ°ã®ã¯ã©ã€ã¢ã³ããéåæåããããã«è¡ãããŸãïŒããã«ãããåè ãããªãã¹ããªãããã¬ã€ã³ã®ç¶æ³ãçºçããå¯èœæ§ããããŸãïŒãããã«ãã¯ã©ã€ã¢ã³ããã»ãšãã©ã®Redisã€ã³ã¹ã¿ã³ã¹ã§ããã¯ãååŸããããšããé床ãéãã»ã©ãã¹ããªãããã¬ã€ã³ç¶æ³ãçºçããå¯èœæ§ã®ãããŠã£ã³ããŠãçããªããŸãïŒåè©Šè¡ãå°ãªããŠæžã¿ãŸãïŒããããã£ãŠãçæ³çã«ã¯ãã¯ã©ã€ã¢ã³ãã¯å€éåã䜿çšããŠNåã®ã€ã³ã¹ã¿ã³ã¹ã«åæã«SETã³ãã³ããéä¿¡ããããšããå¿ èŠããããŸãã
ããã§åŒ·èª¿ãã䟡å€ãããã®ã¯ãã»ãšãã©ã®ããã¯ãååŸã§ããªãã£ãã¯ã©ã€ã¢ã³ãããååŸããããã¯ãïŒéšåçã«ïŒè§£æŸããŠããªãœãŒã¹ã®ããã¯ãå床ååŸã§ããããã«ãªãåã«ããŒã®æå¹æéãåŸ ã€å¿ èŠããªãããã«ããããšã§ãïŒãããã¯ãŒã¯ã®æçåãçºçããå Žåã§ãïŒã¯ã©ã€ã¢ã³ããRedisã€ã³ã¹ã¿ã³ã¹ãšã®æ¥ç¶ã倱ã£ãå ŽåãããŒã®æå¹æéãåããŠããéãã¢ã¯ã»ã¹éåã®ããã«ãã£ãæ¯æãå¿ èŠããããŸãïŒã
ããã¯ã®
解é€ããã¯ã®è§£é€ã¯ãç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ãæ£åžžã«ããã¯ã§ãããšé¡§å®¢ãèããŠãããã©ããã«é¢ä¿ãªãããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã®ããã¯ã解é€ããã ãã®ç°¡åãªæäœã§ãã
å®å šäžã®èæ ®äºé
ã¢ã«ãŽãªãºã ã¯å®å šã§ããïŒããŸããŸãªã·ããªãªã§äœãèµ·ãããæ³åããŠã¿ãŸãããã
ãŸããã¯ã©ã€ã¢ã³ããã»ãšãã©ã®ã€ã³ã¹ã¿ã³ã¹ã§ããã¯ãååŸã§ãããšä»®å®ããŸããããåã€ã³ã¹ã¿ã³ã¹ã«ã¯ãå šå¡ãåãæå¹æéãæã€ããŒãå«ãŸããŸãããã ãããããã®åããŒã¯ããããã®æç¹ã§ã€ã³ã¹ããŒã«ãããŠãããããç°ãªãæéã«æéåãã«ãªããŸãããã ããæåã®ããŒãT1ïŒæåã®ãµãŒããŒã«æ¥ç¶ããåã«éžæããæéïŒä»¥äžã®æéã«ã€ã³ã¹ããŒã«ãããæåŸã®ããŒãT2ïŒæåŸã®ãµãŒããŒããå¿çãåä¿¡ããæéïŒä»¥äžã®æéã«ã€ã³ã¹ããŒã«ãããå Žåãæéåãã«ãªãã»ããã®æåã®ããŒãå°ãªããšãç¶ãããšã確èªããŠãã ãã
MIN_VALIDITY=TTL-(T2-T1)-CLOCK_DRIFT
..ãä»ã®ãã¹ãŠã®ããŒã¯åŸã§æéåãã«ãªããããå°ãªããšãä»åã¯ãã¹ãŠã®ããŒãåæã«æå¹ã«ãªãããšã確èªã§ããŸãã
N / 2 + 1ããŒããã§ã«ååšããå ŽåãN / 2 + 1 SET NXæäœã¯æåã§ããªããããã»ãšãã©ã®ããŒãæå¹ãªãŸãŸã§ããéãå¥ã®ã¯ã©ã€ã¢ã³ãã¯ããã¯ãååŸã§ããŸããããããã£ãŠãããã¯ãååŸãããå Žåãåæã«åååŸããããšã¯ã§ããŸããïŒããã¯çžäºæé€ã®ããããã£ã«éåããŸãïŒã
ãã ããåæã«ããã¯ãååŸããããšããè€æ°ã®ã¯ã©ã€ã¢ã³ããåæã«æåããªãããã«ããå¿ èŠããããŸãã
ã¯ã©ã€ã¢ã³ããã»ãšãã©ã®ã€ã³ã¹ã¿ã³ã¹ãããã¯ãããã®æéã®æ倧ããã¯æé以äžãè²»ãããŠããå Žåãã¯ã©ã€ã¢ã³ãã¯ããã¯ãç¡å¹ã«ããã€ã³ã¹ã¿ã³ã¹ã®ãããã¯ã解é€ããŸãããããã£ãŠãã客æ§ãæå¹æéå ã«ã»ãšãã©ã®ã€ã³ã¹ã¿ã³ã¹ããããã¯ã§ããå Žåã®ã¿ãèæ ®ããå¿ èŠããããŸãããã®å Žåãäžèšã®è°è«ã«é¢ããŠã
MIN_VALIDITY
ã¯ã©ã€ã¢ã³ãã¯æéå
ã«ããã¯ãåååŸã§ããªãã¯ãã§ãããããã£ãŠãè€æ°ã®ã¯ã©ã€ã¢ã³ãã¯ã倧éšåãããã¯ããæéãTTLæéãããé·ããããã¯ãç¡å¹ã«ãªã£ãå Žåã«ã®ã¿ãåãæéïŒã¹ããŒãž2ã®çµããã§çµäºïŒã§N / 2 +1ã€ã³ã¹ã¿ã³ã¹ãããã¯ã§ããŸãã
ã»ãã¥ãªãã£ã®æ£åŒãªèšŒæ ãæäŸããããæ¢åã®åæ§ã®ã¢ã«ãŽãªãºã ãææããããäžèšã®ãã°ãèŠã€ãããã§ããŸããïŒ å¯çšæ§
ã«é¢ããèæ ®äºé
ã·ã¹ãã ã®å¯çšæ§ã¯ã次ã®3ã€ã®äž»ãªç¹æ§ã«ãã£ãŠç°ãªããŸãã
- ããã¯ã®èªå解æŸïŒããŒã®æå¹æéãåãããšãïŒïŒæçµçã«ãããŒã¯ããã¯ã«äœ¿çšã§ããããã«ãªããŸãã
- ã¯ã©ã€ã¢ã³ãã¯éåžžãç®çã®ããã¯ãååŸãããŠããªãããååŸãããŠäœæ¥ãå®äºãããšãã«ããã¯ãåé€ããããšã§äºãã«å©ãåããšããäºå®ããããã£ãŠãããã¯ãåååŸããããã«ããŒã®æå¹æéãåããã®ãåŸ ã€å¿ èŠã¯ãªãå¯èœæ§ããããŸãã
- 顧客ãããã¯ãååŸããããã«åè©Šè¡ããå¿ èŠãããå Žåãã»ãšãã©ã®ããã¯ãååŸããã®ã«ãããæéãããæ¯èŒçé·ãæéåŸ æ©ãããšããäºå®ãããã«ããããªãœãŒã¹ã奪ãåããšãã«è³ãåè£ããå¯èœæ§ãäœããªããŸãã
ãã ãããããã¯ãŒã¯ã»ã°ã¡ã³ãã®TTLæéã«çããå¯çšæ§ã®äœäžã«å¯ŸããŠããã«ãã£ãæ¯æãå¿ èŠããããããé£ç¶ããã»ã°ã¡ã³ããããå Žåããã®ããã«ãã£ã¯æªå®çŸ©ã®ãµã€ãºã«ãªãå¯èœæ§ããããŸããããã¯ãã¯ã©ã€ã¢ã³ããããã¯ãååŸããããã解æŸããåã«å¥ã®ã»ã°ã¡ã³ãã«ã¯ã©ã³ããããã³ã«çºçããŸãã
ååãšããŠãç¡éã®é£ç¶ãããããã¯ãŒã¯ã»ã°ã¡ã³ããäžãããããšãã·ã¹ãã ã¯ç¡éã®æé䜿çšã§ããªããªãå¯èœæ§ããããŸãã
ããã©ãŒãã³ã¹ããã§ã€ã«ãªãŒããŒãããã³fsync
å€ãã®äººãRedisã䜿çšããŸããããã¯ãããã¯ãµãŒããŒã®é«æ§èœãããã¯ã®ååŸãšè§£æŸã«å¿ èŠãªé 延ã®ã¬ãã«ãããã³1ç§ãããã«å®è¡ã§ãããã®ãããªååŸ/解æŸæäœã®æ°ãæäŸããå¿ èŠãããããã§ãããã®èŠä»¶ãæºããããã«ãé 延ãæžããããã®NRedisãµãŒããŒãšã®éä¿¡æŠç¥ããããŸããããã¯å€éåæŠç¥ã§ãïŒãŸãã¯ãã¯ã©ã€ã¢ã³ããšåã€ã³ã¹ã¿ã³ã¹éã®ã©ãŠã³ãããªããæéãé¡äŒŒããŠãããšä»®å®ããŠããœã±ãããéããããã³ã°ã¢ãŒãã«ãããã¹ãŠã®ã³ãã³ããéä¿¡ããåŸã§ã³ãã³ããèªã¿åã貧ä¹äººã®å€éåïŒã
確ãã«ãé害åŸã®ä¿¡é Œæ§ã®é«ããªã«ããªãåããã¢ãã«ãäœæãããã©ãããæ€èšããããã®é·æçãªããŒã¿ã¹ãã¬ãŒãžã®èæ ®äºé ããããŸãã
åºæ¬çã«ãåé¡ãæ確ã«ããããã«ãé·æçãªããŒã¿ã¹ãã¬ãŒãžããŸã£ãã䜿çšããã«Redisãæ§æããŠãããšä»®å®ããŸããã¯ã©ã€ã¢ã³ãã¯ã5ã€ã®ã€ã³ã¹ã¿ã³ã¹ã®ãã¡3ã€ããããã¯ããããšã«æåããŸãããã¯ã©ã€ã¢ã³ãããããã¯ã§ããã€ã³ã¹ã¿ã³ã¹ã®1ã€ãåèµ·åããããã®æç¹ã§åããªãœãŒã¹ã«å¯ŸããŠ3ã€ã®ã€ã³ã¹ã¿ã³ã¹ãåã³è¡šç€ºãããŸããããããããã¯ã§ããŸãã次ã«ãä»ã®ã¯ã©ã€ã¢ã³ããåèµ·åãããã€ã³ã¹ã¿ã³ã¹ããããã¯ããŠãã»ãã¥ãªãã£ããããã£ã«éåããŸããããã¯ã®ç¬å æš©ã
ããŒã¿ã¢ããã³ã¹ïŒAOFïŒãæå¹ã«ãããšãç¶æ³ã¯ãããã«æ¹åãããŸããããšãã°ãSHUTDOWNã³ãã³ããéä¿¡ããŠããåèµ·åããããšã§ããµãŒããŒãææ Œãããããšãã§ããŸãã Redisã®æå¹æéæäœã¯ããµãŒããŒã®é»æºããªãã«ãªã£ãŠããŠãæéãæµãç¶ããããã«æå³çã«å®è£ ãããŠããããããã¹ãŠã®èŠä»¶ã§åé¡ãããŸãããéåžžã®ã·ã£ããããŠã³ãä¿èšŒãããŠããéããéåžžã§ããåé»ãçºçããå Žåã¯ã©ãããã°ããã§ããïŒ Redisãããã©ã«ãã§æ§æãããŠãããfsyncããã£ã¹ã¯äžã§æ¯ç§åæããŠããå Žåãåèµ·ååŸã«ããŒãèŠéãå¯èœæ§ããããŸããçè«çã«ã¯ãã€ã³ã¹ã¿ã³ã¹ã®åèµ·åæã«ããã¯ã®å®å šæ§ãä¿èšŒããå Žåã¯ãæå¹ã«ããå¿ èŠããããŸã
fsync=always
é·æããŒã¿ã¹ãã¬ãŒãžã®èšå®ã§ãããã«ãããåæ£ããã¯ãå®å
šã«å®è£
ããããã«åŸæ¥äœ¿çšãããŠããCPã·ã¹ãã ã®ã¬ãã«ãŸã§ãããã©ãŒãã³ã¹ãå®å
šã«äœäžããŸãã
ããããç¶æ³ã¯ç®ã«èŠãããããè¯ãã§ããååãšããŠãã€ã³ã¹ã¿ã³ã¹ãé害åŸã«åèµ·åããããšãçŸåšã¢ã¯ãã£ããªããã¯ã«åå ããªããªããããã¢ã«ãŽãªãºã ã¯å®å šãªãŸãŸã§ãã
ããã確å®ã«ããã«ã¯ãé害ãçºçããåŸã䜿çšããŠããæ倧TTLããããã«è¶ ããŠã€ã³ã¹ã¿ã³ã¹ãäžå®æé䜿çšã§ããªãããšã確èªããå¿ èŠããããŸãããã®ãããæåŠæã«ã¢ã¯ãã£ãã ã£ããã¹ãŠã®ããŒã®æå¹æéãåããŠèªåçã«è§£æŸãããã®ãåŸ ã¡ãŸãã
é 延åèµ·åã䜿çšããããšã«ãããååãšããŠãRedisã§é·æéæ°žç¶åããããšãªãã»ãã¥ãªãã£ãå®çŸã§ããŸãããã ããããã«ããã¢ã¯ã»ã·ããªãã£ãäœäžããå¯èœæ§ãããããšã«æ³šæããŠãã ãããããšãã°ãã»ãšãã©ã®ã€ã³ã¹ã¿ã³ã¹ã«é害ãçºçããå Žåãã·ã¹ãã ã¯TTLæéã®éã°ããŒãã«ã«äœ¿çšã§ããªããªããŸãïŒãã®æç¹ã§ã¯ãªãœãŒã¹ããããã¯ã§ããŸããïŒã
ã¢ã«ãŽãªãºã ã®å¯çšæ§ã®åäžïŒããã¯ã®æ¡åŒµ
ã¯ã©ã€ã¢ã³ããè¡ãäœæ¥ãå°ããªã¹ãããã§æ§æãããŠããå Žåãããã©ã«ãã®ããã¯ã®æå¹æéãççž®ããããã¯å»¶é·ã¡ã«ããºã ãå®è£ ããããšãã§ããŸããåºæ¬çã«ãã¯ã©ã€ã¢ã³ããèšç®ã§ããžãŒã§ãããã¯ã®æå¹æéã®å€ãå±éºãªã»ã©äœãå ŽåãããŒããŸã ååšãããã®å€ããŸã ã©ã³ãã ã§ãããã¯ãååŸããããšãã«ååŸãããå ŽåãããŒã®TTLãæ¡åŒµããã¹ã¯ãªããããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã«éä¿¡ã§ããŸãã
顧客ã¯ãæå¹æéäžã«ã»ãšãã©ã®ã€ã³ã¹ã¿ã³ã¹ãæ£åžžã«ããã¯ããå Žåã«ã®ã¿ãããã¯ãåååŸãããšèŠãªãå¿ èŠããããŸãã
ãã ããæè¡çã«ã¯ãããã«ãã£ãŠã¢ã«ãŽãªãºã ãå€æŽãããããšã¯ãªããããããã¯ãååŸããããã®æ倧繰ãè¿ãè©Šè¡åæ°ãå¶éããå¿ èŠããããŸããããããªããšãã¢ã¯ã»ã·ããªãã£ããããã£ã«éåããŸãã