忣åæã¢ã«ãŽãªãºã ã®ä»çµã¿ â è€æ°ãµãŒããŒãã1ã€ã®çããã«åæããæ¹æ³
忣åæã¢ã«ãŽãªãºã ã£ãŠèãããã ãã©ãäœããåæãããã®ïŒ
ããšãã°3å°ã®ãµãŒããŒã§ããŒã¿ããŒã¹ãåãããŠããšããããã®å€ã¯42ã§ããã£ãŠå šå¡ãåãçããæã€å¿ èŠãããããã1å°ãæ éããŠãæ®ãã§æ£ããå€ã決ããããä»çµã¿ãããã忣åæã¢ã«ãŽãªãºã ã ãã
倿°æ±ºã§æ±ºããã°ããããããªãã®ïŒ
ãã質åã ããå®ã¯ãããã¯ãŒã¯é å»¶ãããŒãã®çªç¶ã®ã¯ã©ãã·ã¥ããããšãåçŽãªå€æ°æ±ºã§ã¯å£ãããã ãããšãã°5å°äž3å°ããå€ã¯Aããšèšã£ããã©ãæ®ã2å°ã¯ãããã¯ãŒã¯åæã§å¥ã®ãå€ã¯Bããåãåã£ãŠãããªããŠããšãèµ·ããããããã¹ããªãããã¬ã€ã³ãšåŒã°ããåé¡ã§ã忣ã·ã¹ãã æå€§ã®é£é¢ã®äžã€ã ãã
ãããâŠããããæåã«è§£æ±ºããã®ãPaxosã£ãŠãã€ïŒ
ããã ããPaxosã¯1989幎ã«Leslie Lamportãèæ¡ããå€å žçãªã¢ã«ãŽãªãºã ã ããææ¡è ïŒProposerïŒãå€ãææ¡ããŠãåçè ïŒAcceptorïŒãéåæ°ã§åãå ¥ãããåææç«ãåŠç¿è ïŒLearnerïŒããã®çµæãåãåãããšãã3ã€ã®åœ¹å²ã§åããçè«çã«ã¯å®ç§ãªãã ãã©ãè«æãé£è§£ãããŠå®è£ è æ³£ãããšããŠæåãªãã ã
é£ããããŠäœ¿ããªãã®ïŒ
å®è£ ã§ãã人ã¯ãããã©ããã°ãæ··å ¥ãããããã ãããããã§2014幎ã«Diego OngaroãšJohn Ousterhoutããçè§£ããããããæåªå ã«èšèšããã®ãRaftã ããRaftã¯ãªãŒããŒéžåºã»ãã°è€è£œã»å®å šæ§ãšãã3ã€ã®éšåã«æç¢ºã«åãããŠããŠãåãã§ãŒãºãç¬ç«ããŠçè§£ã§ããã®ã匷ã¿ã ãã
ãªãŒããŒéžåºã£ãŠã©ãããã®ïŒ
Raftã§ã¯ãã¿ãŒã ïŒä»»æïŒããšããæŠå¿µããã£ãŠããªãŒããŒã¯å®æçã«ããŒãããŒããéããã ããã©ãã¯ãŒãäžå®æéïŒéžæã¿ã€ã ã¢ãŠãïŒããŒãããŒããåãåããªããšãããªãŒããŒãèœã¡ãïŒããšå€æããŠèªåãåè£è ã«ãªããä»ã®ããŒãã«RequestVote RPCãéããéåæ°ã®ç¥šãåŸããæ°ãªãŒããŒã ãã
åæã«2å°ãç«åè£ãããã©ããªãã®ïŒ
ãããã¹ããªããããŒãïŒç¥šã®åè£ïŒã ããããšãã°5å°äž2å°ãåæã«ç«åè£ãããšãã©ã¡ããéåæ°ãåããªãå Žåãããããã®ãšãã¯ã¿ã€ã ã¢ãŠããã©ã³ãã ã«ããããŠåéžæãããã ãã©ã³ãã åã®ãããã§ã次ã®éžæã§ã¯ã©ã¡ãããå ã«éåæ°ãåãã確çãé«ããªããã
ãªãŒããŒã決ãŸã£ãããããŒã¿ã¯ã©ãå ±æããã®ïŒ
ãªãŒããŒãã¯ã©ã€ã¢ã³ãããã®æžã蟌ã¿ãåãåããšãèªåã®ãã°ã«è¿œèšããŠãå šãã©ãã¯ãŒã«AppendEntries RPCã§éããéåæ°ã®ãã©ãã¯ãŒããæžã蟌ã¿ãŸããããšè¿äºãããããã®ãšã³ããªã¯ãã³ãããæžã¿ãã«ãªããã ãéåæ°ã§OKã ãããå°æ°ã®ããŒããèœã¡ãŠãã·ã¹ãã ã¯æ¢ãŸããªããã
å®éã«ã©ããªãšããã§äœ¿ãããŠãã®ïŒ
ãã¡ããã¡ãå€ãããKubernetesã®å¿èéšã§ããetcdã¯Raftã§åããŠãããKafkaã®ã¡ã¿ããŒã¿ã¯ZooKeeperïŒZABãããã³ã«ãPaxosç³»ïŒã管çããŠããHashiCorpã®ConsulãRaftã§ãµãŒãã¹ãã£ã¹ã«ããªã®äžè²«æ§ãä¿ã£ãŠãããCockroachDBã¯åæ£SQLã®äžè²«æ§ã«Raftã䜿ã£ãŠããã ã
ãããåæã¢ã«ãŽãªãºã ããããã°ã忣ã·ã¹ãã ã¯å®ç§ãªã®ïŒ
å®ã¯ããç°¡åãããªããã ãCAPå®çã£ãŠç¥ã£ãŠãïŒ ãããã¯ãŒã¯åæïŒPartitionïŒãèµ·ãããšããäžè²«æ§ïŒConsistencyïŒãšå¯çšæ§ïŒAvailabilityïŒãåæã«æºãããªããšããå®çã ããåæã¢ã«ãŽãªãºã ã¯Cãéžã¶ãããåæäžã¯æžã蟌ã¿ãåãä»ããããªããªããã€ãŸãå¯çšæ§ãç ç²ã«ããŠããã ãã
ãããã¯ãã§ãŒã³ãåæã¢ã«ãŽãªãºã ã ããïŒ äœãéãã®ïŒ
éãããPaxosãRaftã¯åå è ãä¿¡é Œã§ããåæïŒã¯ã©ãã·ã¥æ éã¢ãã«ïŒã ãã©ããããã¯ãã§ãŒã³ã¯æªæããããŒããããŠãåãå¿ èŠããããããããã¶ã³ãã³éå®³èæ§ïŒBFTïŒãšåŒã¶ãã ãããã«é¢çœãã®ãFLPäžå¯èœæ§å®çã§ããéåæã·ã¹ãã ã§ã¯1å°ã§ãã¯ã©ãã·ã¥ããå¯èœæ§ããããšã決å®çãªåæã¯çè«äžäžå¯èœããšèšŒæãããŠããRaftã¯ã©ã³ãã ãªã¿ã€ã ã¢ãŠãã§ç¢ºççã«ãã®å£ãåé¿ããŠããã ãã