
Roman Grebennikovã¯ãåæ£ã·ã¹ãã ã®æ§ç¯ã®è€éãã«ã€ããŠèª¬æããŠããŸãã ããã¯ã Highload ++ 2016ã®ã¬ããŒãã§ãã
ã¿ãªãããããã«ã¡ã¯ãã°ã¬ãã³ãã³ãã»ããŒãã³ã§ãã Findifyã§åããŠããŸãã ãªã³ã©ã€ã³ã¹ãã¢ãæ€çŽ¢ããŸãã ããããäŒè©±ã¯ããã«ã€ããŠã§ã¯ãããŸããã Findifyã§ã¯ãåæ£ã·ã¹ãã ãæ±ã£ãŠããŸãã
åæ£ã·ã¹ãã ãšã¯äœã§ããïŒ

ã¹ã©ã€ãããããææãšæãã¿ãã¯ITã§ããããããšã§ãããåæ£ã·ã¹ãã ã¯ããŸãäžè¬çã§ã¯ãªãããšã¯æããã§ãã ãŸããåæ£ã·ã¹ãã ãšã¯äœãããªããã®ãããªçã¿ãããã®ãââããªããã®ã¬ããŒããå¿ èŠãªã®ããç解ããããšããŸãã
ã©ããã§åäœããäœããã®ã¢ããªã±ãŒã·ã§ã³ããããšæ³åããŠãã ããã ãµãŒããŒåŽã§ãããšä»®å®ããŸãããéåžžã®ã¢ããªã±ãŒã·ã§ã³ãšã¯ç°ãªããäœããã®å éšç¶æ ãæã£ãŠããŸãã ããšãã°ãã²ãŒã ãããå Žåãå éšç¶æ ã¯å°ããªç·ãèµ°ãäžçãªã©ã§ãã é ããæ©ãããããªãã¯æé·ããããªãã®å éšç¶æ ã¯èšåŒµããå€åãã1ã€ã®ãµãŒããŒã«åãŸãã®ããããŸãã

ãã®åçã§ã¯ãããŸã®ããŒãããç©Žã«åŒã£ããã£ãŠããŸããã
æé·ãå§ããåããµãŒããŒã«åãŸããªããªã£ãå Žåã¯ãäœããããå¿ èŠããããŸãã
ããã€ãã®ãªãã·ã§ã³ããããŸãã
ãã匷åãªãµãŒããŒã䜿çšã§ããŸããããã§ã«æéã®ãµãŒããŒã§äœæ¥ããŠããå¯èœæ§ããããããè¡ãæ¢ãŸãã®ãã¹ã«ãªãå¯èœæ§ããããŸãã
æé©åããããšã¯ã§ããŸãããæ確ã«ããããšã¯ã§ããŸããããã¹ãŠãã¯ãªãã¯ããŠå éããã®ã¯2åå°é£ã§ãã
ããªãã¯éåžžã«äžå®å®ãªéã«ç«ã€ããšãã§ããŸã-åæ£ã·ã¹ãã ãäœæããŸãã
ãã®ãã©ãã¯ã¯äžå®å®ã§æãã§ãã
ä»æ¥ã話ãããããš
ãŸããåæ£ã·ã¹ãã ã«ã€ããŠèª¬æããŸãã å°ãã®æ©åšããããéèŠã§ããçç±ãå®å šæ§ãšã¯äœãããã®å®å šæ§ãçµã¿åãããæ¹æ³ãããŒã¿ã倱ã£ãããå°ãã ã倱ããªãåæ£ã·ã¹ãã ãèšèšããããã®ã¢ãããŒããåæ£ã·ã¹ãã ã確èªããããã®ããŒã«ãã¹ãŠãããŒã¿ã§åªããŠããããã»ãšãã©ãã¹ãŠãåªããŠããŸãã
1ã€ã®çè«ã¯éå±ãªã®ã§ããã®åé¡ãšå°ãã®ç·Žç¿ã«ã€ããŠå°ãã話ããŸãã ãã®ã©ãããããã䜿çšããŠãç¬èªã®å°èŠæš¡ã§ã·ã³ãã«ãªåæ£ããŒã¿ããŒã¹ãäœæããŸãã å®éã«ã¯ããŒã¿ããŒã¹ã§ã¯ãªããããŒå€ã¹ãã¬ãŒãžã§ã¯ãªããå€ã¹ãã¬ãŒãžããããŸãã 次ã«ã圌女ãããŒã¿ã2å以äžãç¹ã«ã²ã©ãããŒãºã§å€±ããªãããšã蚌æããããšããŸãã
次ã¯ãããããšãšãã«çããæ¹æ³ããšããå°ããªå²åŠã§ãã
åæ£ã·ã¹ãã ã¯ã©ããé ãã§æ©èœãããã®ã§ãããç§ãã¡ã¯ããã«åº§ã£ãŠãããšæããŸãã ãµãŒããŒã§ããå Žåãããã°ãäºãã«éä¿¡ããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã§ããå Žåããããäœããã®å éšç¶æ ãæã£ãŠããŸãã åéãšããã¹ãã¡ãã»ãŒãžãéä¿¡ããŠããå Žåãããªããåæ£ã·ã¹ãã ã®äžéšã§ãããäžè¬çãªæ¡ä»¶ããããããã«åæããããšããŠããŸãã äžè¬ã«ãåæ£ã·ã¹ãã ã¯ããã€ãã®éšåã§æ§æããããžã§ãŒã¯ã§ããããããã®éšåã¯äºãã«éä¿¡ããŸãã ããããé 延ãšãšã©ãŒã§éä¿¡ãããšããäºå®ã«ããããã¹ãŠãè€éã«ãªããŸãã ããã¯äºæ ãéåžžã«è€éã«ããŸãã
人çããã®å°ããªäŸã
ç§ãã¡ã¯ãã€ãŠã€ã³ã¿ãŒãããããµãŒãã£ã³ããWebã¹ãã€ããŒãæžããããããçš®é¡ã®ç°ãªãããŒãžãããŠã³ããŒãããŸããã 圌ã«ã¯é·ã課é¡ããããããã«ãã¹ãŠãç©ã¿äžããŸããã ãã¥ãŒã«ã¯ããã€ãã®åºæ¬çãªæäœããããŸãã ããã¯ããã¥ãŒããåãåºããã®ããã¥ãŒã«å ¥ãããã®ã§ãã ãŸãããã¥ãŒã«3çªç®ã®æäœããããŸããããã¥ãŒã«ãªããžã§ã¯ãããããã©ããã確èªããåããã®ã2åå ¥ããªãããã«ããŸãã

