![](https://habrastorage.org/files/54d/429/2f5/54d4292f59864b5e9c85826d68d590ab.jpg)
Roman Grebennikovã¯ãåæ£ã·ã¹ãã ã®æ§ç¯ã®è€éãã«ã€ããŠèª¬æããŠããŸãã ããã¯ã Highload ++ 2016ã®ã¬ããŒãã§ãã
ã¿ãªãããããã«ã¡ã¯ãã°ã¬ãã³ãã³ãã»ããŒãã³ã§ãã Findifyã§åããŠããŸãã ãªã³ã©ã€ã³ã¹ãã¢ãæ€çŽ¢ããŸãã ããããäŒè©±ã¯ããã«ã€ããŠã§ã¯ãããŸããã Findifyã§ã¯ãåæ£ã·ã¹ãã ãæ±ã£ãŠããŸãã
åæ£ã·ã¹ãã ãšã¯äœã§ããïŒ
![](https://habrastorage.org/files/743/204/4d5/7432044d52b343d8bb921a1d2b7c720b.png)
ã¹ã©ã€ãããããææãšæãã¿ãã¯ITã§ããããããšã§ãããåæ£ã·ã¹ãã ã¯ããŸãäžè¬çã§ã¯ãªãããšã¯æããã§ãã ãŸããåæ£ã·ã¹ãã ãšã¯äœãããªããã®ãããªçã¿ãããã®ãââããªããã®ã¬ããŒããå¿ èŠãªã®ããç解ããããšããŸãã
ã©ããã§åäœããäœããã®ã¢ããªã±ãŒã·ã§ã³ããããšæ³åããŠãã ããã ãµãŒããŒåŽã§ãããšä»®å®ããŸãããéåžžã®ã¢ããªã±ãŒã·ã§ã³ãšã¯ç°ãªããäœããã®å éšç¶æ ãæã£ãŠããŸãã ããšãã°ãã²ãŒã ãããå Žåãå éšç¶æ ã¯å°ããªç·ãèµ°ãäžçãªã©ã§ãã é ããæ©ãããããªãã¯æé·ããããªãã®å éšç¶æ ã¯èšåŒµããå€åãã1ã€ã®ãµãŒããŒã«åãŸãã®ããããŸãã
![](https://habrastorage.org/files/040/b6c/ea4/040b6cea49e24d8990e59ba0ebfc813a.png)
ãã®åçã§ã¯ãããŸã®ããŒãããç©Žã«åŒã£ããã£ãŠããŸããã
æé·ãå§ããåããµãŒããŒã«åãŸããªããªã£ãå Žåã¯ãäœããããå¿ èŠããããŸãã
ããã€ãã®ãªãã·ã§ã³ããããŸãã
ãã匷åãªãµãŒããŒã䜿çšã§ããŸããããã§ã«æéã®ãµãŒããŒã§äœæ¥ããŠããå¯èœæ§ããããããè¡ãæ¢ãŸãã®ãã¹ã«ãªãå¯èœæ§ããããŸãã
æé©åããããšã¯ã§ããŸãããæ確ã«ããããšã¯ã§ããŸããããã¹ãŠãã¯ãªãã¯ããŠå éããã®ã¯2åå°é£ã§ãã
ããªãã¯éåžžã«äžå®å®ãªéã«ç«ã€ããšãã§ããŸã-åæ£ã·ã¹ãã ãäœæããŸãã
ãã®ãã©ãã¯ã¯äžå®å®ã§æãã§ãã
ä»æ¥ã話ãããããš
ãŸããåæ£ã·ã¹ãã ã«ã€ããŠèª¬æããŸãã å°ãã®æ©åšããããéèŠã§ããçç±ãå®å šæ§ãšã¯äœãããã®å®å šæ§ãçµã¿åãããæ¹æ³ãããŒã¿ã倱ã£ãããå°ãã ã倱ããªãåæ£ã·ã¹ãã ãèšèšããããã®ã¢ãããŒããåæ£ã·ã¹ãã ã確èªããããã®ããŒã«ãã¹ãŠãããŒã¿ã§åªããŠããããã»ãšãã©ãã¹ãŠãåªããŠããŸãã
1ã€ã®çè«ã¯éå±ãªã®ã§ããã®åé¡ãšå°ãã®ç·Žç¿ã«ã€ããŠå°ãã話ããŸãã ãã®ã©ãããããã䜿çšããŠãç¬èªã®å°èŠæš¡ã§ã·ã³ãã«ãªåæ£ããŒã¿ããŒã¹ãäœæããŸãã å®éã«ã¯ããŒã¿ããŒã¹ã§ã¯ãªããããŒå€ã¹ãã¬ãŒãžã§ã¯ãªããå€ã¹ãã¬ãŒãžããããŸãã 次ã«ã圌女ãããŒã¿ã2å以äžãç¹ã«ã²ã©ãããŒãºã§å€±ããªãããšã蚌æããããšããŸãã
次ã¯ãããããšãšãã«çããæ¹æ³ããšããå°ããªå²åŠã§ãã
åæ£ã·ã¹ãã ã¯ã©ããé ãã§æ©èœãããã®ã§ãããç§ãã¡ã¯ããã«åº§ã£ãŠãããšæããŸãã ãµãŒããŒã§ããå Žåãããã°ãäºãã«éä¿¡ããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã§ããå Žåããããäœããã®å éšç¶æ ãæã£ãŠããŸãã åéãšããã¹ãã¡ãã»ãŒãžãéä¿¡ããŠããå Žåãããªããåæ£ã·ã¹ãã ã®äžéšã§ãããäžè¬çãªæ¡ä»¶ããããããã«åæããããšããŠããŸãã äžè¬ã«ãåæ£ã·ã¹ãã ã¯ããã€ãã®éšåã§æ§æããããžã§ãŒã¯ã§ããããããã®éšåã¯äºãã«éä¿¡ããŸãã ããããé 延ãšãšã©ãŒã§éä¿¡ãããšããäºå®ã«ããããã¹ãŠãè€éã«ãªããŸãã ããã¯äºæ ãéåžžã«è€éã«ããŸãã
人çããã®å°ããªäŸã
ç§ãã¡ã¯ãã€ãŠã€ã³ã¿ãŒãããããµãŒãã£ã³ããWebã¹ãã€ããŒãæžããããããçš®é¡ã®ç°ãªãããŒãžãããŠã³ããŒãããŸããã 圌ã«ã¯é·ã課é¡ããããããã«ãã¹ãŠãç©ã¿äžããŸããã ãã¥ãŒã«ã¯ããã€ãã®åºæ¬çãªæäœããããŸãã ããã¯ããã¥ãŒããåãåºããã®ããã¥ãŒã«å ¥ãããã®ã§ãã ãŸãããã¥ãŒã«3çªç®ã®æäœããããŸããããã¥ãŒã«ãªããžã§ã¯ãããããã©ããã確èªããåããã®ã2åå ¥ããªãããã«ããŸãã
![](https://habrastorage.org/files/a7f/8a6/250/a7f8a625010d474590b59778c8df4020.png)
åé¡ã¯ãè¡ãéåžžã«å€§ãããã¡ã¢ãªã«åãŸããªãããšã§ããã ç§ãã¡ã¯èããŸããïŒäœããããªã«è€éãªã®ã§ããïŒ ç§ãã¡ã¯è³¢ããHighLoadã«è¡ããŸãã ãããã£ãŠããã®ãã¥ãŒã现ããåå²ããŠãå¥ã®ãµãŒããŒã«ããŒã«ããŠã¿ãŸãããã åãµãŒããŒã¯ç¬èªã®ãã¥ãŒãåŠçããŸãã ã¯ãããã¥ãŒããæåã®èŠçŽ ãååŸã§ããªããšããæå³ã§ãå°ãæŽåæ§ã倱ãããŸãããã»ãšãã©æåã®èŠçŽ ãååŸã§ããŸãã ã·ã£ãŒãã±ãŒã¹ãéžãã§ãããããåãåºããŠããã¹ãŠãé 調ã§ãã ã€ãŸãããã¥ãŒããååŸããå Žåãã»ãšãã©ãã¹ãŠãæ£åžžã§ãããããžãã¯ã¯ããå°ãè€éã«ãªã£ãŠããŸãã ãã¥ãŒã«å ¥ããã®ãç°¡åã§ããã©ã®ã·ã£ãŒããå ¥ãããã調ã¹ãŠå ¥ããŸãã ãã¥ãŒããããã©ããã確èªããŠãã ãããåé¡ããããŸããã ã¯ããããžãã¹ããžãã¯ã¯ããå°ãè€éã«ãªããŸããããå°ãªããšãéèŠã§ã¯ãªããªã£ãŠãããããã«ã¯è¡ãæµããŠããªãããã§ãã
ã©ã®ãããªåé¡ããããŸãã
äœããã®ãããã¯ãŒã¯ã€ã³ã¿ã©ã¯ã·ã§ã³ãè¿œå ããã³ã³ããŒãã³ããå¢ãããšãã·ã¹ãã ã®ä¿¡é Œæ§ãäœäžããããšãç解ããŠããŸãã ä¿¡é Œæ§ãäœããšãééããçºçããŸãã ãœãããŠã§ã¢ãšãââãŒããŠã§ã¢ã®å Žåããã¹ãŠãæ確ã§ãã éã䜿çšãããšããœãããŠã§ã¢ã䜿çšããŠãµãŒããŒãããæ°ãããã®ã«ããããšãã§ããŸã-éææ¥ã«é ã£ãŠå±éããªãã§ãã ããã ãããŠããããã¯ãŒã¯ã§ã¯ããã®ãããªããšã¯ããªãããããã©ããããã«é¢ä¿ãªãå£ããŸãã Microsoftã«ã¯ãWindows Azureã®ã¹ã€ããã®çš®é¡ã«åºã¥ãããããã¯ãŒã¯ããŒããŠã§ã¢é害統èšã«é¢ããåªããèšäºããããŸãã ããŒããã©ã³ãµãŒããŒãã幎éãéããŠããªã確çã¯çŽ17ïŒ ã§ãã ã€ãŸããæåŠããå Žåã«äœããã¹ãããæäŸããªããšãé ããæ©ããããªãã¯èª°ãè¯ã人ãäžžwillã¿ããã§ãããã
ãããã¯ãŒã¯ã§çºçããæãäžè¬çãªåé¡ã¯ãNETSPLITã§ãã ãããã¯ãŒã¯ãååã«åŽ©å£ãããšããããã¯çµ¶ãã厩å£ãããããã±ããæ倱ããããŸãã ãã®çµæãããã¯ãã©ãã©ã«ãªããããã©ãã©ã«ãªããŸããã§ããã
ãããã¯ãŒã¯ã«åé¡ãããå Žåãã·ã£ãŒãã£ã³ã°ã®ãã¥ãŒã¯ã©ããªããŸããïŒ
ãã¥ãŒããäœããååŸããå Žåããã¥ãŒããæåã®èŠçŽ ãååŸããæºåãã§ããŠããå Žåã¯ãå©çšå¯èœãªã·ã£ãŒãããååŸããããšãã§ããŸãã
ãã¥ãŒã«ã³ã³ããŒãã³ãããããã©ããã確èªããå¿ èŠãããå Žåã䜿çšã§ããªãã·ã£ãŒãã«ç§»åããå¿ èŠãããå Žåã¯äœãã§ããªããšããäºå®ã«ããããã¹ãŠãè€éã«ãªããŸãã
ãããããã¥ãŒã«äœããå ¥ããå¿ èŠããããšäºæ ã¯è€éã«ãªããã·ã£ãŒãã¯å©çšã§ããŸããã ãã®ç Žçã¯ã©ããé ãã«ããã®ã§ãããã眮ãå Žæã¯ãããŸããã ããã倱ãããã©ããã«å»¶æããŠããããäœãããã以å€ã«äœãæ®ã£ãŠããŸããã ã·ã¹ãã ã®èšèšã«å€±æãå ¥ããªãã£ãããã§ãã
![](https://habrastorage.org/files/fcb/6a7/d9d/fcb6a7d9d19d45768941b1bdba5ebfca.png)
ããããã¯åçã§æ²ããã 圌ã¯ã·ã¹ãã ã®èšèšã«å€±æãããªãã£ãããã§ãã ç§ãã¡ã¯è³¢ããéåžžã«è³¢ãããã®åé¡ã«å¯ŸåŠããããã®å€ãã®ç°ãªãéžæè¢ãèãåºããä»ã®åç¶ãããããšã¯ç¢ºãã§ãã
![](https://habrastorage.org/files/95d/da6/4a8/95dda64a80974b8f86c04072bfb2b424.png)
次ã«ãCAPå®çãã·ãŒã³ã«è¡šç€ºãããŸãã
CAPå®çã¯ãåæ£ã·ã¹ãã ã®èšèšã®åºç€ã§ãã ããã¯æ£åŒã«ã¯å®çã§ã¯ãªããçµéšåã§ããå®çã§ããã誰ããå®çãšåŒãã§ããŸãã
次ã®ããã«èãããŸãã åæ£ã·ã¹ãã ãäœæãã3ã€ã®æ±ããããŸãã ããã¯ãæŽåæ§ãå¯çšæ§ãããã³ãããã¯ãŒã¯ã®åé¡ã«å¯Ÿããèæ§ã§ãã ã¯ãžã©ã¯3å¹ããŸããã2å¹ãéžã¶ããšãã§ããŸãã 2ã€ã ãã§ãªããã»ãšãã©2ã€ã§ãã ããã«ã€ããŠã¯åŸã§èª¬æããŸãã
é åº-æŽåæ§ãã¢ã¯ã»ã·ããªãã£ãæç¶å¯èœæ§ãšã¯äœã§ããã ããã¯äžçš®ã®å®çã§ãããæ£åŒãªèª¬æãå¿ èŠã§ãã
åšåº«ç¶æ³
ããã¯å¯çšæ§ã§ãããç¶ç¶çãªå¯çšæ§ãæå³ããŸãã ã·ã¹ãã ãžã®åãªã¯ãšã¹ããçããŠããããŒããžã®ã·ã¹ãã ãžã®ãªã¯ãšã¹ãã¯ãã¹ãŠæ£åžžã«åŠçãããªããã°ãªããŸããã ã€ãŸãããªã¯ãšã¹ãã®äžéšãåŸã§å»¶æããããäœããããŸããããªãã£ãããã«é²é³ãåŽæ¹ã«å»¶æããå Žåãããã¯äžè²«æ§ã®ãªãå¯çšæ§ã§ãã ãã¹ãŠã®ããŒããèŠæ±ã«å¿çããªãå ŽåããŸãã¯ãã¹ãŠã®ããŒãããã¹ãŠã®èŠæ±ã«å¿çããªãå Žåãããã¯CAPå®çã®èŠ³ç¹ãããäžè²«æ§ã®ãªãå¯çšæ§ã§ãã
ãããããªãã«çãããïŒ
![](https://habrastorage.org/files/931/3e6/2ae/9313e62aecf04af1a8827d93dee9b8ab.png)
ãããå¯å€å¯çšæ§ã§ãã
èª å®ã
次ã®é ç®ã¯æŽåæ§ã§ãã æŽåæ§ã®èŠ³ç¹ãããåæ£ã·ã¹ãã ã«ã¯éåžžã«å€ãã®ç°ãªãã¿ã€ãã®æŽåæ§ããããšèšããŸãã
![](https://habrastorage.org/files/56e/244/0b0/56e2440b03ad413f97e55751165ae6d7.png)
ãããã®çŽ50ããããŸãã CAPå®çã«ããã®ã¯ã©ãã§ããïŒ
CAPå®çã¯æãå³æ Œãªã¿ã€ãã§ãã ç·åœ¢åå¯èœæ§ãåŒã³åºãããŸãã
æŽåæ§ãç·åœ¢åå¯èœæ§ã ãšãŠãã·ã³ãã«ã«èãããŸããããã®äžã«ã¯å€§ããªåœ±é¿ããããŸãã æäœAã®åŸã«æäœBãéå§ãããå ŽåãBã¯Aã®çµãããŸãã¯ããæ°ããç¶æ ã§ã·ã¹ãã ãèŠãã¯ãã§ãã ã€ãŸããAãå®äºãããšã次ã®æäœã§ã¯Aã®åã«äœãèµ·ãã£ãã®ããèŠãããšãã§ããŸããããã¹ãŠãè«ççã§ãè€éãªããšã¯äœããªãããã§ãã èšãæãããšããã·ãŒã±ã³ã·ã£ã«æäœã«ã¯äžè²«ããå±¥æŽããããŸããã
次ã«ããããã®ã¹ããŒãªãŒã«ã€ããŠè©³ãã説æããŸãã
![](https://habrastorage.org/files/52b/a7f/a5b/52ba7fa5b5c74123a017ed73f25e7129.png)
äœããã®ã¬ãžã¹ã¿ããããšæ³åããŠãã ããã ããã¯ç§ãã¡ãèªãããšãã§ãããã®ã§ããã以åã«ããã«æžãããã®ã ãã§ãã å€æ°ã®ããã®ãã äžã€ã®ç©Žã ãªãŒããŒãšã©ã€ã¿ãŒã¯1人ã§ãã ããã§ãã¹ãŠãèªã¿æžãããŸãããè€éãªããšã¯äœããããŸããã èªè ãšäœå®¶ãè€æ°ãããšããŠããããã»ã©è€éãªããšã¯ãããŸããã
![](https://habrastorage.org/files/a4b/d7d/d40/a4bd7dd4067b44ae8ee699f634ce3cd9.png)
ããããã¹ã©ã€ãããå®éã®äžçã«ç§»åãããšããã«ããããã¯ãŒã¯ã®é 延ãããããããã®å³ã¯å°ãç°ãªã£ãŠèŠããŸãã æ£ç¢ºãªææã¯ããããŸããã é²é³ã¯wãšw1ã®éã§è¡ãããæ£ç¢ºã«ã©ãã§èµ·ãã£ããã¯ããããŸããã 枬å®å€ãåãã§ãã ããšãã°ãæŽå²ã®èŠ³ç¹ããããã®ãããªåçŽãª3ã€ã®ã¹ããŒãªãŒãæžãçããããšãã§ããŸãã
![](https://habrastorage.org/files/ab5/19a/4f2/ab519a4f2ef248c8a77e7367a6735909.png)
æåã«aãèªãã§ãããbãæžããŠãããbãèªã¿ãŸããåçã®ããã«ã¯ã£ãããšã ååãšããŠãå¥ã®ã¹ããŒãªãŒãå¯èœã§ããaãèªãã ãšããaãããäžåºŠèªãã§ãããbãæžããŸããïŒåçã®ããã«ãã¹ãŠãããå ŽåïŒã
第äžè©±ã aãèªãã åŸãçªç¶bãèªãã§ããbãæžããå Žåãããã¯ãããšççŸããŸãã ç·åœ¢åå¯èœæ§ã®èŠ³ç¹ããããã®ãããªã¹ããŒãªãŒã¯ç·åœ¢åã§ããŸããããCAPå®çã§ã¯ãççŸããªãã¹ããŒãªãŒãå°ãªããšã1ã€ååšããå¿ èŠããããŸãã ãã®åŸãã·ã¹ãã ã¯ç·åœ¢åå¯èœã§ãã ããã€ããããããããŸããã
æç¶å¯èœæ§
æåŸã®é ç®ã¯ãæåPã§ããããŒãã£ã·ã§ã³ã®èš±å®¹ç¯å²ã¯ããã·ã¢èªã§ã¯ããããã¯ãŒã¯ã®åæ¢ã«å¯ŸããæµæããšèšããŸãã 次ã®ããã«ãªããŸãã
![](https://habrastorage.org/files/597/653/238/597653238cdc443291b8f56f123d1c0e.png)
æ°å°ã®ãµãŒããŒããããæåæ©ãæ©æããã«é転ãããããã®éã®é ç·ãåæãããšæ³åããŠãã ããã ã¯ã©ã¹ã¿ãŒãååã«ãã©ãã©ã«ãªã£ãå Žåã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ã®å®çã®èŠ³ç¹ãããç©äºãã©ã®ããã«æŽåæ§ãã¢ã¯ã»ã¹å¯èœæ§ãªã©ãåããŠããããç解ããããšããŸãã
äœãè©ŠããŠã¿ãŸãããã
![](https://habrastorage.org/files/fd4/77e/5d4/fd477e5d49f84a1eb9778e941277043a.png)
ããã«ã¯å°ããªã¯ãŒã¯ããŒã¹ããããŸãã®ã§ãã«ã©ãªã±ã§ãã£ãšæžããŸãã ä»ã®ãµãŒããŒãšé£æºããã®ã«åœ¹ç«ã€2ã€ã®æ©èœããããŸãã ã€ãŸããåæ£ã·ã¹ãã ã®ããŒãéã§éä¿¡ããæãç°¡åãªæ¹æ³ãšããŠHTTPã䜿çšããŸãã ã©ãããŠïŒ
2ã€ã®æ©èœããããŸãã ãã®ããŒãã«ãããã®ããŒã¿ãæžã蟌ã¿ãŸãïŒ
![](https://habrastorage.org/files/d2a/753/f44/d2a753f4460c4183be53d8368e489309.png)
ãã®ããŒãããããŒã¿ãèªã¿åããããããã¹ãŠéåæçã«å®è¡ããå¥ã®é¢æ°ïŒ
![](https://habrastorage.org/files/dcb/3c5/f84/dcb3c5f84aef4f68b54451c0f0dcd6a9.png)
ãŸããResponseã解æãã䟿å©ãªæ©èœã å¿çãåãåããæååãè¿ããŸãã
![](https://habrastorage.org/files/e68/af0/5b8/e68af05b83b04ab2b022510ba6e322e7.png)
è€éãªããšã¯äœããããŸããã
ãŸããåæ£ã·ã¹ãã ã®åçŽãªãµãŒããŒãäœæããŸãã
![](https://habrastorage.org/files/389/2c4/f58/3892c4f5881a4d719c1446843e319399.png)
ãŸããããã«å®¿é¡ããããŸãã ã·ã¹ãã å ã®ããŒã¿ãããã§ã¯å®éã®ããŒã¿ããŒã¹ã§ã¯ãªãã©ã€ããã¢ããããããçµ±èšå šäœã1ã€ã®å€æ°ã«æ ŒçŽããŸãã
![](https://habrastorage.org/files/cb8/dce/7c6/cb8dce7c6d6743bbb7005fea830065f1.png)
ãããã£ãŠãåçŽã«æååãä¿åããè€è£œãªã©ãè¡ããŸãã ããŸããŸãªäŸ¿å©ãªãžã§ãŒã¯ããããŸããããšãã°ãå€æ°ç°å¢HOSTNAMEããã®èªã¿åããè¿é£ã®ããŒããªã©ã§ãã
![](https://habrastorage.org/files/dd0/a5d/5d3/dd0a5d5d3d224de8a27a1a67e4dd898c.png)
ããã§ã¯ã2ã€ã®æ©èœã®ãã©ã°ãäœæããŸãã
![](https://habrastorage.org/files/24c/ea0/674/24cea0674cba464b80b8a9edea4a1e6a.png)
åæ£ã·ã¹ãã ããã®èªã¿åããšåæ£ã·ã¹ãã ããã®æžã蟌ã¿ã ãã¡ãããä»ã¯å®è£ ããŸããããå ã«é²ã¿ãŸãã
ããã§ãã©ã©ã€ã«ãèµ·åããŸãã
![](https://habrastorage.org/files/e73/e74/d2b/e73e74d2bd8e4ae2b0583c50d3b4edbd.png)
ãã¹ãŠãéåžžã«ç°¡åã§ãã ãŸã å®è£ ãããŠããªãã«ãŒãé¢æ°ããããŸãããããã¯äœããããŸãã 䜿çšããæ®ãã®ã«ãŒãã«ã€ããŠèª¬æããŸãã
![](https://habrastorage.org/files/c5f/8c4/319/c5f8c431962b4365ae783a3b14285fb9.png)
ããããã¹ãŠ8000çªç®ã®ããŒãã§ååŸããŸãã
![](https://habrastorage.org/files/592/473/c44/592473c44b444c55937f144b68c568b6.png)
ã©ã®ãããªã«ãŒãããããŸããïŒ 2ã€ã®ã«ãŒãããããŸãã æåã¯dbã§ãã
![](https://habrastorage.org/files/39e/240/3b9/39e2403b968e4eed9a233efea0eb668a.png)
ãã®ã«ãŒãã¯ãããŒã¿ããŒã¹ã¯ã©ã€ã¢ã³ãåãã§ãã ç§ãã¡ã¯åœŒãšååããŠããã圌女ã¯å éšã§äœããããŠããŸãã
ããã«çãããããŸã å®è£ ããŠããªãéæ³ã®é¢æ°readãåŒã³åºããŸãã
![](https://habrastorage.org/files/0c6/2a3/3e4/0c62a33e4490475aa6632fc84fabde1e.png)
ããã«ããŒã¿ãæçš¿ããå Žåãæžã蟌ã¿é¢æ°ãåŒã³åºããŸãã è€éãªããšã¯äœããªãããã§ãã
![](https://habrastorage.org/files/2ea/3bb/141/2ea3bb1412f3466eb7877dbf45d1a3fa.png)
ããã«å ããŠãããŒã«ã«ãšåŒã°ããå¥ã®ã«ãŒãããããŸãã
![](https://habrastorage.org/files/6ae/ae6/0b2/6aeae60b2779430abf5b9aebd6792c0c.png)
ããã¯ç§ãã¡ã®ããã§ã¯ãªããåæ£ã·ã¹ãã ã®ã¡ã³ããŒã§ããç°ãªãããŒããäºãã«éä¿¡ã§ããããã«äœãããŸããã ä»ã®äººã¯ããã«æžããããã®ãèªãããšãã§ããŸããã
ããã«å°éããããããžãã¯å€æ°å€ãèªã¿åããŸãã
![](https://habrastorage.org/files/944/aef/4e8/944aef4e85914dceb6c05fc77bced25f.png)
ããã«æçš¿ããå Žåãããã«æçš¿ããå 容ããã®å€æ°ã«æžã蟌ã¿ãŸãã
![](https://habrastorage.org/files/5d2/d93/fd2/5d2d93fd2cc5460fbcbde35b52a56e7b.png)
è€éãªããšã¯äœããããŸããã Scalaããå°ããªè³ãççºãããããããŸãããã倧äžå€«ã§ãã
ãµãŒããŒãäœæããŸããã MasterSlaveã®ããžãã¯ãäœæããŸãã 次ã«ãMasterSlaveãå®è£ ããå¥ã®ã¯ã©ã¹ãäœæããŸãã å®éãéåæMasterSlaveããã®èªã¿åãã¯ãããã«ããå€æ°ã«æžã蟌ãŸãããã®ã®ããŒã«ã«èªã¿åãã«ãããŸããã
![](https://habrastorage.org/files/38c/16e/61e/38c16e61ef264ba9ab07e140bc236275.png)
é²é³ã¯ããå°ãè€éã§ãã
![](https://habrastorage.org/files/5dc/45d/c4c/5dc45dc4c22a45db850070fa38d878f3.png)
ç§ãã¡ã¯æåã«èªåèªèº«ã«æçŽãæžããŸãã
![](https://habrastorage.org/files/730/762/873/73076287338e4f7394622e9a5423310a.png)
次ã«ãææããŠãããã¹ãŠã®ã¹ã¬ãŒãã調ã¹ãŠããã¹ãŠã®ã¹ã¬ãŒãã«æžã蟌ã¿ãŸãã
![](https://habrastorage.org/files/df4/b57/1fd/df4b571fd22341edbea1681f64c3ecc2.png)
ãã ãããã®é¢æ°ã«ã¯æ©èœããããFutureãè¿ããŸãã
![](https://habrastorage.org/files/16e/d28/886/16ed2888685a4f6aa0d1d5d01b048c75.png)
ããã§ã¯ãã¹ã¬ãŒããžã®ãã¹ãŠã®æžã蟌ã¿èŠæ±ãéåæã«ãŒãããã¯ã©ã€ã¢ã³ãã«æ¬¡ã®ããã«èšããŸããããã¹ãŠã¯åé¡ãããŸãããèšé²ããŸãããããã«å ã«é²ãããšãã§ããŸããã èœãšãç©Žã䌎ãå¯èœæ§ã®ããå žåçãªéåæã¬ããªã±ãŒã·ã§ã³ã¯ãä»ã§ã¯ãã¹ãŠèŠãããšãã§ããŸãã
ããããã¹ãŠã³ã³ãã€ã«ããŠã¿ãŸãããã ããã¯Scalaã§ãã圌女ã¯é·ãéãã£ãŠããŸãã äžè¬ã«ãã³ã³ãã€ã«ããå¿ èŠããããšãªããŒãµã«ããŸããã ã³ã³ãã€ã«æžã¿ã
次ã«ããããš
æžããŸãããããã¹ãŠãå®è¡ããå¿ èŠããããã©ãããããã1å°ãããŸãã ããããç§ãã¡ã¯åæ£ã·ã¹ãã ãäœã£ãŠããŸãã åäžããŒãã®åæ£ã·ã¹ãã ã¯ãå®å šã«åæ£ãããã·ã¹ãã ã§ã¯ãããŸããã ãããã£ãŠãDockerã䜿çšããŸãã
![](https://habrastorage.org/files/a68/60a/3e9/a6860a3e939449aa96a3364b24874c56.png)
Dockerã¯ã¢ããªã±ãŒã·ã§ã³ãã³ã³ããåããããã®ã·ã¹ãã ã§ããããããã誰ããèããããšãããã§ãããã ãã¹ãŠãæ¬çªç°å¢ã§äœ¿çšãããŠãããšã¯éããŸããã 䜿çšããŠã¿ãŸãã ããã¯ããã¹ãŠãç°¡çŽ åããããã®è»œãä»®æ³åã·ã¹ãã ã§ãã Dockerã«ã¯è±å¯ãªãšã³ã·ã¹ãã ãããããã®ãšã³ã·ã¹ãã ã®ãã¹ãŠã䜿çšããããã§ã¯ãããŸããã ãã ãã1ã€ã®ã³ã³ãããŒã ãã§ãªããã°ã«ãŒããäžåºŠã«èµ·åããå¿ èŠããããããDocker Composeã䜿çšããŠããããäžåºŠã«ããŒã«ããã¯ããŸãã
åçŽãªDockerfileããããŸãããããã¯éåžžã«åçŽã§ã¯ãããŸããã
![](https://habrastorage.org/files/af5/ada/807/af5ada80769f4bc8bb228730074940bc.png)
次ã«ãJavaãã€ã³ã¹ããŒã«ããDockerfileãSSHãããã·ã¥ããŸãã ãªãå¿ èŠãªã®ãå°ããªãã§ãã ããã ã¢ããªã±ãŒã·ã§ã³ããã¹ãŠãèµ·åããŸãã
ãããŠã5ã€ã®ããŒããã¹ãŠãèšè¿°ããComposeãã¡ã€ã«ããããŸãã
![](https://habrastorage.org/files/bac/3ba/4d3/bac3ba4d376845b98eeaaee127c81c2a.png)
ããã«ããã€ãã®ããŒãã®èª¬æããããŸãã ä»ããçµ±åãè©Šã¿ãŸãã ãã®ããã®ã¹ã¯ãªããããããŸãã
![](https://habrastorage.org/files/73d/b9a/ddf/73db9addf1044149a75ca4128ce548c0.png)
å±éäžã«è²ãå€æŽããŸãã
![](https://habrastorage.org/files/602/5a9/bee/6025a9bee59c47e58524fb52a1fd9f8f.png)
ããã§ãDockerã³ã³ãããäœæãããŸãã ããã§èµ·åããŸãã 5ã€ã®ããŒããã¹ãŠãèµ·åããŸããã
![](https://habrastorage.org/files/290/f7b/79c/290f7b79c2b14e6dadb8417349790d7d.png)
ä»ãç§ãã¡ã¯åæ£ã·ã¹ãã ãçããŠããããšãæ»æããã®ãåŸ ã£ãŠããŸãã å°ãæéãããããŸããããã¯Javaã§ãã MasterSlaveãèµ·åãããšèšã£ãŠããŸãã
![](https://habrastorage.org/files/ffb/b95/0e7/ffbb950e72f94e26ad959e7bde65ba30.png)
ããã«å ããŠããã®åæ£ã·ã¹ãã ããäœããèªã¿åãããšãã§ããã·ã³ãã«ãªã¹ã¯ãªããããã¹ãŠãããŸãã
ããŒãn1ã«ãããã®ãèŠãŠã¿ãŸãããã
![](https://habrastorage.org/files/4a7/921/cdc/4a7921cdcc3a4e02b999f43404718c59.png)
ããã«0ãæžã蟌ãŸããŸãã
誰ããã¹ã¿ãŒã§ããã誰ãã¹ã¬ãŒãã§ãããã«å¯Ÿããä¿è·ããªãã£ãã®ã§ãn1ã¯åžžã«ãã¹ã¿ãŒã§ãããšãã信念ãæã£ãŠããŸãã ãã¹ãŠãåçŽåããããã«ãåžžã«æžã蟌ã¿ãŸãã
ãã®ãã¹ã¿ãŒã§äœããæžããŠã¿ãŸãããã
n1 1ã眮ã
ãŠããããããã«èšé²ãããŸããã ããã§ãã°ã«ãããã®ãèŠãŠã¿ãŸãããã
![](https://habrastorage.org/files/ef8/3f1/92c/ef83f192cffc430ea86cb7b162e05ce1.png)
ããã«ã¬ã³ãŒãã«å°ããªãã®ãããããã¹ãŠã®ã¹ã¬ãŒãã«å¯ŸããŠãã®ã¬ã³ãŒããå±éããŸãããããã«èšé²ãããŸããã
![](https://habrastorage.org/files/681/b18/347/681b1834780f4e9290e5f2af583b621d.png)
ããŒãn3ã«ç§»åããŠãããã«ãããã®ã確èªããããšãã§ããŸãã
![](https://habrastorage.org/files/833/ae5/491/833ae5491d914a31a2d2a87eb25b618e.png)
æžãçããã·ã³ã°ã«ããããŸãã
ç§ãã¡ã¯ããŒãã¹ãåŸãããšãã§ããŸããç§ãã¡ã¯èã®äžã«åæ£ã·ã¹ãã ãæžããŸãããããã¯ããŸããããŸãã ããããããã¯ããŸããããŸããã
ä»ãç§ãã¡ã¯åœŒå¥³ãç æ°ã«ããããšããŸãã 圌女ãç æ°ã«ããããã«ãJepsenãšåŒã°ãããã®ãããªãã¬ãŒã ã¯ãŒã¯ã䜿çšããŸãã Jepsenã¯ãåæ£ã·ã¹ãã ããã¹ãããããã®æåã®ãã¬ãŒã ã¯ãŒã¯ã§ããã1ã€åŸ®åŠãªç¹ããããŸããClojureã§æžãããŠããŸãã Clojureã¯ç¥ããªãLispã§ãã ããã¯ãæ¢åã®ããŒã¿ããŒã¹ããã¥ãŒãªã©ã®æ¢è£œã®ãã¹ãã®ã»ããã§ãã ãã€ã§ãèªåã§æžãããšãã§ããŸããããã«ããšããŸããã¯ãªãã®ãé€ãããããããã¹ãŠã®ããŒã¿ããŒã¹ã§ãèŠã€ãã£ãåé¡ã«é¢ããèšäºããããããããŸãããããããZooKeeperãšRethinkDBã ãããããååŸã§ããŸããã§ããã圌ãã¯ãããæã«å ¥ããããä»ã®äººãšæ¯ã¹ãŠå°ãã ããããªãã¯ããã«ã€ããŠèªãããšãã§ããŸãã
Jepsenã®ä»çµã¿
ãããã¯ãŒã¯ãšã©ãŒãã·ãã¥ã¬ãŒãããåæ£ã·ã¹ãã ã§ã©ã³ãã æäœãçæããŸãã 次ã«ããããã®æäœãåæ£ã·ã¹ãã ãšåç §åäœããã®åæ£ã·ã¹ãã ã®ã¢ãã«ã«é©çšãããæ¹æ³ãããã³ããã«åé¡ããããã©ããã調ã¹ãŸãã
Jepsenãåé¡ãèŠã€ããå ŽåïŒ
![](https://habrastorage.org/files/4fd/9fe/77f/4fd9fe77f08d419fb7abbdf15cc8145d.png)
ããã§åè«ãèšãããã£ãã
Jepsenãäœããã®åé¡ãçºèŠããå Žåã圌ã¯ããªãã®åæ£ã·ã¹ãã ã®åäŸãèŠã€ããŸããã ãããããžã§ãã»ã³ãã¹ãã¯æ¬è³ªçã«ç¢ºçè«çã§ãããããäœãèŠã€ãããªãã£ãå Žåãååã«èŠæ ãããããªãã£ãå¯èœæ§ããããŸãã ãããã圌ãããæ€çŽ¢ããã°ã圌ã¯äœããèŠã€ããã§ãããã ããšãã°ãRethinkDBã®å ŽåããªãªãŒã¹ã®çŽ2é±éåã«ãã¹ããå®è¡ããå€å°ãªããšãæ©èœããããšã蚌æããŸããã
ããã§ã¯2é±éãã¹ããå®è¡ããŸããã5ç§ããããŸãã Jepsenãã¹ãã®ã¿ã¹ã¯ã¯ããã¹ã¿ãŒãžã®æžã蟌ã¿ãMasterSlaveããã®èªã¿åããç©äºã®æŽåæ§ãšããã¹ã¿ãŒ/ã¹ã¬ãŒãè€è£œãæ£ããèšè¿°ãããã©ãããç解ããããšã§ãã
Jepsenãã¹ãã¯ãããã€ãã®éèŠãªéšåã§æ§æãããŠããŸãã
![](https://habrastorage.org/files/98e/97a/44d/98e97a44d91e473fb9e67a7eb527f8fa.png)
åæ£ã·ã¹ãã ã«é©çšããã©ã³ãã æäœãçæãããžã§ãã¬ãŒã¿ãŒããããŸãã åæ£ã·ã¹ãã èªäœãããããèµ·åããŸããã Dockerã§ããå®éã®éã®ãµãŒããŒã§ãããŸããŸããã ãŸããåæ£ã·ã¹ãã ã®åäœãèšè¿°ããåç §ã¢ãã«ããããŸãã ç§ãã¡ã®å Žåãããã¯ã¬ãžã¹ã¿ã§ãããããã«æžãããã®ã§ãããããèªãå¿ èŠããããŸãã è€éãªããšã¯äœããããŸããã Jepsenã«ã¯ããããå Žåã«èšå€§ãªæ°ã®ã¢ãã«ããããŸãããã¬ãžã¹ã¿ãšCheckerã®ã¿ã䜿çšããŸããããã¯ãã¢ãã«ãšã®å¯Ÿå¿ã«ã€ããŠåæ£ã·ã¹ãã ã«é©çšãããæäœã®å±¥æŽã®å¯Ÿå¿ããã§ãã¯ããŸãã
åé¡ã¯ãJepsenãClojureã§æžãããŠããããã¹ããClojureã§æžãããå¿ èŠããããšããããšã§ãã ããããä»ã®äœãã«æžãããšãã§ããã°ãããã¯ã¯ãŒã«ã ããã ãããããã©ãã«ããã©ãã«ã Clojureã¯ãåžžã«ãªã¹ããããèšèªã§ãã ããšãã°ã2ã€ã®æ°åãè¿œå ããå Žåã¯ãæåã®èŠçŽ ãè¿œå ããããªã¹ããäœæãã次ã«2ã€ã®æ°åãè¿œå ããŠãæåŸã«3ã€ã®æ°åãååŸããŸãã
![](https://habrastorage.org/files/e18/f2d/e50/e18f2de50753400a9ee4a6469bc25620.png)
åŒã³åºãé¢æ°ãdefnãšããå¥ã®é¢æ°ã«èšå®ããæåã®åŒæ°ã¯é¢æ°ã®ååãåŒæ°ã¯é¢æ°ãé¢æ°ã®æ¬äœã®é ã«ãªããšèšãããšãã§ããŸãã 圌女ããã®ããã«åŒã¶ãšã圌女ã¯ããããŒããã€ããŒãïŒããšèšãã§ãããã ããã¯åå¿è åãã®ãã®ãããªClojureã³ãŒã¹ã§ãã
ãã®Clojureã³ãŒã¹ã¯æ¬¡ã®ããã«èŠãããšèšããŸãã
![](https://habrastorage.org/files/f70/936/5d9/f709365d9ec048ae91e647e4a76531c6.png)
ãããŠä»ãããã¯ééããªãå³åŽã®ãã®ã«ãªããŸãã å®éãã¯ãã ãã ããClojureã¯å°ãå ·äœçã§ããããããã¬ãŒã ã§äœãèµ·ããããå°ãªããšã倧ãŸãã«ç解ããã°ååã§ãã
ã ããããžã§ãã»ã³ã æåã«ããã¹ãã«ã€ããŠèª¬æããŸãã
![](https://habrastorage.org/files/2ab/9e9/618/2ab9e96188074f89977b74a7ad138db6.png)
ãã®ãããã¯ãã¹ã¯ãå·Šããå³ãäžããäžã«èªãã®ã¯æ£ãããããŸãããããã¯ãLispã§ãããããå åŽãšå€åŽããèªãæ¹ãè¯ãããã§ãã ãã¹ãã®èª¬æãè¿ãé¢æ°ããããŸããããŸã å®è£ ããŠããŸããã ãã®ãã¹ããå®è¡ããå¥ã®é¢æ°ã«ãã®èª¬æãè¿œå ãããšããã£ã¬ã¯ããªãè¿ãããŸãã ãã®ãã£ã¬ã¯ããªã§ãçµæããŒã䜿çšããŠäœããéžæãããã®ãã£ã¬ã¯ããªã«validãšããããŒããããã©ããã確èªããŸãã ååšããå Žåããã¹ãã«åæ ŒããŸãã Clojureã¯ãã®ããã«èªã¿ãŸãã æåã«è³ãç Žå£ããå¿ èŠããããŸããããã¹ãŠãæããã«ãªããŸãã
次ã«ããã¹ãã«ã€ããŠèª¬æããŸãã
![](https://habrastorage.org/files/7ed/8d7/63c/7ed8d763c52f48058c5109d221187b0b.png)
ãŸãããã¹ãã¯åŒæ°ã®ãªãé¢æ°ã§ãã 圌女ã¯å¥ã®ãã¹ããæ¡åŒµããŸããããã¹ãã¯ãŸã£ããè¡ããããããã€ãã®ãã¹ããè¿œå ãããŸãã ããšãã°ãJepsenã¯HTTPã«ã€ããŠäœãç¥ããªããããããŒã¿ããŒã¹ãšã®éä¿¡ã«äœ¿çšããã¯ã©ã€ã¢ã³ãã®ååã ãã§ãã«ãŒããŸã äœæããŠããŸããããäœæããŸãã åæ£ã·ã¹ãã ã®æšæºãšããŠäœ¿çšããã¢ãã«ã ãžã§ãã¬ãŒã¿ãŒã¯ãã©ã³ãã ãªèªã¿åãããã³æžã蟌ã¿æäœãè¡ãããããã®éã«10ããªç§ã®é 延ãæ¿å ¥ããã¯ã©ã€ã¢ã³ãã§ããããéå§ãã5ç§éãã¹ãŠéå§ããŸãã ããã«ãSSHã§ã®äœæ¥ã®ããã«ãããŸãã
次ã«ãèªã¿åããšæžã蟌ã¿ã«ã€ããŠèª¬æããŸãã ããããæ©èœã§ãã ããã¯Clojureã§ããããã¹ãŠã®æ©èœããããä»ã«ã¯äœããããŸããã
![](https://habrastorage.org/files/0ff/c95/0ea/0ffc950eaaf040f7961c4dd50565dea3.png)
ã¯ã©ã€ã¢ã³ãã«ã€ããŠã説æããŸãããæåã¯HTTPã¯ã©ã€ã¢ã³ãã§ãã
![](https://habrastorage.org/files/eaa/bd3/8cd/eaabd38cda924d14b858c7592dd4a2b4.png)
ããã«ã¯ãHTTPãžã®æžã蟌ã¿ãHTTPã§ã®èªã¿åãã®ããã®ããã€ãã®é¢æ°ããããŸãã ããããã¹ãŠè¡ãããæ¹æ³ã«ã€ããŠã¯èª¬æããŸããã ãããå®éã«ã¯ã200ãè¿ãããå Žåããã¹ãŠã¯åé¡ãããŸããã 409ãHTTP 409 ConflictïŒéåžžã«äŸ¿å©ãªã³ãŒãïŒã§ããå Žåãäœããééã£ãŠããŸãã ããå°ã䜿çšããŸãã
ããã«ãã¯ã©ã€ã¢ã³ãã«ã€ããŠèª¬æããŸãã
![](https://habrastorage.org/files/d33/01c/4b3/d3301c4b32c44bd48ee2d76bc9bf7a0f.png)
ãŸããããããèšè¿°ãããã¹ããååŸããã¯ã©ã€ã¢ã³ããšåŒã°ããã€ã³ã¿ãŒãã§ãŒã¹ãæ¡åŒµããé¢æ°ã 3ã€ã®æ©èœããããŸãã èªåèªèº«ãè¿ãã»ããã¢ããã ã¯ã©ã€ã¢ã³ããåé€ããå¿ èŠã®ãªãå解ãå éšã«ã¯äœããããŸããã ãã®ãã¹ãã«è»¢éããæäœãé©çšããinvokeã ããã§ã¯5ç§ã®ã¿ã€ã ã¢ãŠãããããŸããã€ãŸãã5ç§ä»¥å ã«åæ£ã·ã¹ãã ãæ©èœããªãã£ãå Žåãæ©èœããªããšèšããŸãã ãã®èªã¿åããããå ŽåãHTTPèªã¿åããå®è¡ããGETèŠæ±ãè¡ããŸãã ã¬ã³ãŒãã®å ŽåãHTTPæžã蟌ã¿ãã€ãŸãPOSTãªã¯ãšã¹ããè¡ããŸãã MasterSlaveããããMasterã¯1ã€ãããªããããããã§å°ãå€æŽããŸããMasterã§åžžã«æžã蟌ã¿ãŸãã
![](https://habrastorage.org/files/290/021/941/2900219413e046c59856014efeeb9dd2.png)
æåŸã«æ®ã£ãã¢ã€ãã ã¯Checkerã§ãã Jepsenå ã§ç·åœ¢åå¯èœãã§ãã«ãŒãšåŒã°ãããã®ã䜿çšã§ããŸãããèžãã ã®ã§äœ¿çšããŸããã
![](https://habrastorage.org/files/631/e4a/f0d/631e4af0ddbf46a3bbff28f931a3a435.png)
ã©ããããããã®ãåãããŸããã ãããã£ãŠãç§ã¯èªåèªèº«ãæžããŸããããèœã¡ãŸããã å®éã圌ã¯åããã®ã䜿çšããŸãããæçµçã«ã¯åœŒãéåžžã¯èœã¡ãçŸããç»åãçæããããšããŸããã
![](https://habrastorage.org/files/555/913/e99/555913e99ea44f4792876786b763cbe2.png)
ã¡ã¬ãã¹ããäœæããŸãããå®è¡ããŠã¿ãŸãããã
![](https://habrastorage.org/files/5c4/fd0/fd2/5c4fd0fd250a4af2956cebde886d28a3.png)
åæ£ã·ã¹ãã ããã¹ãããããéå§ããã®ãåŸ ã£ãŠããŸãã
leinã¯Clojureã®ãã®ãããªãã«ãã·ã¹ãã ã§ãã
ããŸããŸãªãã¹ããããŸããŸãªèªã¿åã/æžã蟌ã¿ãæžã蟌ã¿å§ãããã°ã«ãéæ³ãçºçããŸã-èªã¿åã/æžã蟌ã¿ãã¬ããªã±ãŒã·ã§ã³ã æåŸã«ãããã¯ã倱æããåããŸãã ããã§äœããå¿ããŸããã ç·åœ¢åã§ããªãã¹ããŒãªãŒã®ãªã¹ãããããŸãããããã§ã¯æããã«æ··ä¹±ããŠããŸãã
ãã®ç¶æ³ãèŠãŠã¿ãŸãããã
![](https://habrastorage.org/files/e4b/8d2/3ec/e4b8d23ece054214a02f8f32abfd3c8d.png)
ãã¹ã¿ãŒ/ã¹ã¬ãŒãã§éåæã¬ããªã±ãŒã·ã§ã³ãè¡ããšãã¹ã¬ãŒãã¯åžžã«é ããããšã誰ããç¥ã£ãŠããŸãã ç·åœ¢åå¯èœæ§ã®èŠ³ç¹ããã¹ã¬ãŒãé 延ãšã¯ã©ãããæå³ã§ããïŒ ã€ãŸããããã§é²é³ãè¡ããããã°ããããŠããé²é³ãè€è£œãããããã§èªã¿åããè¡ãããŸããã ãã®çµæãèªãã¹ãã§ã¯ãªããã®ãèªã¿ãŸããã Bãèªãã§ãAãèªãŸãªããã°ãªããŸããã§ãããã€ãŸããæäœãçµäºãããšæãããæéã«æ»ããããããäœãèªãã§ããã®ããèªã¿ãŸããã ãªããªãããã¹ãŠã®ã¹ã¬ãŒãããŸã ã¬ããªã±ãŒã·ã§ã³ãããŒã«è¿œãã€ããŠããªãããã§ãã ãããã£ãŠãã¹ã¬ãŒãã¯åžžã«ãã¹ã¿ãŒããé ããŸãã
ããªãã¯ç¢ºãã«ããã¯å¹Œçšåã ãšèšãã§ãããã倧人ã®æ¹æ³ã§ãã¹ãŠãããŸãããã åæã¬ããªã±ãŒã·ã§ã³ãæžããŸããããç§ãã¡ã¯è³¢ãã§ãã éåæãšã»ãŒåãã§ãåæã®ã¿ã§ãã
![](https://habrastorage.org/files/05d/016/b88/05d016b884ca4331b14ad0e6de2bcdfc.png)
åæ£ã·ã¹ãã ã«æžã蟌ã1ã€ã®é¢æ°ãåå®çŸ©ããŸãã 圌女ã¯ä»ã§ã¯è³¢ãããæ¹ã§ãããããŠããŸãã圌女ã¯ãã¹ãŠã®å¥Žé·ããOKããšèšãç¬éãåŸ ã¡ãŸãã ãã®æã ã圌女ã¯ããã¹ãŠãèšé²ããããšèšããŸãã 奎é·ã®äžäººã圌ãã倧äžå€«ãã§ã¯ãªããšèšã£ãããããã¯ãã©ãã«ãèµ·ãã£ãŠãç§ãã¡ã¯ããã«è¡ããªãããšãæå³ããŸãã
次ã«ããã®ãã¹ãŠã®ãã©ã©ã€ã«ãå®è¡ããŠã¿ãŠãã ããã ãããããããªãã¯ä»ãäœããã®ã»ããã¢ãããããããã¹ãŠãããã»ã©è¯ããã®ã§ã¯ãªãããšãæããã§ãããã 25åãçµéãããšãç·ããã¹ãŠãããŠã³ããŒãããŠæ©èœããã®ã§ãã³ã³ãã€ã«ããããŸã§åŸ ã¡ãŸãã ä»ã§ã¯ãã¹ãŠãåéããŸããåçãªèšèªã§ã¯ãªãããã¹ãŠãããã«æ©èœããå Žåãããã§ã¯ãã¹ãŠãé·ããŠèŠçã§ãã ãããã€ãããŸã§ãã¹ãŠãæžãçŽãããæžãããèããæéããããŸãã
ãã¹ã¿ãŒ/ã¹ã¬ãŒãã®åæãéå§ãããŸããã ãã¹ãŠãããŸãããããšãæåŸ ããŠãJepsenãã¹ããããäžåºŠå®è¡ããŸãããã åæã¬ããªã±ãŒã·ã§ã³ãå®è¡ããŸããããäœãããŸããããªãã£ãã®ã§ãããã ããã¯å§ãŸããæžãå§ããŸããããããã»ã©éãã¯ãããŸããã 圌ã¯åã³æžããŠãåã³èªãã§ãããã§äœããèµ·ãã£ãŠããã ãã®çµæãåã³äœãæªãããšãèµ·ãããŸãã
![](https://habrastorage.org/files/bd1/483/fd1/bd1483fd12ad4395ae3fe44f2db58a5e.png)
ç§ãã¡ã¯åã³å€±æããŸãããããã¯ãç·åœ¢åå¯èœæ§ã®ç¹ã§ç·åœ¢åã§ããªãèšå€§ãªæ°ã®ç©èªãç§ãã¡ã«äžããŸããã
åé¡ã¯äœã§ããïŒ
ç§ãã¡ã¯ãã¹ãŠãæ£ãããã£ããšæã£ãã ã©ããããããããã¹ãŠãã²ã©ãå€æããŸããã
![](https://habrastorage.org/files/ced/20a/a29/ced20aa298bb4b758ddc5e6a9164a7b0.png)
åçã¯ããã¹ãŠã以åããããã«æªåããŠããããšã瀺ããŠããŸãã
ãã®ç¶æ³ãæ³åããŠãã ããã
![](https://habrastorage.org/files/8bb/66e/c48/8bb66ec4866548e6a5555e83653f5504.png)
ãã¹ã¿ãŒããŒã1ããããŸããæäœBãšCãèšé²ããããã«Cããããããã«è€è£œããŸããã HTTPãä»ããŠãã¹ãŠãéåæã«å®è¡ããŸãããããã¯ééã£ãŠããå¯èœæ§ããããŸãã 泚2ã§ã¯ãç¹å®ã®é åºã§ãµã€ã³ã¢ããããŸããã ããããããŒã3ã§ã¯ããããã¯å°ç¡ãã«ãªããŸãããã誀ã£ãŠããããéä¿¡ããŸããã éèªãªã©ãããããšãå¿ããŠããŸããã ãããã¯é©çšãããã¹ãé åºã§é©çšãããŸããã§ããã ãã®çµæãCã®ä»£ããã«BãåŸãããŸããããããã§ã¯ãããäœã§ãããæ確ã§ã¯ãããŸããã BãŸãã¯Cã®ãããããCãèªãå¿ èŠããããŸãããããã£ãŠãããã¯ãã®ãããªçœå®³ã§ãã
ãã¹ã¿ãŒ/ã¹ã¬ãŒãCAPã®å®çãšæŽåæ§ã®èŠ³ç¹ãããè€è£œã¯åæè€è£œãã©ããã«äŸåããŸãã éåæã®å Žåãã¹ã¬ãŒããé ããããç·åœ¢åãäžå¯èœã§ããããšã¯æããã§ãã åæã®èŠ³ç¹ãããããã¯ããªããã©ãã ãæ²ãã£ãŠããããã¹ãŠãæ£ããå®è£ ãããã«äŸåããŸãã éããããã°ãããã ç§ãšåããªããããããæªãã ã¢ã¯ã»ã·ããªãã£ã®èŠ³ç¹ããèŠããšãåé¡ã¯ç§ãã¡ã®å¥Žé·ã§ã¯æžãããšãã§ãããèªãããšããã§ããªããšããããšã§ãã é«å¯çšæ§ã®èŠ³ç¹ããã¯ãç§ãã¡ã«å¯ãããããã¹ãŠã®èŠæ±ãæºããããšã¯ã§ããŸããã èªãããšããã§ããŸããã ãããã£ãŠãå©çšã§ããŸããã
ãããã£ãŠãCAPå®çã¯éåžžã«å ·äœçãªãã®ã§ãã å®çŸ©ã¯å³å¯ã§ãããå®éã®ããŒã¿ããŒã¹ã®å 容ãåžžã«èª¬æãããšã¯éããªããããããŒã¿ããŒã¹ã«éåžžã«æ éã«é©çšããå¿ èŠããããŸãã 1ã€ã®ã¬ãžã¹ã¿ãèšè¿°ããããã ãã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³ãšä»ã®æäœãåãã¬ãžã¹ã¿ãŒã«æžããããšãã§ããã°ãããã¯è¯ãããšã§ãã ããããéåžžããã¯é£ããããäžå¯èœã§ãã å¯çšæ§ããã¯ãã®ãããªå¯çšæ§ã§ãããåŸ ã¡æéã¯äœãèšããŸããã åæ£ã·ã¹ãã ã®äžè²«æ§ãéåžžã«åªããŠããããèŠæ±ã«1æ¥ã«1åå¿çããå Žåãæ¬çªç°å¢ã§äœ¿çšããããšãéåžžã«å°é£ã§ãã CAPå®çã§ã¯èæ ®ãããªãããŸããŸãªå®çšçãªåŽé¢ããããŸãã åãããŒãã£ã·ã§ã³ãã±ããã®æ倱ãã€ãŸããäžå®å®ãªãããã¯ãŒã¯ããŒãã£ã·ã§ã³ããããå€æ°ãããå Žåã5ç§ããšã«ããã€ãã®ãã±ããã倱ãããŸãã
ãããã£ãŠãå人çãªçµéšã«ãããšã人ã ãè匱ãªå¿ã§åæ£ã·ã¹ãã ãæžãå§ãããšãé ããæ©ããç¥èãçµæ¶åãããã¹ãŠã®æŸèæãæ°ãããã³ããåããããã¯æ²ç·åŸæã³ã³ã»ã³ãµã¹ã¢ã«ãŽãªãºã ã®ããã«èŠããŸãã ãã¹ãŠã®ããŒããäžè¬çãªç¶æ ã«åæããããšãããããã®ã¢ã«ãŽãªãºã ã極端ãªå Žåã«ããŸããã¹ããããŠããªãå Žåããããã¯ãŸãã§ããããªããããå¿é ããŸãã ããããäžè¬çãªå Žåã®ã³ã³ã»ã³ãµã¹ã¯ãé害ãçºçããå Žåã«äœããã®åœ¢ã§é害ãä¹ãåãå¯èœæ§ããããšããäžè¬çãªæ¡ä»¶ã«é¢ããåæã§ãã
ãã®ãããªäŸïŒ
![](https://habrastorage.org/files/b8a/886/617/b8a886617ae044e4b4e7ca0259761bf1.png)
åæ£ã·ã¹ãã ã«æžã蟌ãã¯ã©ã€ã¢ã³ãããããããã«ã¯7ã€ã®ããŒãããããŸãã ããã§æ祚ããŠããŸãã ã»ãšãã©ã®ããŒãããã¹ãŠãæžãçããŠããããšã«åæããå Žåããã¹ãŠãæ£åžžã§ããããã«èŠããŸãã èªæžã§ãåãããšã å°æ°ã®ããŒãïŒ1-2-3ïŒãèœã¡ãå Žåãããã§åé¡ãããŸããã ãã¹ãŠãæ£åžžã§ãããããã¢ã¯ã»ã·ããªãã£ãŸãã¯æŽåæ§ã倱ã£ãŠããŸããã å€æ°æŽŸãè±èœããå Žåãã¢ã¯ã»ã·ããªãã£ã¯å€±ãããŸããèšé²ã§ããªããªã£ãããæŽåæ§ã¯ãŸã 倱ãããŠããªãããã§ãã
èã®äžã§ã©ã€ããã¢ãããŸãããã
![](https://habrastorage.org/files/2be/c78/005/2bec78005e8841c19f62092a50de6928.png)
å®è¶³æ°ãäœãããšããŸãã ãžã§ãã»ã³ãããäžåºŠååŸããŠãååŸãããã®ã説æããŠã¿ãŸãããã
ããã§ã¯ãã¹ãŠãããå°ãè€éã«ãªããŸãããªããªããç§ãã¡ã¯ãã§ã«è³¢ãããã§ãã æåã«ãã¯ã©ãŒã©ã ã®ãµã€ãºãèšè¿°ããé¢æ°ãäœæããŸãã
![](https://habrastorage.org/files/64a/f41/7bd/64af417bdaf4420cb578d020f9ea39b9.png)
3ã€ã®ããŒãã®å Žåããããã¯2ã€ã5ã€ã®ããŒãã®å Žåã3ã€ãªã©ã§ããããããªéåæ°ã§ãã
次ã«ãããžãã¯ã®èªã¿åãããã³æžã蟌ã¿æ©èœã«ã€ããŠèª¬æããŸãã
![](https://habrastorage.org/files/dbd/719/22d/dbd71922dd354537a702a774085074a0.png)
ã¯ã©ãŒã©ã ã䜿çšããŠåæ£ã·ã¹ãã ããèªã¿åãå ŽåãHTTPãä»ããŠãã¹ãŠã®ããŒãã«ããã«ãããã®ãå°ããŸãã
![](https://habrastorage.org/files/fac/925/093/fac925093b8a46f8ae358eb0459059af.png)
次ã«ãã¯ã©ãŒã©ã ã§æ©èœããé¢æ°ãåŒã³åºããŸããããã¯æ¬¡ã®ããã«èšè¿°ããŸãã
![](https://habrastorage.org/files/ed4/576/0cc/ed45760cc7324eac9a1b7e9b1da14287.png)
æåŸã«ã次ã®ããã«ååŸããå¿ èŠããããšèšããŸãã
![](https://habrastorage.org/files/4ed/e78/0a2/4ede780a2c424011b913f9ce8c5f7b68.png)
ã¬ã³ãŒããšã»ãŒåãã ãã¹ãŠã®ããŒãã«æžã蟌ã¿ãŸããæžã蟌ãŸããå 容ã確èªããŸãã
![](https://habrastorage.org/files/d06/9f6/512/d069f6512f9c42a59ab7ecbc968eb929.png)
ã¯ã©ãŒã©ã ãéãŸããã©ããïŒ
![](https://habrastorage.org/files/680/3a4/d08/6803a4d083274347be9de226916c8bc8.png)
次ã«ããŠãŒã¶ãŒã«å¯Ÿããäœããã®å¿çãäœæããŸãã
![](https://habrastorage.org/files/83e/809/222/83e809222c4f4c7ba5b974f212e0ffc4.png)
å®è¶³æ°ã§ã©ãçããã
![](https://habrastorage.org/files/179/36d/db8/17936ddb8272495fb00a986152fdf821.png)
ããã¯å°ãæšæºçãªScalaã§ãã ããã§ã¯ãåæ£ã·ã¹ãã ã®ããŸããŸãªããŒãããããŸããŸãªãµãŒããŒããå±ããäžé£ã®åçããããŸãã ããã¯ãããšãã°0000ã®ããã«ãã»ãšãã©åãªãè¡ã®ã·ãŒã±ã³ã¹ã§ãã
![](https://habrastorage.org/files/287/46f/01f/28746f01f2cd42dbb53bf3b4b8e2c76e.png)
ããããèªåã§ã°ã«ãŒãåããŸãã
![](https://habrastorage.org/files/ee7/c39/3eb/ee7c393eb801417dbe79b34d31d11f98.png)
ã©ã®ã°ã«ãŒããäŒãé »åºŠã調ã¹ãŸãïŒ
![](https://habrastorage.org/files/c80/792/e7f/c80792e7fd744affb3dcc5f353acaa16.png)
人æ°ã§äžŠã¹æ¿ãïŒ
![](https://habrastorage.org/files/7b6/736/26f/7b673626f4514952b20e27e705667e70.png)
æã人æ°ã®ããåçãåãäžããŸãã
![](https://habrastorage.org/files/dea/29b/251/dea29b251daf475dbdf6da6445e76ca9.png)
ãã¹ãŠãæ£ããããã§ãã
次ã¯çãã圢æããé¢æ°ã§ãïŒ
![](https://habrastorage.org/files/d80/01f/43b/d8001f43b7d44237b7109c8a00a0493d.png)
圌女ã¯Scalaã«ã€ããŠãéåžžã«èŠç¯çã§ãããäœãèµ·ãã£ãŠããã®ãå®å šã«ã¯æããã§ã¯ãããŸããã
æã人æ°ã®ããåçãšæ祚æ°ïŒ
![](https://habrastorage.org/files/384/683/7b2/3846837b27d54b50b561bc4871fc7b44.png)
ãããŠãæ祚æ°ãç§ãã¡ã®å®è¶³æ°ä»¥äžã§ãããããã®å®è¶³æ°ã«çããå Žåããã¹ãŠã倧äžå€«ã§ããç§ãã¡ã¯æžãçããŸããã æ£åžžã§ãããé²é³ãæåããå®è¶³æ°ãéãŸã£ããšèšããŸãã
![](https://habrastorage.org/files/301/353/274/301353274d064a9a8ab290d5049b35dd.png)
äœãããããã®ã§ããããïŒ
äœããæ£ãããªãå Žåãéæ³ã®HTTP 409 ConflictãèšããŸãã
![](https://habrastorage.org/files/205/0d9/59a/2050d959a3e842b383f4b3a580f88db2.png)
ä»ãç§ãã¡ã¯ããããã¹ãŠå°ç¡ãã«ããããšããŸãïŒ
![](https://habrastorage.org/files/9f0/926/acd/9f0926acd7244bc2b233511c209d57be.png)
ãããŠããçŽããŠãã ããã
ããã§ãéæ³ã®ã¹ã¯ãªãããããäžåºŠè©ŠããŸãã ããŒãn2ã«ãããã®ãèŠãŠã¿ãŸãããã
![](https://habrastorage.org/files/729/770/ebb/729770ebb313462997dcad17fb0fced8.png)
ä»ãããã¯æ²é»ããŠããããã®ãããªçæ³çãªããã»ã¹ã ããã»ãšãã©ã 圌女ãã¿ããããã®ãåŸ ã£ãŠããŸãã ããã¯ã¢ãŠãã
ããŒãn2ã«ãããã®ãèŠãŠã¿ãŸãããã
![](https://habrastorage.org/files/19f/345/96f/19f34596fa7a425ca0b5e39c8b0ae46d.png)
0ããããŸããããã§äœãèµ·ãã£ããèŠãŠã¿ãŸãããã
![](https://habrastorage.org/files/bfb/31d/258/bfb31d2587484ea7aed4d1d8b4602483.png)
ããŒã«ã«èªã¿åãã5祚ã§0ã®èªã¿åãããããéåžžã¯ã¯ãŒã«ã§ãã çã®åæ£ã·ã¹ãã ã
ããã«äœããæžããŸãããïŒ
![](https://habrastorage.org/files/43c/fd0/5f0/43cfd05f0e464bd19eef464e628f4ddf.png)
ããã«å°ããªãã®ãæžããŸããã 圌女ã¯ãµã€ã³ã¢ããããŸããïŒ
![](https://habrastorage.org/files/23d/419/9fe/23d4199fedba4942ace67d0753570fb0.png)
ããã§ã¯ããã®ãŠããããä»ã®ããŒãã«å±éããŸããã ããã«ã¯ã5祚ã®å®è¶³æ°ããããŸãã ãã¹ãŠãããŸãããããã§ãã
ãžã§ãã»ã³ã«æ»ããŸãã ã¯ã©ãŒã©ã ããããããã¯ã©ãŒã©ã ã«ã¯å€ãã®ãã¹ã¿ãŒãå«ããããšãã§ããŸãã äžè¬ã«ãå®è¶³æ°ã®ãããªãã®ã¯ãããŸããã
ã¯ã©ã€ã¢ã³ãã§æŸèæãåé€ããŸãïŒ
![](https://habrastorage.org/files/7be/91c/b6c/7be91cb6ca03493f92b683dc0757ec2c.png)
ãããŠããã¹ãŠãåèµ·åããŠãæŽåæ§ãã¹ããå床å®è¡ãããšãã«ã¯ã©ãŒã©ã ã«äœãèµ·ãããã確èªããŸãã ã³ãŒããæªçšããå Žåã¯ããã¹ãŠã®åã§ã
ããã¯æžãå§ããŸãããå€ãã®ãã¹ãŠãããã§èµ·ãã£ãŠããŸãã
æåŸã«ãããã¯ç§ãã¡ã«çå®ãåããŸããïŒ
![](https://habrastorage.org/files/8ff/185/85d/8ff18585da784ee09b49a245163cd6bc.png)
ãã¹ãŠãããŸãããããã§ãã ããããç§ã¯ããã«ã€ããŠããªãã«èšã£ãããžã§ãã»ã³ã¯ãã¹ãã®ãã®ãããªç¢ºçè«çæ§è³ªã§ããã ãããã£ãŠãããã§ã¯5ç§ã§ã¯ãªã15ããªã³ã«ããŸãã
![](https://habrastorage.org/files/ed1/40c/7d0/ed140c7d0d554757916aa7564165fd0c.png)
ãããŠãä¿¡é Œæ§ã®ããã«ããã®ãã¹ããå床å®è¡ããŠãã ããã 圌ãç§ãã¡ã«ä»ã®äœãããããããããããªããšããåžæã§ããã°ã®çºèŠã¯ç¢ºççã§ãã éåžžã«èå³æ·±ããªã©ãã¯ã¹ããããã»ã¹ã äºåºŠç®ã®è©Šã¿ã§ããããç§ãã¡ã®ããã«äœããèŠã€ããããšãæåŸ ããŸãããã ä»ãç§ãã¡ã¯å®è¶³æ°ãã©ããã§ããªã声ãäžããããšãæåŸ ããŠã圌女ãããé·ã15ç§é転ããŠããŸãã ããã»ãšãã©ã 誰ãã圌ãæããŠãããããšã楜ãã¿ã«ããŠããŸãã ããã¯ç§éã«å€±æãåããïŒ
![](https://habrastorage.org/files/864/2de/58c/8642de58cbca4d8e8b9eace023fbd457.png)
äœãæåŸ ããŠããŸãããã ããã§äœã倱æããŸãããïŒ
ãããã®2ã€ã®é¢æ°ãç°åžžã«èŠãŠã¿ãŸãããã
![](https://habrastorage.org/files/df5/3ef/71d/df53ef71db5d4899a35efce9bfc6dcfa.png)
ããã§äœããééã£ãŠããŸãã ãŸããScalaã§ãããããåžžã«äœããééã£ãŠããå¯èœæ§ããããŸãã 第äºã«ãããžãã¯ã«äœããã®åé¡ããããŸãã
ãã®äžé£ã®ãšã³ããªãèŠãŠã¿ãŸãããã
![](https://habrastorage.org/files/35c/b64/93a/35cb6493a0a14f0892b52cabf470f405.png)
2ã€ã®ã¯ã©ã€ã¢ã³ãããããŸãã ããã§æäœAãèšé²ããããŒãããOKããšèšã£ãŠãæžãçããŠãããã«å®è¶³æ°ãåŸãŸããã ããããAãèšé²ããããšãã¯ã©ã€ã¢ã³ãã«äŒãããŸã§ãããã§ã¯ããé«éãªã¯ã©ã€ã¢ã³ããå®è¡ãããBãèšé²ããããšãã§ããŸãããããŒãã¯ã¯ã©ãŒã©ã ãäžç·ã«ãªã£ãããšã圌ã«äŒããŸããã ãã®ã¯ã©ã€ã¢ã³ãã«Bãèšé²ããããšãäŒããããã«Aãèšé²ãããšèšããŸãããããããäœããèªã¿ãŸãããããã§äœãèªã¿ãŸãããïŒ
![](https://habrastorage.org/files/eea/1ad/ad2/eea1adad273e4af697f98683e84d019f.png)
æéãçãã®ã§ãããã§Bãèªãããšããå§ãããŸããããã¯ãã¹ãŠç·åœ¢åå¯èœã§ã¯ãããŸããã ç§ãã¡ã¯AãèªãŸãªããã°ãªããªãã£ãã®ã§ããã®ãããªç¶æ³ãããã¹ãã§ã¯ãªãã®ã§ã ã·ã¹ãã å ã®ç«¶åã解決ããå¿ èŠãããããã§ãã
ãããåé¿ããããã«ãRAFTãŸãã¯PAXOSã¢ã«ãŽãªãºã ã®äœæè ã§ãªãéããè»èŒªãåçºæããŠå®è¶³æ°ãèªåã§èšè¿°ããå¿ èŠã¯ãããŸããã ãã®ã¢ã«ãŽãªãºã ã¯ãç§ãã¡å šå¡ãéåžžã®åæ£ã·ã¹ãã ãäœæããã®ã«åœ¹ç«ã¡ãŸãã
PAXOSïŒRAFTã¯ã©ãŒã©ã ã¢ã«ãŽãªãºã ã¯ç¶æ ãã·ã³ãèšè¿°ããç¶æ ãã·ã³ã¯ç¶æ éãè¡ãæ¥ããŸãã ãããã®é·ç§»ã¯ãã¹ãŠèšé²ãããŸãã
![](https://habrastorage.org/files/d26/51e/ab7/d2651eab781545a28abf4b3d2cf587c8.png)
ãããã®ã¢ã«ãŽãªãºã ã¯ããã®ãã°ã§æäœåæã®é åºãèšè¿°ããŸãã ãŠã£ã¶ãŒãã®éžæãæäœã®é©çšããã®ãžã£ãŒãã«ãããŒãã§ãœãŒãããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãããããã¹ãŠã®ããŒãã«åããžã£ãŒãã«ãããå Žåããã®ãžã£ãŒãã«ãæåããæåŸãŸã§å®è¡ããæéç¶æ ãã·ã³ã¯ããã¹ãŠã®ããŒãã§åãç¶æ ã«ãªããŸãã ããã¯ãšãŠãè¯ãããã§ãã
åé¡ã¯ãPAXOSãéåžžã«è€éã§ããããšã§ãã æ°åŠè ã®ããã«æ°åŠè ã«ãã£ãŠæžãããŠããŸãã ãããå®è£ ããããšãããšãPAXOSå®è£ ã®å¥ã®ããªãšãŒã·ã§ã³ããããŸããããã®äžã«ã¯å€ãã®ããªãšãŒã·ã§ã³ããããŸããããã®æ°ãèããã®ã¯æãããããšã§ãã ããã¯å®éã«ã¯äººã ã®ããã§ã¯ãªãããã§ãŒãºã«åå²ãããŠããŸããã ããã¯ãæ°åŠçæ§é ãèšè¿°ãã巚倧ãªãããã¯ãã¹ã§ãã ããèããªããã°ãªããŸããã PAXOSãšPAXOSå®è£ ã®ããããã¹ãŠã®ããªãšãŒã·ã§ã³ã¯ãæ¬æžã§èšè¿°ãããŠãããã®ããå®çšŒåã§äœ¿çšã§ããå®éã®å®è£ ã«åããŠã©ã®ããã«èãããã«ã€ããŠã®ãã®ã§ãã
ãããé²ãããã«ããã®ãããªRAFTã¢ã«ãŽãªãºã ããããŸãã ããã¯ããæ°ããããã¹ãŠã®åé¡ãèæ ®ããåªããã³ã³ã»ã³ãµã¹ã¢ã«ãŽãªãºã ãå®è£ ããããã«å¿ èŠãªãã¹ãŠã®ã¹ãããã説æããŠããŸãã ããã¯ãã¹ãŠã¯ãŒã«ã§ãã èšå€§ãªæ°ã®ç°ãªãå®è£ ããããŸãã
![](https://habrastorage.org/files/351/4e6/a96/3514e6a964b349abae271f0f4da94d25.png)
ããã¯Javaå°çšã§ãããPHPã§ããã¹ãŠã®èšèªã®å®è£ ããããšæããŸãããçç±ã¯æããã§ã¯ãããŸããã ãã®ã©ã€ãã©ãªã䜿çšããŠãèªåã§ãã¹ãããŠã¿ãŠãã ããã ãã¹ãŠãæ£ããRAFTãå®è£ ããŠããããã§ã¯ãããŸããã ç§ã¯akka-raftã䜿çšããããšããŸããããããã¯åäœããããã«èŠããŸãããäœããã®çç±ã§Jepsenãã¹ãã«åæ ŒããŸããã§ããã
åæã¢ã«ãŽãªãºã ã¯ãMongoDBã®3çªç®ã®ããŒãžã§ã³ã§ãRAFTãç»å Žããå Žæã§å€ã䜿çšãããŠããŸãã Cassandraã§ã¯ãPAXOSã¯äžçãã®ã§ãããå€ãã®ããŒã¿ããŒã¹ããã¥ãŒã·ã¹ãã ã§ã¯ãæçã«éãããšãé ããæ©ããã³ã³ã»ã³ãµã¹ã¢ã«ãŽãªãºã ãçŸããŸãã
äžè¬ã«ãåæ£ã·ã¹ãã ãäœæãããšããå€ãã®æ¹æ³ãããããšãç解ããå¿ èŠããããŸãããããã®ãã¹ãååšããããšãç¥ã£ãŠããå¿ èŠããããç¬èªã®ãã¹ããã1ã€å®è¡ããªãã§ãã ããããã¹ãéžæãããšãã¯ããã¹ãŠã®ãã¹ãæŽåæ§ãé 延ã垯åå¹ ãããã³ãã®ä»ã®ç°ãªããã®ã®éã®åŠ¥åç¹ã§ããããšãç解ããå¿ èŠããããŸãããã®åŠ¥åç¹ãç解ããããã察象åéã«é©çšã§ããã°ããã¹ãŠãåé¡ãããŸããã
![](https://habrastorage.org/files/8eb/104/48b/8eb10448b7444b4ebb28b36af05d2211.png)
ãããã®ã¢ãããŒãã®ã©ããåªããŠãããã¯èšããŸãããããã¯ãã¹ãŠããªã次第ã§ããããã¯ãã¹ãŠããªãã®ããžãã¹ã¿ã¹ã¯ã«äŸåããŸãããããã¯åãªãããŒã«ã§ãã
ã¬ããŒãïŒåæ£ã·ã¹ãã ã®ææãšå«æªæã