ãã«ãã¹ã¬ããããã°ã©ãã³ã°ããåæ£ã·ã¹ãã ã®ããã°ã©ãã³ã°ã«ç§»è¡ãããšãå€ãã®æšæºçãªææ³ãæ©èœããªããªããŸãã ãããã®ææ³ã®1ã€ã¯åæåãããŸããã¹ã³ãŒãã1ã€ã®ããã»ã¹ã«å¶éãããŠãããããåæ£ã·ã¹ãã ã®ç°ãªãããŒãã§åäœããã ãã§ãªããåããã·ã³äžã®ç°ãªãã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹éã§ãåäœããŸããã ããã¯ã«ã¯å¥ã®ã¡ã«ããºã ãå¿ èŠã§ããããšãããããŸãã
åæ£ããã¯ãµãŒãã¹ãèŠæ±ããã®ã¯åççã§ãã
- ãããã¯ãŒã¯ã®ç¹æ»
ç¶æ
ã§ã®äœæ¥èœåïŒåæ£ã·ã¹ãã ã®æåã®ã«ãŒã«ã¯
ããããã¯ãŒã¯ãåæ£ã·ã¹ãã ã«ã€ããŠèª°ã話ããªãããšã«å¯ŸããŠä¿¡é Œã§ããªãããšã§ãïŒ - åäžé害ç¹ããªã
ZooKeeperã¯ããã®ãããªãµãŒãã¹ã®äœæãæ¯æŽããŸãã
ãŠã£ãããã£ã¢ã«ãããšã ZooKeeperã¯åæ£æ§æããã³åæãµãŒãã¹ã§ãã ãããªãã®ããšã¯ç¥ããŸãããããã®å®çŸ©ããã¯ããŸãããããŸããã ç§ã®çµéšãæ¯ãè¿ããšã ZooKeeperã®ä»£æ¿å®çŸ©ãæäŸã§ããŸããããã¯ã次ã®ããããã£ãæã€åæ£ããŒ/å€ã¹ãã¬ãŒãžã§ãã
- ããŒã¹ããŒã¹ã¯ããªãŒã圢æããŸãïŒãã¡ã€ã«ã·ã¹ãã ã«é¡äŒŒããéå±€ïŒ
- å€ã¯ããªãŒãã ãã§ãªããéå±€ã®ä»»æã®ããŒãã«å«ããããšãã§ããŸãïŒãã¡ã€ã«ãåæã«ãã£ã¬ã¯ããªã§ããããã®ããã«ïŒãéå±€ããŒãã¯znodeãšåŒã°ããŸã
- ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã«åæ¹åéä¿¡ããããããã¯ã©ã€ã¢ã³ãã¯ç¹å®ã®å€ãŸãã¯éå±€ã®äžéšã®å€æŽãšããŠãµãã¹ã¯ã©ã€ãã§ããŸãã
- äœæããã¯ã©ã€ã¢ã³ããã¯ã©ã¹ã¿ãŒã«æ¥ç¶ããŠããéã«ååšããäžæçãªããŒ/å€ã®ãã¢ãäœæããããšãå¯èœã§ã
- ãã¹ãŠã®ããŒã¿ãã¡ã¢ãªã«åãŸãå¿ èŠããããŸã
- ã¯ãªãã£ã«ã«ã§ãªãæ°ã®ã¯ã©ã¹ã¿ãŒããŒãã®èæ»æ§
ãªãã¿ã®ãªãã·ã¹ãã ã«æ £ããã«ã¯ããŸãæäŸããAPIããå§ããå¿ èŠããããŸãã
ãµããŒããããŠããæäœ
ååšãã | znodeã®ååšã確èªãããã®ã¡ã¿ããŒã¿ãè¿ããŸã |
äœæãã | znodeãäœæããŸã |
åé€ãã | znodeãåé€ããŸã |
getData | znodeã«é¢é£ä»ããããããŒã¿ãååŸããŸã |
setData | æ°ããããŒã¿ãznodeã«é¢é£ä»ããŸã |
getChildren | æå®ãããznodeã®åãååŸããŸã |
åæãã | æ¥ç¶ããŠããã¯ã©ã¹ã¿ãŒããŒããšãŠã£ã¶ãŒãã®åæãåŸ æ©ããŠããŸãã |
ãããã®æäœã¯ã次ã®ã°ã«ãŒãã«åé¡ã§ããŸãã
ã³ãŒã«ãã㯠| ãã£ã¹ | |
ååšãã | åé€ãã | |
getData | setData | |
getChildren | äœæãã | |
åæãã |
ã³ãŒã«ãã㯠-ã³ãŒã«ããã¯ã瀺ãããšãã§ããèªã¿åãå°çšæäœãã³ãŒã«ããã¯ã¯ãèŠæ±ããããšã³ãã£ãã£ãå€æŽããããšãã«æ©èœããŸãã ã³ãŒã«ããã¯ã¯1åããæ©èœããŸãããå€ãåžžã«ç£èŠããå¿ èŠãããå Žåã¯ãã€ãã³ããã³ãã©ãŒã«åžžã«åãµã€ã³ã€ã³ããå¿ èŠããããŸã ã
CAS-æžã蟌ã¿èŠæ±ã ZooKeeperã®ç«¶åã¢ã¯ã»ã¹ã®åé¡ã¯ãcompare-and-swapã«ãã£ãŠè§£æ±ºãããŸãããããŒãžã§ã³ã¯åznodeã«ä¿åãããŸããå€æŽããå Žåãznodeããã§ã«å€æŽãããŠãããã©ããã瀺ãå¿ èŠããããŸããããŒãžã§ã³ãäžèŽããªããããã¯ã©ã€ã¢ã³ãã¯å¯Ÿå¿ããäŸå€ãåãåããŸãã ãã®ã°ã«ãŒãã®æäœã§ã¯ãå€æŽãããªããžã§ã¯ãã®ããŒãžã§ã³ãæå®ããå¿ èŠããããŸãã
create-æ°ããznodeïŒããŒ/å€ã®ãã¢ïŒãäœæããããŒãè¿ããŸãã åŒæ°ãšããŠç€ºãããŠããå ŽåãããŒãè¿ãããã®ã¯å¥åŠã«æããŸãããå®éã«ã¯ãZooKeeperã«ããŒã®ãã¬ãã£ãã¯ã¹ãä»ããŠãznodeãã·ãŒã±ã³ã·ã£ã«ã§ãããšèšãããšãã§ãããã®åŸãã¢ã©ã€ã¡ã³ããããæ°å€ããã¬ãã£ãã¯ã¹ã«è¿œå ãããçµæãããŒãšããŠäœ¿çšãããŸã åãæ¥é èŸãæã€é 次znodeãäœæããããšã«ãããããŒãïŒèŸæžã°ã©ãã£ãã¯ã®æå³ã§ïŒå¢å ããã·ãŒã±ã³ã¹ã圢æããããšãä¿èšŒãããŸã ã
ã·ãªã¢ã«znodeã«å ããŠã äžæznodeãäœæã§ããŸããããã¯ãäœæããã¯ã©ã€ã¢ã³ããåæããããšããã«åé€ãããŸã ïŒZooKeeperã®ã¯ã©ã¹ã¿ãŒãšã¯ã©ã€ã¢ã³ãéã®æ¥ç¶ã¯é·æééãããŸãŸã«ãªãããšãæãåºããŸãïŒã ãšãã§ã¡ã©ã«znodeã«ã¯åãå«ããããšã¯ã§ããŸããã
Znodeã¯ãäžæçã§ãã·ãŒã±ã³ã·ã£ã«ã§ãããŸããŸããã
sync-ã¯ã©ã€ã¢ã³ããæ¥ç¶ãããŠããã¯ã©ã¹ã¿ãŒããŒãããã¹ã¿ãŒãšåæããŸãã åæã¯è¿ éãã€èªåçã«è¡ããããããæ°žä¹ ã«åŒã³åºããªãã§ãã ããã ãã€é»è©±ãããããã«ã€ããŠã¯ã以äžã§èª¬æããŸãã
é£ç¶ããäžæçãªznodeãšãããã®åé€ã®ãµãã¹ã¯ãªãã·ã§ã³ã«åºã¥ããŠãåæ£ããã¯ã·ã¹ãã ã
åæ£ããã¯ã·ã¹ãã
å®éããã¹ãŠãç§ãã¡ã®åã«çºæãããŸãã-ç§ãã¡ã¯ãã¬ã·ãã»ã¯ã·ã§ã³ã® ZooKeeperãŠã§ããµã€ãã«è¡ããããã§ãããã¯ã¢ã«ãŽãªãºã ãæ¢ããŸãïŒ
- ã_locknode_ / guid-lock-ãããã¬ãã£ãã¯ã¹ãšããŠäœ¿çšããŠäžæçãªã·ãªã¢ã«znodeãäœæããŸããããã§ã_locknode_ã¯ããã¯ããŠãããªãœãŒã¹ã®ååãguidã¯æ°ããçæãããã¬ã€ãã§ã
- ã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããã«ãåã®ãªã¹ã_locknode_ãååŸããŸã
- æåã®ã¹ãããã§äœæãããznodeã®ããŒã«æå°ã®æ°å€æ¥å°ŸèŸãããå ŽåïŒã¢ã«ãŽãªãºã ãçµäºããŸã-ãªãœãŒã¹ãååŸããŸãã
- ããã§ãªãå ŽåãåããŒãã®ãªã¹ãããµãã£ãã¯ã¹ã§ãœãŒãããã¹ããã1ã§äœæãããã®ã®åã«ãªã¹ãã«ããznodeã®ã³ãŒã«ããã¯ã§åŒã³åºããååšããŸãã
- falseã«ãªã£ãå Žåã¯ã¹ããã2ã«é²ã¿ãããã§ãªãå Žåã¯ã€ãã³ããåŸ ã£ãŠã¹ããã2ã«é²ã¿ãŸã
ãããªã¢ã«ã®ååã確èªããã«ã¯ãèªåã§ç解ããŠã¿ãŠãã ãããéé ãŸãã¯æé ã§ãã¹ããã4ã§ãªã¹ãããœãŒãããå¿ èŠããããŸãã
ZooKeeperã®æäœäžã«æäœãèœã¡ãå Žåã¯ãæäœãæåãããã©ããã確èªã§ããªããã ããã®ãã§ãã¯ãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§è¡ãå¿ èŠããããŸãã ããã«ã¯ãGUIDãå¿ èŠã§ãããããç¥ã£ãŠãåã«å°ãããšãæ°ããããŒããäœæãããã©ãããç°¡åã«å€æã§ããæäœãç¹°ãè¿ã䟡å€ããããŸãã
ã¡ãªã¿ã«ãç§ã¯ããã¯èšããŸããã§ããããã·ãŒã±ã³ã·ã£ã«zããŒãã®ãµãã£ãã¯ã¹ãèšç®ããããã«ãäžæã®ãã¬ãã£ãã¯ã¹ã·ãŒã±ã³ã¹ã§ã¯ãªããzããŒããäœæãããäžæã®èŠªã·ãŒã±ã³ã¹ã䜿çšããŠããããšãæ¢ã«æšæž¬ãããšæããŸãã
WTF
çè«çã«ã¯çµäºã§ããŸãããå®è·µã瀺ããŠããããã«ãæãèå³æ·±ããã®ãå§ãŸããŸã-wtf 'kiã wtfãšã¯ãã·ã¹ãã ã«é¢ããç§ã®çŽæçãªã¢ã€ãã¢ãšãã®å®éã®åäœãšã®éã®ççŸãæå³ããŸãã
WTFïŒ1-ã³ãŒããè£è¿ãã«ãã
ãã¹ãŠã®APIã¡ãœããã¯ããã§ãã¯æžã¿äŸå€ãã¹ããŒãããããåŠçããããã«åŒ·å¶ã§ããŸãã åæ£ã·ã¹ãã ã®æåã®ã«ãŒã«ã¯ãããã¯ãŒã¯ãä¿¡é Œã§ããªããšããããšãªã®ã§ãããã¯éŠŽæã¿ã®ãªãããããæ£ããã§ãã é£ã¶å¯èœæ§ã®ããäŸå€ã®1ã€ã¯ãæ¥ç¶ã®åæïŒãããã¯ãŒã¯ã®ç¹æ» ïŒã§ãã æ¥ç¶ã倱ãããã¯ã©ã¹ã¿ãŒããŒãïŒCONNECTIONLOSSïŒãšæ··åããªãã§ãã ããããã®å Žåãã¯ã©ã€ã¢ã³ãã¯ä¿åãããã»ãã·ã§ã³ãšã³ãŒã«ããã¯ïŒå¥ã®æ¥ç¶ãŸãã¯åŸ æ©ïŒã§åŸ©å ãããã®å Žåãã¯ã©ã¹ã¿ãŒããã®æ¥ç¶ãšãã¹ãŠã®ã³ãŒã«ããã¯ã®æ倱ïŒSESSIONEXPIREDïŒã匷å¶çã«éããŸãã³ã³ããã¹ãã埩å ããã¿ã¹ã¯ã¯ããã°ã©ããŒã«ãããŸãã ããããç§ãã¡ã¯ãããã¯ããé¢ããŸãã...
ãŠã€ã³ã¯ãåŠçããæ¹æ³ïŒ å®éã ã¯ã©ã¹ã¿ãŒãšã®æ¥ç¶ãéããšããä»ã®äººã®ããã«äžåºŠã ãã§ã¯ãªããç¹°ãè¿ãåŒã³åºããã倱ãããæ¥ç¶ãšåŸ©å ãããæ¥ç¶ã«é¢ããã€ãã³ããé ä¿¡ããã³ãŒã«ããã¯ã瀺ããŸã ã æ¥ç¶ã倱ããããšãã«å€æããŸããèšç®ãäžæåæ¢ããç®çã®ã€ãã³ããå°çãããç¶è¡ããå¿ èŠããããŸãã
ããã¯äœããæãåºãããŸããïŒ äžæ¹ã§-ã€ãã³ããä»æ¹ã§ã¯-ç§ã®æèŠã§ã¯ãç¶ç¶ãšã¢ããã®ã©ããã§ãããã°ã©ã ã®æµãã§ãéã¶ãå¿ èŠæ§ã
äžè¬ã«ãããã°ã©ã ã®ã¹ãããã¯æ¬¡ã®åœ¢åŒã§èšèšããŸããã
public interface Task { Task continueWith(Task continuation); // void run(Executor context, Object arg); // void error(Executor context, Exception error); // , - }
ãšã°ãŒãã¥ãŒã¿ãŒã¯ã©ãã§ãã
public interface Executor { void execute(Task task, Object arg, Timer timeout); // timeout / TimeoutException error , real-time }
å¿ èŠãªã³ã³ãããŒã¿ãè¿œå ãããšã次ã®ããã°ã©ã ããã«ãã§ããŸããã©ããã§ã¹ãããã®ã¹ãçæ§ã䜿çšããã©ããã§æ瀺çã«ãŽããã¯ãªãŒã³ã¢ããããŸãïŒ
- åè§ã¯äŸ¿å©ãªæäœã§ãããç¢å°ã¯å®è¡ã¹ã¬ããããã³/ãŸãã¯ãšã©ãŒã¹ããªãŒã ã§ãã
- rhombus-æå®ããããšã©ãŒãç¡èŠããæåŸã®æçšãªæäœãç¹°ãè¿ãã³ã³ãããŒã¿ãŒ
- ããã«ã ã¯ãéåžžã®å®è¡ãããŒã®å Žåã¯æäœAãå®è¡ããç¹å®ã®ãšã©ãŒã®å Žåã¯æäœBãå®è¡ããã³ã³ãããŒã¿ã§ã
- äžžããããå¹³è¡å é¢äœ-æåããå®è¡ã¹ã¬ãããèµ·åããã³ã³ãããŒã¿ãŒããšã©ãŒã¯ããã«ããã«ã¹ãããããŸã
Executorãå®è£ ãããšãã«ãã©ãããŒé¢æ°ãZooKeeperã¯ã©ã¹ã«è¿œå ããŠããã¹ãŠã®ã€ãã³ãã®ãã³ãã©ãŒã§ãããWatcherïŒåŒã³åºãã€ãã³ããã³ãã©ãŒïŒèªäœã決å®ããŸãã å®è£ å ã«ã3ã€ã®BlockingQueueãšããããèªã¿åã3ã€ã®ã¹ã¬ãããé 眮ããŸããããã®çµæãã€ãã³ããå°çãããševentQueueã«è¿œå ããããããZooKeeperå ã®ãã¹ãŠã®Watcherã¯1ã€ã®ã¹ã¬ããã§åäœãã ããããã£ãŠã1ã€ã®ã€ãã³ããåŠçãããšãä»ã®ãã¹ãŠã®ã€ãã³ãããããã¯ãããZooKeeperèªäœããããã¯ãããå ŽåããããŸã ã taskQueueã®2çªç®ã®ã¿ãŒã³ã§ã¯ãåŒæ°ãšãšãã«Task'iãè¿œå ãããŸãã ãããã®ãã¥ãŒïŒeventQueueããã³taskQueueïŒã¯ããããããããŒãeventThreadããã³taskThreadã«å²ãåœãŠããããããã®ã¹ã¬ããã¯ãã¥ãŒãèªã¿åããåçä¿¡ãªããžã§ã¯ããJobã«ã©ããããŠãå®éã«ã¿ã¹ã¯ã³ãŒããŸãã¯ãã³ãã©ãŒãå®è¡ããç¬èªã®ã¹ã¬ãããæã€jobQueueã«å ¥ããŸãã¡ãã»ãŒãžã æ¥ç¶ã«å€±æããå ŽåãtaskThreadã¹ã¬ããã¯äžæããããããã¯ãŒã¯ãäžæããå ŽåãåéãããŸãã 1ã€ã®ã¹ã¬ããã§ã·ã£ããã«ãšãã³ãã©ãŒã®ã³ãŒããå®è¡ãããšãããã¯ãå¿é ããå¿ èŠããªããªããããžãã¹ããžãã¯ã容æã«ãªããŸãã
WTFïŒ2-ã¡ã€ã³ãµãŒããŒ
ZooKeeperã§ã¯ããµãŒããŒïŒã¯ã©ã¹ã¿ãŒïŒãã¡ã€ã³ã§ãããã¯ã©ã€ã¢ã³ãã«ã¯å®è³ªçã«æš©å©ããªããšèšããŸãã æã ããã¯çµ¶å¯Ÿã«ãªããŸããäŸãã°... ZooKeeperæ§æã«ã¯ã»ãã·ã§ã³ã¿ã€ã ã¢ãŠããªã©ã®ãã©ã¡ãŒã¿ãŒããããã¯ã©ã¹ã¿ãŒãšã¯ã©ã€ã¢ã³ãéã®æ¥ç¶ãã©ãã ãæ¶ãããã決å®ããŸããæ倧å€ãè¶ ãããšããã®ã¯ã©ã€ã¢ã³ãã®ã»ãã·ã§ã³ãéãããããã®ã¯ã©ã€ã¢ã³ãã®ãã¹ãŠã®äžæznodeãåé€ãããŸã; æ¥ç¶ã埩å ããããšãã¯ã©ã€ã¢ã³ãã¯SESSIONEXPIREDã€ãã³ããåãåããŸãã ãã®ãããæ¥ç¶ã倱ããïŒCONNECTIONLOSSïŒãã»ãã·ã§ã³ã¿ã€ã ã¢ãŠããè¶ ãããšãæãã«åŸ æ©ããŠäœãããŸããããã¢ã€ãã¢ã«ããã°ãã»ãã·ã§ã³ããããã§ãããšæšæž¬ããSESSIONEXPIREDããã³ãã©ãŒã«ã¹ããŒã§ããŸãã
ãã®åäœã®ãããéçºè ã¯ããæç¹ã§é«ªãåŒãè£ããŸããããšãã°ãZooKeeperãµãŒããŒãäžããŠæ¥ç¶ããããšããŸããããèšå®ã«èª€ãããããééã£ãã¢ãã¬ã¹ãŸãã¯ããŒããããã¯ãããšãäžèšã®åäœã«åŸããŸãã ãMySQLãªã©ã®å Žåã®ããã«ãã¯ã©ã€ã¢ã³ããCONNECTEDç¶æ ã«ãªãããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããªããªããŸã§åŸ ã€ã ãã§ãã
èå³æ·±ãããšã«ããã®ã·ããªãªã䜿çšãããšãæ¬çªç°å¢ã§ZooKeeperãã·ãŒã ã¬ã¹ã«æŽæ°ã§ããŸãã
- ZooKeeperããªãã«ãã-ãã¹ãŠã®ã¯ã©ã€ã¢ã³ããCONNECTIONLOSSç¶æ ã«å ¥ã
- ZooKeeperã®æŽæ°
- ZooKeeperããªã³ã«ãããšããµãŒããŒãšã®æ¥ç¶ã¯åŸ©å ãããŸãããããµãŒããŒã«å¯ŸããŠåæã®æéãåæ¢ããããããµãŒããŒã¯SESSIONEXPIREDãéä¿¡ããŸãã
ã¡ãªã¿ã«ããã®åäœã®ããã«ããšã°ãŒãã¥ãŒã¿ã¿ã€ããŒã«æž¡ãã®ã¯ãããŸãé·ãæ¥ç¶ã§ããªãå Žåã«ã¿ã¹ã¯ã®å®è¡ããã£ã³ã»ã«ããããã§ãã
WTFïŒ3-IntãªãŒããŒãããŒ
äžèšã®ã¢ã«ãŽãªãºã ã«åŸã£ãŠããã¯ãå®è£ ãããã®ããžãã¹ãé«è² è·ã®çç£ã§éå§ãããšããŸããããšãã°ã1æ¥ããã10 MMã®ããã¯ãååŸãããšããŸãã çŽ1幎åŸãããªãã¯å°çã«ããããšã«æ°ã¥ã-ããã¯ã¯åäœããªããªããŸãã å®éã«ã¯ã1幎åŸã«zversionã«ãŠã³ã¿ãŒã®cversionããªãŒããŒãããŒããé£ç¶ããznodeåã®å調ã«å¢å ããã·ãŒã±ã³ã¹ã®ååã«éåããããšã«ãªããŸãããããããã¯ã®å®è£ ã®åºç€ãšãªããŸãã
ã©ããã å®æçã«_locknode_ãåé€/åäœæããå¿ èŠããããŸã-é¢é£ä»ããããã«ãŠã³ã¿ãŒããªã»ãããããå調ãªã·ãŒã±ã³ã¹ã®ååã«å床éåããŸãããå®éã«ã¯ã znodeã¯åããªãå Žåã«ã®ã¿åé€ã§ã ãä»ã§ã¯_versionnode_ cversionããªã»ãããããçç±ãæšæž¬ããŸãåããªããããã¯ã¢ã«ãŽãªãºã ã«åœ±é¿ããŸããã
WTFïŒ4-ã¯ã©ãŒã©ã æžã蟌ã¿ãèªã¿åãã§ã¯ãªã
ZooKeeperãæžã蟌ã¿èŠæ±ã«å¯ŸããŠOKãè¿ããå Žåãããã¯ããŒã¿ãã¯ã©ãŒã©ã ïŒã¯ã©ã¹ã¿ãŒå ã®ã»ãšãã©ã®ãã·ã³ã3å°ã®ãã·ã³ã®å Žåãã¯ã©ãŒã©ã ã¯2ã§æ§æãããŠããïŒã«æžã蟌ãŸããããšãæå³ããŸãã ããŠãŒã¶ãŒã®èªã¿åãæã«ã¯ãæ¥ç¶å ã®ãã·ã³ããããŒã¿ãåãåããŸãã ã€ãŸãããŠãŒã¶ãŒãå€ãããŒã¿ãåãåã£ããšãã«ç¶æ³ãçºçããå¯èœæ§ããããŸãã
ZooKeeper以å€ã®æ¹æ³ã§é¡§å®¢ãéä¿¡ããªãå ŽåãZooKeeperã®ãã¹ãŠã®æäœã¯å³å¯ã«é åºä»ããã ãåŸ æ©ããæ¹æ³ãé€ããŠã€ãã³ããçºçããããšã確èªããæ¹æ³ããªããããããã¯åé¡ã§ã¯ãããŸããã ãªãããããã¹ãŠé 調ã§ããã®ããèªåã§æšæž¬ããŠãã ããã å®éãã¯ã©ã€ã¢ã³ãã¯ã誰ã圌ã«å€æŽãå ããªãã£ããšããŠããããŒã¿ãæŽæ°ãããããšãç¥ã£ãŠããå ŽåããããŸã-圌ãèªåã§å€æŽãå ããå ŽåãZooKeeperã¯æžã蟌ã¿ã®äžè²«æ§ã®èªã¿åãããµããŒãããŠãããããããã¯åé¡ã§ã¯ãããŸããã
ããã§ããããã¯ã©ã€ã¢ã³ããZooKeeperéä¿¡ãã£ãã«ãä»ããŠããŒã¿ã®äžéšã®å€æŽãçºèŠããå Žåã匷å¶åæã圌ãå©ããŸã-ãããsyncã³ãã³ãã®ç®çã§ãã
æ§èœ
ã»ãšãã©ã®åæ£ããŒ/å€ã¹ãã¬ãŒãžã¯ãåæ£ã䜿çšããŠå€§éã®ããŒã¿ãæ ŒçŽããŸãã ãã§ã«æžããããã«ãZooKeeperãããèªäœã«ä¿åããããŒã¿ã¯RAMã®ãµã€ãºãè¶ ããŠã¯ãªããŸããããªããããåæ£ãããã®ãå°ããããŸã-ä¿¡é Œæ§ã確ä¿ããããã«äœ¿çšãããŸãã èšé²ã®ããã«ã¯ã©ãŒã©ã ãååŸããå¿ èŠãããããšãæãåºããŠã3å°ã®ãã·ã³ã®ã¯ã©ã¹ã¿ãŒã䜿çšãããšã1å°ã®ãã·ã³ãšæ¯èŒããŠããã©ãŒãã³ã¹ã15ïŒ äœäžããããšã¯é©ãããšã§ã¯ãããŸããã
ZooKeeperã®ãã1ã€ã®æ©èœã¯ãæ°žç¶æ§ãæäŸããããšã§ãããã£ã¹ã¯ãžã®æžã蟌ã¿ã«ãããæéãèŠæ±åŠçäžã«å«ãŸãããããæ°žç¶æ§ãå¿ èŠã§ãã
ãããŠãããã©ãŒãã³ã¹ãžã®æåŸã®ææã¯ãèŠæ±ã®å³å¯ãªé åºã«ãããã®ã§ã-ãã¹ãŠã®æžã蟌ã¿èŠæ±ã1ã€ã®ã¯ã©ã¹ã¿ãŒãã·ã³ãééããããã«ããŸãã
ç§ã¯ããŒã«ã«ã®ã©ãããããã§ãã¹ãããŸãããã¯ããããã¯éåžžã«äŒŒãŠããŸãïŒ
ããŽã©ãã¹ãã©ãã | Big Data Analyticã¯ãæã§ããã³ãããŒã¯ããšããåèªã䜿çšããŠããdevopsã®90ïŒ ãåãæã§ãlaptopããšããåèªã䜿çšããŠããããšã瀺ããŠããŸãã |
ããã©ãŒãã³ã¹ã®äžéã¯ãéäžçãªèšé²äžã«1ç§ãããçŽ1äžåã®æäœã§ãããæžã蟌ã¿ã«1ããªç§ããããŸãããããã£ãŠã1ã€ã®ã¯ã©ã€ã¢ã³ãããèŠããšããµãŒããŒã¯1ç§ããã1äžåã®æäœããéãå®è¡ã§ããŸããã
ããã¯ã©ãããæå³ã§ããïŒ ãã£ã¹ã¯ã«äŒãŸãªãç¶æ ïŒ10ïŒ ã®ã¬ãã«ã§ã®ssdã®äœ¿çšãå¿ å®åºŠã®ããã«ãramfsãä»ããŠã¡ã¢ãªã«ããŒã¿ãé 眮ããããšããŸãã-ããã©ãŒãã³ã¹ãå°ãåäžããŸããïŒãCPUã«ééããŸãã åèšã§ãZooKeeperã¯ãµã€ãã®äœæè ã瀺ããæ°ã®2åããé ãããšãããããŸãããããã¯ããã¹ãŠãååŸããæ¹æ³ãç¥ã£ãŠããããšãèãããšæªããããŸããã
ãŸãšã
ããã§æžãããã¹ãŠã®ããšã«ãããããããZooKeeperã¯èŠãç®ã»ã©æªãã¯ãããŸããã ç§ã¯ãã®ç°¡æœãïŒ7ããŒã ã®ã¿ïŒã奜ãã§ããããã°ã©ãAPIãããã·ã¥ããŠãåæ£ã·ã¹ãã ã®éçºã«ãããé©åãªã¢ãããŒãã«å°ãæ¹æ³ã奜ãã§ããã€ãŸãã ãã¹ãŠã®æäœãã·ã¹ãã ãäžè²«ããç¶æ ã®ãŸãŸã«ããå¿ èŠãããããããã€ã§ããã¹ãŠãèœã¡ãå¯èœæ§ããããŸã ã ãããããããã¯ç§ã®å°è±¡ã§ãããZooKeeeperãäœæãããã¿ã¹ã¯ã解決ãããšããäºå®ã»ã©éèŠã§ã¯ãããŸããïŒã¯ã©ã¹ã¿ãŒèšå®ã®ä¿åãã¯ã©ã¹ã¿ãŒã¹ããŒã¿ã¹ïŒæ¥ç¶ãããããŒãã®æ°ãããŒãã¹ããŒã¿ã¹ïŒã®ç£èŠãããŒãåæïŒãããã¯ãããªã¢ïŒããã³åæ£ã·ã¹ãã ããŒãã®éä¿¡ïŒa-la jabberïŒã
ç¹°ãè¿ãã«ãªããŸãããZooKeeperã§éçºããéã«çæãã¹ãç¹ããªã¹ãããŸãã
- ã¡ã€ã³ãµãŒããŒ
- ã¯ã©ã€ã¢ã³ãã¯ãããŒã¿ããã£ã¹ã¯ã«å°éãããšãã«ã®ã¿ã¬ã³ãŒãã«é¢ããéç¥ãåãåããŸã
- ã¯ã©ãŒã©ã ã®æžã蟌ã¿+æžã蟌ã¿ã®äžè²«æ§ã®èªã¿åã
- å³å¯ãªé åº
- ãã€ã§ããã¹ãŠãèœã¡ãå¯èœæ§ããããããå€æŽã®ãã³ã«ã·ã¹ãã ã¯äžè²«ããç¶æ ã«ããå¿ èŠããããŸã
- éä¿¡ã倱ãããå ŽåãæåŸã®æžã蟌ã¿æäœã®ç¶æ ãäžæãªç¶æ ã«ãªããŸã
- æ瀺çãªãšã©ãŒåŠçïŒç§ã«ãšã£ãŠãæåã®æŠç¥ã¯CPSã䜿çšããããšã§ãïŒ
åæ£ããã¯ã«ã€ããŠ
äžèšã®ããããã³ã°ã¢ã«ãŽãªãºã ã«æ»ããšãããã¯æ©èœãããããæ£ç¢ºã«ã¯ãã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³å ã®ã¢ã¯ã·ã§ã³ãããããã³ã°ã«äœ¿çšãããåãZooKeeperã¯ã©ã¹ã¿ãŒã§ã®ã¿çºçãããŸã§ã¹ã ãŒãºã«æ©èœããŸãã ãªããã -èªåã§æšæž¬ããŠã¿ãŠãã ããã ãããŠæ¬¡ã®èšäºã§ã¯ãåæ£ããã¯ãããæ£çŽã«ããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³å ã®æäœã®ã¯ã©ã¹ãCASããµããŒãããããŒ/å€ã¹ãã¬ãŒãžã«æ¡åŒµããæ¹æ³ã説æããŸãã
ZooKeeperã®æ å ±ãžã®ãªã³ã¯
zookeeper.apache.org
outerthought.org/blog/435-ot.html
highscalability.com/zookeeper-reliable-scalable-distributed-coordination-system
research.yahoo.com/node/3280