åé¡ã¯ãè¡ãéåžžã«å€§ãããã¡ã¢ãªã«åãŸããªãããšã§ããã ç§ãã¡ã¯èããŸããïŒäœããããªã«è€éãªã®ã§ããïŒ ç§ãã¡ã¯è³¢ããHighLoadã«è¡ããŸãã ãããã£ãŠããã®ãã¥ãŒã现ããåå²ããŠãå¥ã®ãµãŒããŒã«ããŒã«ããŠã¿ãŸãããã åãµãŒããŒã¯ç¬èªã®ãã¥ãŒãåŠçããŸãã ã¯ãããã¥ãŒããæåã®èŠçŽ ãååŸã§ããªããšããæå³ã§ãå°ãæŽåæ§ã倱ãããŸãããã»ãšãã©æåã®èŠçŽ ãååŸã§ããŸãã ã·ã£ãŒãã±ãŒã¹ãéžãã§ãããããåãåºããŠããã¹ãŠãé 調ã§ãã ã€ãŸãããã¥ãŒããååŸããå Žåãã»ãšãã©ãã¹ãŠãæ£åžžã§ãããããžãã¯ã¯ããå°ãè€éã«ãªã£ãŠããŸãã ãã¥ãŒã«å ¥ããã®ãç°¡åã§ããã©ã®ã·ã£ãŒããå ¥ãããã調ã¹ãŠå ¥ããŸãã ãã¥ãŒããããã©ããã確èªããŠãã ãããåé¡ããããŸããã ã¯ããããžãã¹ããžãã¯ã¯ããå°ãè€éã«ãªããŸããããå°ãªããšãéèŠã§ã¯ãªããªã£ãŠãããããã«ã¯è¡ãæµããŠããªãããã§ãã
ã©ã®ãããªåé¡ããããŸãã
äœããã®ãããã¯ãŒã¯ã€ã³ã¿ã©ã¯ã·ã§ã³ãè¿œå ããã³ã³ããŒãã³ããå¢ãããšãã·ã¹ãã ã®ä¿¡é Œæ§ãäœäžããããšãç解ããŠããŸãã ä¿¡é Œæ§ãäœããšãééããçºçããŸãã ãœãããŠã§ã¢ãšãââãŒããŠã§ã¢ã®å Žåããã¹ãŠãæ確ã§ãã éã䜿çšãããšããœãããŠã§ã¢ã䜿çšããŠãµãŒããŒãããæ°ãããã®ã«ããããšãã§ããŸã-éææ¥ã«é ã£ãŠå±éããªãã§ãã ããã ãããŠããããã¯ãŒã¯ã§ã¯ããã®ãããªããšã¯ããªãããããã©ããããã«é¢ä¿ãªãå£ããŸãã Microsoftã«ã¯ãWindows Azureã®ã¹ã€ããã®çš®é¡ã«åºã¥ãããããã¯ãŒã¯ããŒããŠã§ã¢é害統èšã«é¢ããåªããèšäºããããŸãã ããŒããã©ã³ãµãŒããŒãã幎éãéããŠããªã確çã¯çŽ17ïŒ ã§ãã ã€ãŸããæåŠããå Žåã«äœããã¹ãããæäŸããªããšãé ããæ©ããããªãã¯èª°ãè¯ã人ãäžžwillã¿ããã§ãããã
ãããã¯ãŒã¯ã§çºçããæãäžè¬çãªåé¡ã¯ãNETSPLITã§ãã ãããã¯ãŒã¯ãååã«åŽ©å£ãããšããããã¯çµ¶ãã厩å£ãããããã±ããæ倱ããããŸãã ãã®çµæãããã¯ãã©ãã©ã«ãªããããã©ãã©ã«ãªããŸããã§ããã
ãããã¯ãŒã¯ã«åé¡ãããå Žåãã·ã£ãŒãã£ã³ã°ã®ãã¥ãŒã¯ã©ããªããŸããïŒ
ãã¥ãŒããäœããååŸããå Žåããã¥ãŒããæåã®èŠçŽ ãååŸããæºåãã§ããŠããå Žåã¯ãå©çšå¯èœãªã·ã£ãŒãããååŸããããšãã§ããŸãã
ãã¥ãŒã«ã³ã³ããŒãã³ãããããã©ããã確èªããå¿ èŠãããå Žåã䜿çšã§ããªãã·ã£ãŒãã«ç§»åããå¿ èŠãããå Žåã¯äœãã§ããªããšããäºå®ã«ããããã¹ãŠãè€éã«ãªããŸãã
ãããããã¥ãŒã«äœããå ¥ããå¿ èŠããããšäºæ ã¯è€éã«ãªããã·ã£ãŒãã¯å©çšã§ããŸããã ãã®ç Žçã¯ã©ããé ãã«ããã®ã§ãããã眮ãå Žæã¯ãããŸããã ããã倱ãããã©ããã«å»¶æããŠããããäœãããã以å€ã«äœãæ®ã£ãŠããŸããã ã·ã¹ãã ã®èšèšã«å€±æãå ¥ããªãã£ãããã§ãã

ããããã¯åçã§æ²ããã 圌ã¯ã·ã¹ãã ã®èšèšã«å€±æãããªãã£ãããã§ãã ç§ãã¡ã¯è³¢ããéåžžã«è³¢ãããã®åé¡ã«å¯ŸåŠããããã®å€ãã®ç°ãªãéžæè¢ãèãåºããä»ã®åç¶ãããããšã¯ç¢ºãã§ãã

次ã«ãCAPå®çãã·ãŒã³ã«è¡šç€ºãããŸãã
CAPå®çã¯ãåæ£ã·ã¹ãã ã®èšèšã®åºç€ã§ãã ããã¯æ£åŒã«ã¯å®çã§ã¯ãªããçµéšåã§ããå®çã§ããã誰ããå®çãšåŒãã§ããŸãã
次ã®ããã«èãããŸãã åæ£ã·ã¹ãã ãäœæãã3ã€ã®æ±ããããŸãã ããã¯ãæŽåæ§ãå¯çšæ§ãããã³ãããã¯ãŒã¯ã®åé¡ã«å¯Ÿããèæ§ã§ãã ã¯ãžã©ã¯3å¹ããŸããã2å¹ãéžã¶ããšãã§ããŸãã 2ã€ã ãã§ãªããã»ãšãã©2ã€ã§ãã ããã«ã€ããŠã¯åŸã§èª¬æããŸãã
é åº-æŽåæ§ãã¢ã¯ã»ã·ããªãã£ãæç¶å¯èœæ§ãšã¯äœã§ããã ããã¯äžçš®ã®å®çã§ãããæ£åŒãªèª¬æãå¿ èŠã§ãã
åšåº«ç¶æ³
ããã¯å¯çšæ§ã§ãããç¶ç¶çãªå¯çšæ§ãæå³ããŸãã ã·ã¹ãã ãžã®åãªã¯ãšã¹ããçããŠããããŒããžã®ã·ã¹ãã ãžã®ãªã¯ãšã¹ãã¯ãã¹ãŠæ£åžžã«åŠçãããªããã°ãªããŸããã ã€ãŸãããªã¯ãšã¹ãã®äžéšãåŸã§å»¶æããããäœããããŸããããªãã£ãããã«é²é³ãåŽæ¹ã«å»¶æããå Žåãããã¯äžè²«æ§ã®ãªãå¯çšæ§ã§ãã ãã¹ãŠã®ããŒããèŠæ±ã«å¿çããªãå ŽåããŸãã¯ãã¹ãŠã®ããŒãããã¹ãŠã®èŠæ±ã«å¿çããªãå Žåãããã¯CAPå®çã®èŠ³ç¹ãããäžè²«æ§ã®ãªãå¯çšæ§ã§ãã
ãããããªãã«çãããïŒ

ãããå¯å€å¯çšæ§ã§ãã
èª å®ã
次ã®é ç®ã¯æŽåæ§ã§ãã æŽåæ§ã®èŠ³ç¹ãããåæ£ã·ã¹ãã ã«ã¯éåžžã«å€ãã®ç°ãªãã¿ã€ãã®æŽåæ§ããããšèšããŸãã

ãããã®çŽ50ããããŸãã CAPå®çã«ããã®ã¯ã©ãã§ããïŒ
CAPå®çã¯æãå³æ Œãªã¿ã€ãã§ãã ç·åœ¢åå¯èœæ§ãåŒã³åºãããŸãã
æŽåæ§ãç·åœ¢åå¯èœæ§ã ãšãŠãã·ã³ãã«ã«èãããŸããããã®äžã«ã¯å€§ããªåœ±é¿ããããŸãã æäœAã®åŸã«æäœBãéå§ãããå ŽåãBã¯Aã®çµãããŸãã¯ããæ°ããç¶æ ã§ã·ã¹ãã ãèŠãã¯ãã§ãã ã€ãŸããAãå®äºãããšã次ã®æäœã§ã¯Aã®åã«äœãèµ·ãã£ãã®ããèŠãããšãã§ããŸããããã¹ãŠãè«ççã§ãè€éãªããšã¯äœããªãããã§ãã èšãæãããšããã·ãŒã±ã³ã·ã£ã«æäœã«ã¯äžè²«ããå±¥æŽããããŸããã
次ã«ããããã®ã¹ããŒãªãŒã«ã€ããŠè©³ãã説æããŸãã

äœããã®ã¬ãžã¹ã¿ããããšæ³åããŠãã ããã ããã¯ç§ãã¡ãèªãããšãã§ãããã®ã§ããã以åã«ããã«æžãããã®ã ãã§ãã å€æ°ã®ããã®ãã äžã€ã®ç©Žã ãªãŒããŒãšã©ã€ã¿ãŒã¯1人ã§ãã ããã§ãã¹ãŠãèªã¿æžãããŸãããè€éãªããšã¯äœããããŸããã èªè ãšäœå®¶ãè€æ°ãããšããŠããããã»ã©è€éãªããšã¯ãããŸããã

ããããã¹ã©ã€ãããå®éã®äžçã«ç§»åãããšããã«ããããã¯ãŒã¯ã®é 延ãããããããã®å³ã¯å°ãç°ãªã£ãŠèŠããŸãã æ£ç¢ºãªææã¯ããããŸããã é²é³ã¯wãšw1ã®éã§è¡ãããæ£ç¢ºã«ã©ãã§èµ·ãã£ããã¯ããããŸããã 枬å®å€ãåãã§ãã ããšãã°ãæŽå²ã®èŠ³ç¹ããããã®ãããªåçŽãª3ã€ã®ã¹ããŒãªãŒãæžãçããããšãã§ããŸãã

æåã«aãèªãã§ãããbãæžããŠãããbãèªã¿ãŸããåçã®ããã«ã¯ã£ãããšã ååãšããŠãå¥ã®ã¹ããŒãªãŒãå¯èœã§ããaãèªãã ãšããaãããäžåºŠèªãã§ãããbãæžããŸããïŒåçã®ããã«ãã¹ãŠãããå ŽåïŒã
第äžè©±ã aãèªãã åŸãçªç¶bãèªãã§ããbãæžããå Žåãããã¯ãããšççŸããŸãã ç·åœ¢åå¯èœæ§ã®èŠ³ç¹ããããã®ãããªã¹ããŒãªãŒã¯ç·åœ¢åã§ããŸããããCAPå®çã§ã¯ãççŸããªãã¹ããŒãªãŒãå°ãªããšã1ã€ååšããå¿ èŠããããŸãã ãã®åŸãã·ã¹ãã ã¯ç·åœ¢åå¯èœã§ãã ããã€ããããããããŸããã
æç¶å¯èœæ§
æåŸã®é ç®ã¯ãæåPã§ããããŒãã£ã·ã§ã³ã®èš±å®¹ç¯å²ã¯ããã·ã¢èªã§ã¯ããããã¯ãŒã¯ã®åæ¢ã«å¯ŸããæµæããšèšããŸãã 次ã®ããã«ãªããŸãã

æ°å°ã®ãµãŒããŒããããæåæ©ãæ©æããã«é転ãããããã®éã®é ç·ãåæãããšæ³åããŠãã ããã ã¯ã©ã¹ã¿ãŒãååã«ãã©ãã©ã«ãªã£ãå Žåã2ã€ã®ãªãã·ã§ã³ããããŸãã æåã®æ¹æ³ïŒå€§ããæ¹ã®ååãçåããå°ããæ¹ãè±èœããŸãã å°ããæ¹ãè±èœããŠãããããã¢ã¯ã»ã·ããªãã£ã倱ãããŠããŸãã ãããã倧ããªãã®ã¯çããŠããŸãã ãããã圌ãã¯å®å šæ§ã倱ããŸããã§ããã äž¡æ¹ãšãæ©èœããŸããç§ãã¡ã¯ãã¡ãã¡ã§èšé²ãåãå ¥ãããã¹ãŠãåãå ¥ããŸãããã¹ãŠã¯åé¡ãããŸããã ããããŠã¯ãããŠãã¯ã€ã€ãã¯ãã ä»ãããããšã1ã€ã®ã·ã¹ãã ãããã2ã€ã®ã·ã¹ãã ãããããããã¯èªåãã¡ã®ç掻ãéãããšãããããŸãã
CAPå®çã®èŠ³ç¹ãããã·ã¹ãã ã®èšèšã«ã¯3ã€ã®ã¢ãããŒãããããŸãã ãããã¯ã3ã€ã®2ã€ã®çµã¿åããã«äŸåããCP / AP / ACã·ã¹ãã ã§ãã
ACã·ã¹ãã ã«åé¡ããããŸãã äžæ¹ã§ã圌ãã¯ç§ãã¡ãé«å¯çšæ§ãšæŽåæ§ãæã£ãŠããããšãä¿èšŒããŸãã ãããã¯ãŒã¯ãå£ãããŸã§ããã¹ãŠãã¯ãŒã«ã§ãã ãŸããããã¯é »ç¹ã«çºçãããããå®éã«ã¯ACã·ã¹ãã ã䜿çšã§ããŸãããACã·ã¹ãã ã䜿çšãããšãã«çãã劥åç¹ãç解ããŠããå Žåã«éããŸãã
çŸå®ã®äžçã«ã¯2ã€ã®æ¹æ³ããããŸãã æŽåæ§ãã·ããããŠã¢ã¯ã»ã·ããªãã£ã倱ãããã¢ã¯ã»ã·ããªãã£ã«ã·ããããŠãæŽåæ§ã倱ãããšãã§ããŸãã 3çªç®ã¯ãããŸããã
å®éã«ã¯ãããŸããŸãªCP / AP / ACã·ã¹ãã ãå®è£ ããå€ãã®ã¢ã«ãŽãªãºã ããããŸãã 2ãã§ãŒãºã³ããããPaxosãã¯ã©ãŒã©ã ããã³ãã®ä»ã®ããã ããŽã·ããããã³ãã®ä»ã®ã¢ã«ãŽãªãºã ããŒãã
次ã«ããããã®ããã€ããå®è£ ããŠãäœãèµ·ãããã確èªããŸãã ããªãã¯èšãããšãã§ããŸãïŒã10åãçµéãããç§ãã¡ã®é ã¯ãã§ã«ççºããç§ãã¡ã¯ã¡ããã©å°çããŸãããã ãããã£ãŠãç§ãã¡ã¯å®éã«äœããããããšããŸãã
å®éã«è¡ãããš
åçŽãªãã¹ã¿ãŒ/ã¹ã¬ãŒãåæ£ã·ã¹ãã ãäœæããŸãã ãã®ããã«ãScalaãDockerã䜿çšãããã¹ãŠãããã¯ããŸãã éåæ/åæã¬ããªã±ãŒã·ã§ã³ãåãããã¹ã¿ãŒ/ã¹ã¬ãŒãåæ£ã·ã¹ãã ãã§ããŸãã 次ã«ãJepsenãååŸããå®éã«ãã¹ãŠãæ£ãããééã£ãŠãããã瀺ããŸãã Jepsenãå®è¡ããåŸãçµæã説æããŠã¿ãŸãããã ãžã§ãã»ã³ãšã¯äœã§ããïŒ å°ãåŸã§èª¬æããŸãããããããããªãã®å€ãã¯èããããšãããã§ãããããç®ã§èŠãããšã¯ãããŸããã
ãã¹ã¿ãŒã¹ã¬ãŒã äžè¬çã«ãããã¯åºæ¬çãªãã®ã®ããã«èŠããŸãã ã¯ã©ã€ã¢ã³ãã¯ããã¹ã¿ãŒã«æžã蟌ã¿èŠæ±ãéä¿¡ããŸãã ãã¹ã¿ãŒã¯ãã£ã¹ã¯ã«æžã蟌ã¿ãŸãã ãã¹ã¿ãŒã¯ãåæãŸãã¯éåæã§ãã¹ãŠãã¹ã¬ãŒãã«åæ£ããŸãã ã¬ã³ãŒããšããŠæ£åšããåããŸãã¯åŸã«ãã¯ã©ã€ã¢ã³ãã«åæçãŸãã¯éåæçã«å¿çããŸãã
CAPã®å®çã®èŠ³ç¹ãããç©äºãã©ã®ããã«æŽåæ§ãã¢ã¯ã»ã¹å¯èœæ§ãªã©ãåããŠããããç解ããããšããŸãã
äœãè©ŠããŠã¿ãŸãããã

ããã«ã¯å°ããªã¯ãŒã¯ããŒã¹ããããŸãã®ã§ãã«ã©ãªã±ã§ãã£ãšæžããŸãã ä»ã®ãµãŒããŒãšé£æºããã®ã«åœ¹ç«ã€2ã€ã®æ©èœããããŸãã ã€ãŸããåæ£ã·ã¹ãã ã®ããŒãéã§éä¿¡ããæãç°¡åãªæ¹æ³ãšããŠHTTPã䜿çšããŸãã ã©ãããŠïŒ
2ã€ã®æ©èœããããŸãã ãã®ããŒãã«ãããã®ããŒã¿ãæžã蟌ã¿ãŸãïŒ

ãã®ããŒãããããŒã¿ãèªã¿åããããããã¹ãŠéåæçã«å®è¡ããå¥ã®é¢æ°ïŒ

ãŸããResponseã解æãã䟿å©ãªæ©èœã å¿çãåãåããæååãè¿ããŸãã

è€éãªããšã¯äœããããŸããã
ãŸããåæ£ã·ã¹ãã ã®åçŽãªãµãŒããŒãäœæããŸãã

ãŸããããã«å®¿é¡ããããŸãã ã·ã¹ãã å ã®ããŒã¿ãããã§ã¯å®éã®ããŒã¿ããŒã¹ã§ã¯ãªãã©ã€ããã¢ããããããçµ±èšå šäœã1ã€ã®å€æ°ã«æ ŒçŽããŸãã

ãããã£ãŠãåçŽã«æååãä¿åããè€è£œãªã©ãè¡ããŸãã ããŸããŸãªäŸ¿å©ãªãžã§ãŒã¯ããããŸããããšãã°ãå€æ°ç°å¢HOSTNAMEããã®èªã¿åããè¿é£ã®ããŒããªã©ã§ãã

ããã§ã¯ã2ã€ã®æ©èœã®ãã©ã°ãäœæããŸãã

åæ£ã·ã¹ãã ããã®èªã¿åããšåæ£ã·ã¹ãã ããã®æžã蟌ã¿ã ãã¡ãããä»ã¯å®è£ ããŸããããå ã«é²ã¿ãŸãã
ããã§ãã©ã©ã€ã«ãèµ·åããŸãã

ãã¹ãŠãéåžžã«ç°¡åã§ãã ãŸã å®è£ ãããŠããªãã«ãŒãé¢æ°ããããŸãããããã¯äœããããŸãã 䜿çšããæ®ãã®ã«ãŒãã«ã€ããŠèª¬æããŸãã

ããããã¹ãŠ8000çªç®ã®ããŒãã§ååŸããŸãã

ã©ã®ãããªã«ãŒãããããŸããïŒ 2ã€ã®ã«ãŒãããããŸãã æåã¯dbã§ãã

ãã®ã«ãŒãã¯ãããŒã¿ããŒã¹ã¯ã©ã€ã¢ã³ãåãã§ãã ç§ãã¡ã¯åœŒãšååããŠããã圌女ã¯å éšã§äœããããŠããŸãã
ããã«çãããããŸã å®è£ ããŠããªãéæ³ã®é¢æ°readãåŒã³åºããŸãã

ããã«ããŒã¿ãæçš¿ããå Žåãæžã蟌ã¿é¢æ°ãåŒã³åºããŸãã è€éãªããšã¯äœããªãããã§ãã

ããã«å ããŠãããŒã«ã«ãšåŒã°ããå¥ã®ã«ãŒãããããŸãã

ããã¯ç§ãã¡ã®ããã§ã¯ãªããåæ£ã·ã¹ãã ã®ã¡ã³ããŒã§ããç°ãªãããŒããäºãã«éä¿¡ã§ããããã«äœãããŸããã ä»ã®äººã¯ããã«æžããããã®ãèªãããšãã§ããŸããã
ããã«å°éããããããžãã¯å€æ°å€ãèªã¿åããŸãã

ããã«æçš¿ããå Žåãããã«æçš¿ããå 容ããã®å€æ°ã«æžã蟌ã¿ãŸãã

è€éãªããšã¯äœããããŸããã Scalaããå°ããªè³ãççºãããããããŸãããã倧äžå€«ã§ãã
ãµãŒããŒãäœæããŸããã MasterSlaveã®ããžãã¯ãäœæããŸãã 次ã«ãMasterSlaveãå®è£ ããå¥ã®ã¯ã©ã¹ãäœæããŸãã å®éãéåæMasterSlaveããã®èªã¿åãã¯ãããã«ããå€æ°ã«æžã蟌ãŸãããã®ã®ããŒã«ã«èªã¿åãã«ãããŸããã

é²é³ã¯ããå°ãè€éã§ãã

ç§ãã¡ã¯æåã«èªåèªèº«ã«æçŽãæžããŸãã

次ã«ãææããŠãããã¹ãŠã®ã¹ã¬ãŒãã調ã¹ãŠããã¹ãŠã®ã¹ã¬ãŒãã«æžã蟌ã¿ãŸãã

ãã ãããã®é¢æ°ã«ã¯æ©èœããããFutureãè¿ããŸãã

ããã§ã¯ãã¹ã¬ãŒããžã®ãã¹ãŠã®æžã蟌ã¿èŠæ±ãéåæã«ãŒãããã¯ã©ã€ã¢ã³ãã«æ¬¡ã®ããã«èšããŸããããã¹ãŠã¯åé¡ãããŸãããèšé²ããŸãããããã«å ã«é²ãããšãã§ããŸããã èœãšãç©Žã䌎ãå¯èœæ§ã®ããå žåçãªéåæã¬ããªã±ãŒã·ã§ã³ã¯ãä»ã§ã¯ãã¹ãŠèŠãããšãã§ããŸãã
ããããã¹ãŠã³ã³ãã€ã«ããŠã¿ãŸãããã ããã¯Scalaã§ãã圌女ã¯é·ãéãã£ãŠããŸãã äžè¬ã«ãã³ã³ãã€ã«ããå¿ èŠããããšãªããŒãµã«ããŸããã ã³ã³ãã€ã«æžã¿ã
次ã«ããããš
æžããŸãããããã¹ãŠãå®è¡ããå¿ èŠããããã©ãããããã1å°ãããŸãã ããããç§ãã¡ã¯åæ£ã·ã¹ãã ãäœã£ãŠããŸãã åäžããŒãã®åæ£ã·ã¹ãã ã¯ãå®å šã«åæ£ãããã·ã¹ãã ã§ã¯ãããŸããã ãããã£ãŠãDockerã䜿çšããŸãã

Dockerã¯ã¢ããªã±ãŒã·ã§ã³ãã³ã³ããåããããã®ã·ã¹ãã ã§ããããããã誰ããèããããšãããã§ãããã ãã¹ãŠãæ¬çªç°å¢ã§äœ¿çšãããŠãããšã¯éããŸããã 䜿çšããŠã¿ãŸãã ããã¯ããã¹ãŠãç°¡çŽ åããããã®è»œãä»®æ³åã·ã¹ãã ã§ãã Dockerã«ã¯è±å¯ãªãšã³ã·ã¹ãã ãããããã®ãšã³ã·ã¹ãã ã®ãã¹ãŠã䜿çšããããã§ã¯ãããŸããã ãã ãã1ã€ã®ã³ã³ãããŒã ãã§ãªããã°ã«ãŒããäžåºŠã«èµ·åããå¿ èŠããããããDocker Composeã䜿çšããŠããããäžåºŠã«ããŒã«ããã¯ããŸãã
åçŽãªDockerfileããããŸãããããã¯éåžžã«åçŽã§ã¯ãããŸããã

次ã«ãJavaãã€ã³ã¹ããŒã«ããDockerfileãSSHãããã·ã¥ããŸãã ãªãå¿ èŠãªã®ãå°ããªãã§ãã ããã ã¢ããªã±ãŒã·ã§ã³ããã¹ãŠãèµ·åããŸãã
ãããŠã5ã€ã®ããŒããã¹ãŠãèšè¿°ããComposeãã¡ã€ã«ããããŸãã

ããã«ããã€ãã®ããŒãã®èª¬æããããŸãã ä»ããçµ±åãè©Šã¿ãŸãã ãã®ããã®ã¹ã¯ãªããããããŸãã

å±éäžã«è²ãå€æŽããŸãã

ããã§ãDockerã³ã³ãããäœæãããŸãã ããã§èµ·åããŸãã 5ã€ã®ããŒããã¹ãŠãèµ·åããŸããã

ä»ãç§ãã¡ã¯åæ£ã·ã¹ãã ãçããŠããããšãæ»æããã®ãåŸ ã£ãŠããŸãã å°ãæéãããããŸããããã¯Javaã§ãã MasterSlaveãèµ·åãããšèšã£ãŠããŸãã

ããã«å ããŠããã®åæ£ã·ã¹ãã ããäœããèªã¿åãããšãã§ããã·ã³ãã«ãªã¹ã¯ãªããããã¹ãŠãããŸãã
ããŒãn1ã«ãããã®ãèŠãŠã¿ãŸãããã

ããã«0ãæžã蟌ãŸããŸãã
誰ããã¹ã¿ãŒã§ããã誰ãã¹ã¬ãŒãã§ãããã«å¯Ÿããä¿è·ããªãã£ãã®ã§ãn1ã¯åžžã«ãã¹ã¿ãŒã§ãããšãã信念ãæã£ãŠããŸãã ãã¹ãŠãåçŽåããããã«ãåžžã«æžã蟌ã¿ãŸãã
ãã®ãã¹ã¿ãŒã§äœããæžããŠã¿ãŸãããã
n1 1ã眮ã
ãŠããããããã«èšé²ãããŸããã ããã§ãã°ã«ãããã®ãèŠãŠã¿ãŸãããã

ããã«ã¬ã³ãŒãã«å°ããªãã®ãããããã¹ãŠã®ã¹ã¬ãŒãã«å¯ŸããŠãã®ã¬ã³ãŒããå±éããŸãããããã«èšé²ãããŸããã

ããŒãn3ã«ç§»åããŠãããã«ãããã®ã確èªããããšãã§ããŸãã

æžãçããã·ã³ã°ã«ããããŸãã
ç§ãã¡ã¯ããŒãã¹ãåŸãããšãã§ããŸããç§ãã¡ã¯èã®äžã«åæ£ã·ã¹ãã ãæžããŸãããããã¯ããŸããããŸãã ããããããã¯ããŸããããŸããã
ä»ãç§ãã¡ã¯åœŒå¥³ãç æ°ã«ããããšããŸãã 圌女ãç æ°ã«ããããã«ãJepsenãšåŒã°ãããã®ãããªãã¬ãŒã ã¯ãŒã¯ã䜿çšããŸãã Jepsenã¯ãåæ£ã·ã¹ãã ããã¹ãããããã®æåã®ãã¬ãŒã ã¯ãŒã¯ã§ããã1ã€åŸ®åŠãªç¹ããããŸããClojureã§æžãããŠããŸãã Clojureã¯ç¥ããªãLispã§ãã ããã¯ãæ¢åã®ããŒã¿ããŒã¹ããã¥ãŒãªã©ã®æ¢è£œã®ãã¹ãã®ã»ããã§ãã ãã€ã§ãèªåã§æžãããšãã§ããŸããããã«ããšããŸããã¯ãªãã®ãé€ãããããããã¹ãŠã®ããŒã¿ããŒã¹ã§ãèŠã€ãã£ãåé¡ã«é¢ããèšäºããããããããŸãããããããZooKeeperãšRethinkDBã ãããããååŸã§ããŸããã§ããã圌ãã¯ãããæã«å ¥ããããä»ã®äººãšæ¯ã¹ãŠå°ãã ããããªãã¯ããã«ã€ããŠèªãããšãã§ããŸãã
Jepsenã®ä»çµã¿
ãããã¯ãŒã¯ãšã©ãŒãã·ãã¥ã¬ãŒãããåæ£ã·ã¹ãã ã§ã©ã³ãã æäœãçæããŸãã 次ã«ããããã®æäœãåæ£ã·ã¹ãã ãšåç §åäœããã®åæ£ã·ã¹ãã ã®ã¢ãã«ã«é©çšãããæ¹æ³ãããã³ããã«åé¡ããããã©ããã調ã¹ãŸãã
Jepsenãåé¡ãèŠã€ããå ŽåïŒ

ããã§åè«ãèšãããã£ãã
Jepsenãäœããã®åé¡ãçºèŠããå Žåã圌ã¯ããªãã®åæ£ã·ã¹ãã ã®åäŸãèŠã€ããŸããã ãããããžã§ãã»ã³ãã¹ãã¯æ¬è³ªçã«ç¢ºçè«çã§ãããããäœãèŠã€ãããªãã£ãå Žåãååã«èŠæ ãããããªãã£ãå¯èœæ§ããããŸãã ãããã圌ãããæ€çŽ¢ããã°ã圌ã¯äœããèŠã€ããã§ãããã ããšãã°ãRethinkDBã®å ŽåããªãªãŒã¹ã®çŽ2é±éåã«ãã¹ããå®è¡ããå€å°ãªããšãæ©èœããããšã蚌æããŸããã
ããã§ã¯2é±éãã¹ããå®è¡ããŸããã5ç§ããããŸãã Jepsenãã¹ãã®ã¿ã¹ã¯ã¯ããã¹ã¿ãŒãžã®æžã蟌ã¿ãMasterSlaveããã®èªã¿åããç©äºã®æŽåæ§ãšããã¹ã¿ãŒ/ã¹ã¬ãŒãè€è£œãæ£ããèšè¿°ãããã©ãããç解ããããšã§ãã
Jepsenãã¹ãã¯ãããã€ãã®éèŠãªéšåã§æ§æãããŠããŸãã

åæ£ã·ã¹ãã ã«é©çšããã©ã³ãã æäœãçæãããžã§ãã¬ãŒã¿ãŒããããŸãã åæ£ã·ã¹ãã èªäœãããããèµ·åããŸããã Dockerã§ããå®éã®éã®ãµãŒããŒã§ãããŸããŸããã ãŸããåæ£ã·ã¹ãã ã®åäœãèšè¿°ããåç §ã¢ãã«ããããŸãã ç§ãã¡ã®å Žåãããã¯ã¬ãžã¹ã¿ã§ãããããã«æžãããã®ã§ãããããèªãå¿ èŠããããŸãã è€éãªããšã¯äœããããŸããã Jepsenã«ã¯ããããå Žåã«èšå€§ãªæ°ã®ã¢ãã«ããããŸãããã¬ãžã¹ã¿ãšCheckerã®ã¿ã䜿çšããŸããããã¯ãã¢ãã«ãšã®å¯Ÿå¿ã«ã€ããŠåæ£ã·ã¹ãã ã«é©çšãããæäœã®å±¥æŽã®å¯Ÿå¿ããã§ãã¯ããŸãã
åé¡ã¯ãJepsenãClojureã§æžãããŠããããã¹ããClojureã§æžãããå¿ èŠããããšããããšã§ãã ããããä»ã®äœãã«æžãããšãã§ããã°ãããã¯ã¯ãŒã«ã ããã ãããããã©ãã«ããã©ãã«ã Clojureã¯ãåžžã«ãªã¹ããããèšèªã§ãã ããšãã°ã2ã€ã®æ°åãè¿œå ããå Žåã¯ãæåã®èŠçŽ ãè¿œå ããããªã¹ããäœæãã次ã«2ã€ã®æ°åãè¿œå ããŠãæåŸã«3ã€ã®æ°åãååŸããŸãã

åŒã³åºãé¢æ°ãdefnãšããå¥ã®é¢æ°ã«èšå®ããæåã®åŒæ°ã¯é¢æ°ã®ååãåŒæ°ã¯é¢æ°ãé¢æ°ã®æ¬äœã®é ã«ãªããšèšãããšãã§ããŸãã 圌女ããã®ããã«åŒã¶ãšã圌女ã¯ããããŒããã€ããŒãïŒããšèšãã§ãããã ããã¯åå¿è åãã®ãã®ãããªClojureã³ãŒã¹ã§ãã
ãã®Clojureã³ãŒã¹ã¯æ¬¡ã®ããã«èŠãããšèšããŸãã

ãããŠä»ãããã¯ééããªãå³åŽã®ãã®ã«ãªããŸãã å®éãã¯ãã ãã ããClojureã¯å°ãå ·äœçã§ããããããã¬ãŒã ã§äœãèµ·ããããå°ãªããšã倧ãŸãã«ç解ããã°ååã§ãã
ã ããããžã§ãã»ã³ã æåã«ããã¹ãã«ã€ããŠèª¬æããŸãã

ãã®ãããã¯ãã¹ã¯ãå·Šããå³ãäžããäžã«èªãã®ã¯æ£ãããããŸãããããã¯ãLispã§ãããããå åŽãšå€åŽããèªãæ¹ãè¯ãããã§ãã ãã¹ãã®èª¬æãè¿ãé¢æ°ããããŸããããŸã å®è£ ããŠããŸããã ãã®ãã¹ããå®è¡ããå¥ã®é¢æ°ã«ãã®èª¬æãè¿œå ãããšããã£ã¬ã¯ããªãè¿ãããŸãã ãã®ãã£ã¬ã¯ããªã§ãçµæããŒã䜿çšããŠäœããéžæãããã®ãã£ã¬ã¯ããªã«validãšããããŒããããã©ããã確èªããŸãã ååšããå Žåããã¹ãã«åæ ŒããŸãã Clojureã¯ãã®ããã«èªã¿ãŸãã æåã«è³ãç Žå£ããå¿ èŠããããŸããããã¹ãŠãæããã«ãªããŸãã
次ã«ããã¹ãã«ã€ããŠèª¬æããŸãã

ãŸãããã¹ãã¯åŒæ°ã®ãªãé¢æ°ã§ãã 圌女ã¯å¥ã®ãã¹ããæ¡åŒµããŸããããã¹ãã¯ãŸã£ããè¡ããããããã€ãã®ãã¹ããè¿œå ãããŸãã ããšãã°ãJepsenã¯HTTPã«ã€ããŠäœãç¥ããªããããããŒã¿ããŒã¹ãšã®éä¿¡ã«äœ¿çšããã¯ã©ã€ã¢ã³ãã®ååã ãã§ãã«ãŒããŸã äœæããŠããŸããããäœæããŸãã åæ£ã·ã¹ãã ã®æšæºãšããŠäœ¿çšããã¢ãã«ã ãžã§ãã¬ãŒã¿ãŒã¯ãã©ã³ãã ãªèªã¿åãããã³æžã蟌ã¿æäœãè¡ãããããã®éã«10ããªç§ã®é 延ãæ¿å ¥ããã¯ã©ã€ã¢ã³ãã§ããããéå§ãã5ç§éãã¹ãŠéå§ããŸãã ããã«ãSSHã§ã®äœæ¥ã®ããã«ãããŸãã
次ã«ãèªã¿åããšæžã蟌ã¿ã«ã€ããŠèª¬æããŸãã ããããæ©èœã§ãã ããã¯Clojureã§ããããã¹ãŠã®æ©èœããããä»ã«ã¯äœããããŸããã

ã¯ã©ã€ã¢ã³ãã«ã€ããŠã説æããŸãããæåã¯HTTPã¯ã©ã€ã¢ã³ãã§ãã

ããã«ã¯ãHTTPãžã®æžã蟌ã¿ãHTTPã§ã®èªã¿åãã®ããã®ããã€ãã®é¢æ°ããããŸãã ããããã¹ãŠè¡ãããæ¹æ³ã«ã€ããŠã¯èª¬æããŸããã ãããå®éã«ã¯ã200ãè¿ãããå Žåããã¹ãŠã¯åé¡ãããŸããã 409ãHTTP 409 ConflictïŒéåžžã«äŸ¿å©ãªã³ãŒãïŒã§ããå Žåãäœããééã£ãŠããŸãã ããå°ã䜿çšããŸãã
ããã«ãã¯ã©ã€ã¢ã³ãã«ã€ããŠèª¬æããŸãã

ãŸããããããèšè¿°ãããã¹ããååŸããã¯ã©ã€ã¢ã³ããšåŒã°ããã€ã³ã¿ãŒãã§ãŒã¹ãæ¡åŒµããé¢æ°ã 3ã€ã®æ©èœããããŸãã èªåèªèº«ãè¿ãã»ããã¢ããã ã¯ã©ã€ã¢ã³ããåé€ããå¿ èŠã®ãªãå解ãå éšã«ã¯äœããããŸããã ãã®ãã¹ãã«è»¢éããæäœãé©çšããinvokeã ããã§ã¯5ç§ã®ã¿ã€ã ã¢ãŠãããããŸããã€ãŸãã5ç§ä»¥å ã«åæ£ã·ã¹ãã ãæ©èœããªãã£ãå Žåãæ©èœããªããšèšããŸãã ãã®èªã¿åããããå ŽåãHTTPèªã¿åããå®è¡ããGETèŠæ±ãè¡ããŸãã ã¬ã³ãŒãã®å ŽåãHTTPæžã蟌ã¿ãã€ãŸãPOSTãªã¯ãšã¹ããè¡ããŸãã MasterSlaveããããMasterã¯1ã€ãããªããããããã§å°ãå€æŽããŸããMasterã§åžžã«æžã蟌ã¿ãŸãã

æåŸã«æ®ã£ãã¢ã€ãã ã¯Checkerã§ãã Jepsenå ã§ç·åœ¢åå¯èœãã§ãã«ãŒãšåŒã°ãããã®ã䜿çšã§ããŸãããèžãã ã®ã§äœ¿çšããŸããã

ã©ããããããã®ãåãããŸããã ãããã£ãŠãç§ã¯èªåèªèº«ãæžããŸããããèœã¡ãŸããã å®éã圌ã¯åããã®ã䜿çšããŸãããæçµçã«ã¯åœŒãéåžžã¯èœã¡ãçŸããç»åãçæããããšããŸããã

ã¡ã¬ãã¹ããäœæããŸãããå®è¡ããŠã¿ãŸãããã

åæ£ã·ã¹ãã ããã¹ãããããéå§ããã®ãåŸ ã£ãŠããŸãã
leinã¯Clojureã®ãã®ãããªãã«ãã·ã¹ãã ã§ãã
ããŸããŸãªãã¹ããããŸããŸãªèªã¿åã/æžã蟌ã¿ãæžã蟌ã¿å§ãããã°ã«ãéæ³ãçºçããŸã-èªã¿åã/æžã蟌ã¿ãã¬ããªã±ãŒã·ã§ã³ã æåŸã«ãããã¯ã倱æããåããŸãã ããã§äœããå¿ããŸããã ç·åœ¢åã§ããªãã¹ããŒãªãŒã®ãªã¹ãããããŸãããããã§ã¯æããã«æ··ä¹±ããŠããŸãã
ãã®ç¶æ³ãèŠãŠã¿ãŸãããã

ãã¹ã¿ãŒ/ã¹ã¬ãŒãã§éåæã¬ããªã±ãŒã·ã§ã³ãè¡ããšãã¹ã¬ãŒãã¯åžžã«é ããããšã誰ããç¥ã£ãŠããŸãã ç·åœ¢åå¯èœæ§ã®èŠ³ç¹ããã¹ã¬ãŒãé 延ãšã¯ã©ãããæå³ã§ããïŒ ã€ãŸããããã§é²é³ãè¡ããããã°ããããŠããé²é³ãè€è£œãããããã§èªã¿åããè¡ãããŸããã ãã®çµæãèªãã¹ãã§ã¯ãªããã®ãèªã¿ãŸããã Bãèªãã§ãAãèªãŸãªããã°ãªããŸããã§ãããã€ãŸããæäœãçµäºãããšæãããæéã«æ»ããããããäœãèªãã§ããã®ããèªã¿ãŸããã ãªããªãããã¹ãŠã®ã¹ã¬ãŒãããŸã ã¬ããªã±ãŒã·ã§ã³ãããŒã«è¿œãã€ããŠããªãããã§ãã ãããã£ãŠãã¹ã¬ãŒãã¯åžžã«ãã¹ã¿ãŒããé ããŸãã
ããªãã¯ç¢ºãã«ããã¯å¹Œçšåã ãšèšãã§ãããã倧人ã®æ¹æ³ã§ãã¹ãŠãããŸãããã åæã¬ããªã±ãŒã·ã§ã³ãæžããŸããããç§ãã¡ã¯è³¢ãã§ãã éåæãšã»ãŒåãã§ãåæã®ã¿ã§ãã

åæ£ã·ã¹ãã ã«æžã蟌ã1ã€ã®é¢æ°ãåå®çŸ©ããŸãã 圌女ã¯ä»ã§ã¯è³¢ãããæ¹ã§ãããããŠããŸãã圌女ã¯ãã¹ãŠã®å¥Žé·ããOKããšèšãç¬éãåŸ ã¡ãŸãã ãã®æã ã圌女ã¯ããã¹ãŠãèšé²ããããšèšããŸãã 奎é·ã®äžäººã圌ãã倧äžå€«ãã§ã¯ãªããšèšã£ãããããã¯ãã©ãã«ãèµ·ãã£ãŠãç§ãã¡ã¯ããã«è¡ããªãããšãæå³ããŸãã
次ã«ããã®ãã¹ãŠã®ãã©ã©ã€ã«ãå®è¡ããŠã¿ãŠãã ããã ãããããããªãã¯ä»ãäœããã®ã»ããã¢ãããããããã¹ãŠãããã»ã©è¯ããã®ã§ã¯ãªãããšãæããã§ãããã 25åãçµéãããšãç·ããã¹ãŠãããŠã³ããŒãããŠæ©èœããã®ã§ãã³ã³ãã€ã«ããããŸã§åŸ ã¡ãŸãã ä»ã§ã¯ãã¹ãŠãåéããŸããåçãªèšèªã§ã¯ãªãããã¹ãŠãããã«æ©èœããå Žåãããã§ã¯ãã¹ãŠãé·ããŠèŠçã§ãã ãããã€ãããŸã§ãã¹ãŠãæžãçŽãããæžãããèããæéããããŸãã
ãã¹ã¿ãŒ/ã¹ã¬ãŒãã®åæãéå§ãããŸããã ãã¹ãŠãããŸãããããšãæåŸ ããŠãJepsenãã¹ããããäžåºŠå®è¡ããŸãããã åæã¬ããªã±ãŒã·ã§ã³ãå®è¡ããŸããããäœãããŸããããªãã£ãã®ã§ãããã ããã¯å§ãŸããæžãå§ããŸããããããã»ã©éãã¯ãããŸããã 圌ã¯åã³æžããŠãåã³èªãã§ãããã§äœããèµ·ãã£ãŠããã ãã®çµæãåã³äœãæªãããšãèµ·ãããŸãã

ç§ãã¡ã¯åã³å€±æããŸãããããã¯ãç·åœ¢åå¯èœæ§ã®ç¹ã§ç·åœ¢åã§ããªãèšå€§ãªæ°ã®ç©èªãç§ãã¡ã«äžããŸããã
åé¡ã¯äœã§ããïŒ
ç§ãã¡ã¯ãã¹ãŠãæ£ãããã£ããšæã£ãã ã©ããããããããã¹ãŠãã²ã©ãå€æããŸããã

åçã¯ããã¹ãŠã以åããããã«æªåããŠããããšã瀺ããŠããŸãã
ãã®ç¶æ³ãæ³åããŠãã ããã

ãã¹ã¿ãŒããŒã1ããããŸããæäœBãšCãèšé²ããããã«Cããããããã«è€è£œããŸããã HTTPãä»ããŠãã¹ãŠãéåæã«å®è¡ããŸãããããã¯ééã£ãŠããå¯èœæ§ããããŸãã 泚2ã§ã¯ãç¹å®ã®é åºã§ãµã€ã³ã¢ããããŸããã ããããããŒã3ã§ã¯ããããã¯å°ç¡ãã«ãªããŸãããã誀ã£ãŠããããéä¿¡ããŸããã éèªãªã©ãããããšãå¿ããŠããŸããã ãããã¯é©çšãããã¹ãé åºã§é©çšãããŸããã§ããã ãã®çµæãCã®ä»£ããã«BãåŸãããŸããããããã§ã¯ãããäœã§ãããæ確ã§ã¯ãããŸããã BãŸãã¯Cã®ãããããCãèªãå¿ èŠããããŸãããããã£ãŠãããã¯ãã®ãããªçœå®³ã§ãã
ãã¹ã¿ãŒ/ã¹ã¬ãŒãCAPã®å®çãšæŽåæ§ã®èŠ³ç¹ãããè€è£œã¯åæè€è£œãã©ããã«äŸåããŸãã éåæã®å Žåãã¹ã¬ãŒããé ããããç·åœ¢åãäžå¯èœã§ããããšã¯æããã§ãã åæã®èŠ³ç¹ãããããã¯ããªããã©ãã ãæ²ãã£ãŠããããã¹ãŠãæ£ããå®è£ ãããã«äŸåããŸãã éããããã°ãããã ç§ãšåããªããããããæªãã ã¢ã¯ã»ã·ããªãã£ã®èŠ³ç¹ããèŠããšãåé¡ã¯ç§ãã¡ã®å¥Žé·ã§ã¯æžãããšãã§ãããèªãããšããã§ããªããšããããšã§ãã é«å¯çšæ§ã®èŠ³ç¹ããã¯ãç§ãã¡ã«å¯ãããããã¹ãŠã®èŠæ±ãæºããããšã¯ã§ããŸããã èªãããšããã§ããŸããã ãããã£ãŠãå©çšã§ããŸããã
ãããã£ãŠãCAPå®çã¯éåžžã«å ·äœçãªãã®ã§ãã å®çŸ©ã¯å³å¯ã§ãããå®éã®ããŒã¿ããŒã¹ã®å 容ãåžžã«èª¬æãããšã¯éããªããããããŒã¿ããŒã¹ã«éåžžã«æ éã«é©çšããå¿ èŠããããŸãã 1ã€ã®ã¬ãžã¹ã¿ãèšè¿°ããããã ãã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³ãšä»ã®æäœãåãã¬ãžã¹ã¿ãŒã«æžããããšãã§ããã°ãããã¯è¯ãããšã§ãã ããããéåžžããã¯é£ããããäžå¯èœã§ãã å¯çšæ§ããã¯ãã®ãããªå¯çšæ§ã§ãããåŸ ã¡æéã¯äœãèšããŸããã åæ£ã·ã¹ãã ã®äžè²«æ§ãéåžžã«åªããŠããããèŠæ±ã«1æ¥ã«1åå¿çããå Žåãæ¬çªç°å¢ã§äœ¿çšããããšãéåžžã«å°é£ã§ãã CAPå®çã§ã¯èæ ®ãããªãããŸããŸãªå®çšçãªåŽé¢ããããŸãã åãããŒãã£ã·ã§ã³ãã±ããã®æ倱ãã€ãŸããäžå®å®ãªãããã¯ãŒã¯ããŒãã£ã·ã§ã³ããããå€æ°ãããå Žåã5ç§ããšã«ããã€ãã®ãã±ããã倱ãããŸãã
ãããã£ãŠãå人çãªçµéšã«ãããšã人ã ãè匱ãªå¿ã§åæ£ã·ã¹ãã ãæžãå§ãããšãé ããæ©ããç¥èãçµæ¶åãããã¹ãŠã®æŸèæãæ°ãããã³ããåããããã¯æ²ç·åŸæã³ã³ã»ã³ãµã¹ã¢ã«ãŽãªãºã ã®ããã«èŠããŸãã ãã¹ãŠã®ããŒããäžè¬çãªç¶æ ã«åæããããšãããããã®ã¢ã«ãŽãªãºã ã極端ãªå Žåã«ããŸããã¹ããããŠããªãå Žåããããã¯ãŸãã§ããããªããããå¿é ããŸãã ããããäžè¬çãªå Žåã®ã³ã³ã»ã³ãµã¹ã¯ãé害ãçºçããå Žåã«äœããã®åœ¢ã§é害ãä¹ãåãå¯èœæ§ããããšããäžè¬çãªæ¡ä»¶ã«é¢ããåæã§ãã
ãã®ãããªäŸïŒ

åæ£ã·ã¹ãã ã«æžã蟌ãã¯ã©ã€ã¢ã³ãããããããã«ã¯7ã€ã®ããŒãããããŸãã ããã§æ祚ããŠããŸãã ã»ãšãã©ã®ããŒãããã¹ãŠãæžãçããŠããããšã«åæããå Žåããã¹ãŠãæ£åžžã§ããããã«èŠããŸãã èªæžã§ãåãããšã å°æ°ã®ããŒãïŒ1-2-3ïŒãèœã¡ãå Žåãããã§åé¡ãããŸããã ãã¹ãŠãæ£åžžã§ãããããã¢ã¯ã»ã·ããªãã£ãŸãã¯æŽåæ§ã倱ã£ãŠããŸããã å€æ°æŽŸãè±èœããå Žåãã¢ã¯ã»ã·ããªãã£ã¯å€±ãããŸããèšé²ã§ããªããªã£ãããæŽåæ§ã¯ãŸã 倱ãããŠããªãããã§ãã
èã®äžã§ã©ã€ããã¢ãããŸãããã

å®è¶³æ°ãäœãããšããŸãã ãžã§ãã»ã³ãããäžåºŠååŸããŠãååŸãããã®ã説æããŠã¿ãŸãããã
ããã§ã¯ãã¹ãŠãããå°ãè€éã«ãªããŸãããªããªããç§ãã¡ã¯ãã§ã«è³¢ãããã§ãã æåã«ãã¯ã©ãŒã©ã ã®ãµã€ãºãèšè¿°ããé¢æ°ãäœæããŸãã

3ã€ã®ããŒãã®å Žåããããã¯2ã€ã5ã€ã®ããŒãã®å Žåã3ã€ãªã©ã§ããããããªéåæ°ã§ãã
次ã«ãããžãã¯ã®èªã¿åãããã³æžã蟌ã¿æ©èœã«ã€ããŠèª¬æããŸãã

ã¯ã©ãŒã©ã ã䜿çšããŠåæ£ã·ã¹ãã ããèªã¿åãå ŽåãHTTPãä»ããŠãã¹ãŠã®ããŒãã«ããã«ãããã®ãå°ããŸãã

次ã«ãã¯ã©ãŒã©ã ã§æ©èœããé¢æ°ãåŒã³åºããŸããããã¯æ¬¡ã®ããã«èšè¿°ããŸãã

æåŸã«ã次ã®ããã«ååŸããå¿ èŠããããšèšããŸãã

ã¬ã³ãŒããšã»ãŒåãã ãã¹ãŠã®ããŒãã«æžã蟌ã¿ãŸããæžã蟌ãŸããå 容ã確èªããŸãã

ã¯ã©ãŒã©ã ãéãŸããã©ããïŒ

次ã«ããŠãŒã¶ãŒã«å¯Ÿããäœããã®å¿çãäœæããŸãã

å®è¶³æ°ã§ã©ãçããã

ããã¯å°ãæšæºçãªScalaã§ãã ããã§ã¯ãåæ£ã·ã¹ãã ã®ããŸããŸãªããŒãããããŸããŸãªãµãŒããŒããå±ããäžé£ã®åçããããŸãã ããã¯ãããšãã°0000ã®ããã«ãã»ãšãã©åãªãè¡ã®ã·ãŒã±ã³ã¹ã§ãã

ããããèªåã§ã°ã«ãŒãåããŸãã

ã©ã®ã°ã«ãŒããäŒãé »åºŠã調ã¹ãŸãïŒ

人æ°ã§äžŠã¹æ¿ãïŒ

æã人æ°ã®ããåçãåãäžããŸãã

ãã¹ãŠãæ£ããããã§ãã
次ã¯çãã圢æããé¢æ°ã§ãïŒ

圌女ã¯Scalaã«ã€ããŠãéåžžã«èŠç¯çã§ãããäœãèµ·ãã£ãŠããã®ãå®å šã«ã¯æããã§ã¯ãããŸããã
æã人æ°ã®ããåçãšæ祚æ°ïŒ

ãããŠãæ祚æ°ãç§ãã¡ã®å®è¶³æ°ä»¥äžã§ãããããã®å®è¶³æ°ã«çããå Žåããã¹ãŠã倧äžå€«ã§ããç§ãã¡ã¯æžãçããŸããã æ£åžžã§ãããé²é³ãæåããå®è¶³æ°ãéãŸã£ããšèšããŸãã

äœãããããã®ã§ããããïŒ
äœããæ£ãããªãå Žåãéæ³ã®HTTP 409 ConflictãèšããŸãã

ä»ãç§ãã¡ã¯ããããã¹ãŠå°ç¡ãã«ããããšããŸãïŒ

ãããŠããçŽããŠãã ããã
ããã§ãéæ³ã®ã¹ã¯ãªãããããäžåºŠè©ŠããŸãã ããŒãn2ã«ãããã®ãèŠãŠã¿ãŸãããã

ä»ãããã¯æ²é»ããŠããããã®ãããªçæ³çãªããã»ã¹ã ããã»ãšãã©ã 圌女ãã¿ããããã®ãåŸ ã£ãŠããŸãã ããã¯ã¢ãŠãã
ããŒãn2ã«ãããã®ãèŠãŠã¿ãŸãããã

0ããããŸããããã§äœãèµ·ãã£ããèŠãŠã¿ãŸãããã

ããŒã«ã«èªã¿åãã5祚ã§0ã®èªã¿åãããããéåžžã¯ã¯ãŒã«ã§ãã çã®åæ£ã·ã¹ãã ã
ããã«äœããæžããŸãããïŒ

ããã«å°ããªãã®ãæžããŸããã 圌女ã¯ãµã€ã³ã¢ããããŸããïŒ

ããã§ã¯ããã®ãŠããããä»ã®ããŒãã«å±éããŸããã ããã«ã¯ã5祚ã®å®è¶³æ°ããããŸãã ãã¹ãŠãããŸãããããã§ãã
ãžã§ãã»ã³ã«æ»ããŸãã ã¯ã©ãŒã©ã ããããããã¯ã©ãŒã©ã ã«ã¯å€ãã®ãã¹ã¿ãŒãå«ããããšãã§ããŸãã äžè¬ã«ãå®è¶³æ°ã®ãããªãã®ã¯ãããŸããã
ã¯ã©ã€ã¢ã³ãã§æŸèæãåé€ããŸãïŒ

ãããŠããã¹ãŠãåèµ·åããŠãæŽåæ§ãã¹ããå床å®è¡ãããšãã«ã¯ã©ãŒã©ã ã«äœãèµ·ãããã確èªããŸãã ã³ãŒããæªçšããå Žåã¯ããã¹ãŠã®åã§ã
ããã¯æžãå§ããŸãããå€ãã®ãã¹ãŠãããã§èµ·ãã£ãŠããŸãã
æåŸã«ãããã¯ç§ãã¡ã«çå®ãåããŸããïŒ

ãã¹ãŠãããŸãããããã§ãã ããããç§ã¯ããã«ã€ããŠããªãã«èšã£ãããžã§ãã»ã³ã¯ãã¹ãã®ãã®ãããªç¢ºçè«çæ§è³ªã§ããã ãããã£ãŠãããã§ã¯5ç§ã§ã¯ãªã15ããªã³ã«ããŸãã

ãããŠãä¿¡é Œæ§ã®ããã«ããã®ãã¹ããå床å®è¡ããŠãã ããã 圌ãç§ãã¡ã«ä»ã®äœãããããããããããªããšããåžæã§ããã°ã®çºèŠã¯ç¢ºççã§ãã éåžžã«èå³æ·±ããªã©ãã¯ã¹ããããã»ã¹ã äºåºŠç®ã®è©Šã¿ã§ããããç§ãã¡ã®ããã«äœããèŠã€ããããšãæåŸ ããŸãããã ä»ãç§ãã¡ã¯å®è¶³æ°ãã©ããã§ããªã声ãäžããããšãæåŸ ããŠã圌女ãããé·ã15ç§é転ããŠããŸãã ããã»ãšãã©ã 誰ãã圌ãæããŠãããããšã楜ãã¿ã«ããŠããŸãã ããã¯ç§éã«å€±æãåããïŒ

äœãæåŸ ããŠããŸãããã ããã§äœã倱æããŸãããïŒ
ãããã®2ã€ã®é¢æ°ãç°åžžã«èŠãŠã¿ãŸãããã

ããã§äœããééã£ãŠããŸãã ãŸããScalaã§ãããããåžžã«äœããééã£ãŠããå¯èœæ§ããããŸãã 第äºã«ãããžãã¯ã«äœããã®åé¡ããããŸãã
ãã®äžé£ã®ãšã³ããªãèŠãŠã¿ãŸãããã

2ã€ã®ã¯ã©ã€ã¢ã³ãããããŸãã ããã§æäœAãèšé²ããããŒãããOKããšèšã£ãŠãæžãçããŠãããã«å®è¶³æ°ãåŸãŸããã ããããAãèšé²ããããšãã¯ã©ã€ã¢ã³ãã«äŒãããŸã§ãããã§ã¯ããé«éãªã¯ã©ã€ã¢ã³ããå®è¡ãããBãèšé²ããããšãã§ããŸãããããŒãã¯ã¯ã©ãŒã©ã ãäžç·ã«ãªã£ãããšã圌ã«äŒããŸããã ãã®ã¯ã©ã€ã¢ã³ãã«Bãèšé²ããããšãäŒããããã«Aãèšé²ãããšèšããŸãããããããäœããèªã¿ãŸãããããã§äœãèªã¿ãŸãããïŒ

æéãçãã®ã§ãããã§Bãèªãããšããå§ãããŸããããã¯ãã¹ãŠç·åœ¢åå¯èœã§ã¯ãããŸããã ç§ãã¡ã¯AãèªãŸãªããã°ãªããªãã£ãã®ã§ããã®ãããªç¶æ³ãããã¹ãã§ã¯ãªãã®ã§ã ã·ã¹ãã å ã®ç«¶åã解決ããå¿ èŠãããããã§ãã
ãããåé¿ããããã«ãRAFTãŸãã¯PAXOSã¢ã«ãŽãªãºã ã®äœæè ã§ãªãéããè»èŒªãåçºæããŠå®è¶³æ°ãèªåã§èšè¿°ããå¿ èŠã¯ãããŸããã ãã®ã¢ã«ãŽãªãºã ã¯ãç§ãã¡å šå¡ãéåžžã®åæ£ã·ã¹ãã ãäœæããã®ã«åœ¹ç«ã¡ãŸãã
PAXOSïŒRAFTã¯ã©ãŒã©ã ã¢ã«ãŽãªãºã ã¯ç¶æ ãã·ã³ãèšè¿°ããç¶æ ãã·ã³ã¯ç¶æ éãè¡ãæ¥ããŸãã ãããã®é·ç§»ã¯ãã¹ãŠèšé²ãããŸãã

ãããã®ã¢ã«ãŽãªãºã ã¯ããã®ãã°ã§æäœåæã®é åºãèšè¿°ããŸãã ãŠã£ã¶ãŒãã®éžæãæäœã®é©çšããã®ãžã£ãŒãã«ãããŒãã§ãœãŒãããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãããããã¹ãŠã®ããŒãã«åããžã£ãŒãã«ãããå Žåããã®ãžã£ãŒãã«ãæåããæåŸãŸã§å®è¡ããæéç¶æ ãã·ã³ã¯ããã¹ãŠã®ããŒãã§åãç¶æ ã«ãªããŸãã ããã¯ãšãŠãè¯ãããã§ãã
åé¡ã¯ãPAXOSãéåžžã«è€éã§ããããšã§ãã æ°åŠè ã®ããã«æ°åŠè ã«ãã£ãŠæžãããŠããŸãã ãããå®è£ ããããšãããšãPAXOSå®è£ ã®å¥ã®ããªãšãŒã·ã§ã³ããããŸããããã®äžã«ã¯å€ãã®ããªãšãŒã·ã§ã³ããããŸããããã®æ°ãèããã®ã¯æãããããšã§ãã ããã¯å®éã«ã¯äººã ã®ããã§ã¯ãªãããã§ãŒãºã«åå²ãããŠããŸããã ããã¯ãæ°åŠçæ§é ãèšè¿°ãã巚倧ãªãããã¯ãã¹ã§ãã ããèããªããã°ãªããŸããã PAXOSãšPAXOSå®è£ ã®ããããã¹ãŠã®ããªãšãŒã·ã§ã³ã¯ãæ¬æžã§èšè¿°ãããŠãããã®ããå®çšŒåã§äœ¿çšã§ããå®éã®å®è£ ã«åããŠã©ã®ããã«èãããã«ã€ããŠã®ãã®ã§ãã
ãããé²ãããã«ããã®ãããªRAFTã¢ã«ãŽãªãºã ããããŸãã ããã¯ããæ°ããããã¹ãŠã®åé¡ãèæ ®ããåªããã³ã³ã»ã³ãµã¹ã¢ã«ãŽãªãºã ãå®è£ ããããã«å¿ èŠãªãã¹ãŠã®ã¹ãããã説æããŠããŸãã ããã¯ãã¹ãŠã¯ãŒã«ã§ãã èšå€§ãªæ°ã®ç°ãªãå®è£ ããããŸãã

ããã¯Javaå°çšã§ãããPHPã§ããã¹ãŠã®èšèªã®å®è£ ããããšæããŸãããçç±ã¯æããã§ã¯ãããŸããã ãã®ã©ã€ãã©ãªã䜿çšããŠãèªåã§ãã¹ãããŠã¿ãŠãã ããã ãã¹ãŠãæ£ããRAFTãå®è£ ããŠããããã§ã¯ãããŸããã ç§ã¯akka-raftã䜿çšããããšããŸããããããã¯åäœããããã«èŠããŸãããäœããã®çç±ã§Jepsenãã¹ãã«åæ ŒããŸããã§ããã
åæã¢ã«ãŽãªãºã ã¯ãMongoDBã®3çªç®ã®ããŒãžã§ã³ã§ãRAFTãç»å Žããå Žæã§å€ã䜿çšãããŠããŸãã Cassandraã§ã¯ãPAXOSã¯äžçãã®ã§ãããå€ãã®ããŒã¿ããŒã¹ããã¥ãŒã·ã¹ãã ã§ã¯ãæçã«éãããšãé ããæ©ããã³ã³ã»ã³ãµã¹ã¢ã«ãŽãªãºã ãçŸããŸãã
äžè¬ã«ãåæ£ã·ã¹ãã ãäœæãããšããå€ãã®æ¹æ³ãããããšãç解ããå¿ èŠããããŸãããããã®ãã¹ãååšããããšãç¥ã£ãŠããå¿ èŠããããç¬èªã®ãã¹ããã1ã€å®è¡ããªãã§ãã ããããã¹ãéžæãããšãã¯ããã¹ãŠã®ãã¹ãæŽåæ§ãé 延ã垯åå¹ ãããã³ãã®ä»ã®ç°ãªããã®ã®éã®åŠ¥åç¹ã§ããããšãç解ããå¿ èŠããããŸãããã®åŠ¥åç¹ãç解ããããã察象åéã«é©çšã§ããã°ããã¹ãŠãåé¡ãããŸããã

ãããã®ã¢ãããŒãã®ã©ããåªããŠãããã¯èšããŸãããããã¯ãã¹ãŠããªã次第ã§ããããã¯ãã¹ãŠããªãã®ããžãã¹ã¿ã¹ã¯ã«äŸåããŸãããããã¯åãªãããŒã«ã§ãã
ã¬ããŒãïŒåæ£ã·ã¹ãã ã®ææãšå«æªæã