
ç§ã®æŽ»åã®æ§è³ªäžãåºåããã£ã³ããã¯ãSaaSãPaaSã¯ã©ã¹ã®ãµãŒãã¹ãªã©ãããŸããŸãªåžå Žåãã®ã¢ã¯ã»ã¹ãããã髿§èœãªã·ã¹ãã ãäœæããããããžã§ã¯ãã«é »ç¹ã«åå ããå¿
èŠããããŸãã ãã®ãããªã·ã¹ãã ã¯ãããšãã°ã¹ããªãŒãã³ã°ããŒã¿åŠççšã®ã©ã ãã¢ãŒããã¯ãã£ãæ°Žå¹³ã¹ã±ãŒãªã³ã°ã«ç¹åããã¹ã±ãŒã©ãã«ãªãã€ã¯ããµãŒãã¹ãœãããŠã§ã¢èšèšãnoSQL DBMSïŒRedisãAerospikeãCassandraãMongoDBãªã©ïŒ ïŒãã¡ãã»ãŒãžãããŒã«ãŒïŒKafkaãRabbitMQïŒãåæ£èª¿æŽããã³æ€åºãµãŒããŒïŒApache ZookeeperãConsulïŒã ãã®ãããªåºæ¬çãªã€ã³ãã©ã¹ãã©ã¯ãã£ãããã¯ã«ãããã»ãšãã©ã®ã¿ã¹ã¯ãæ£åžžã«è§£æ±ºã§ããŸããéçºããŒã ã¯ãéçºäžã®ã·ã¹ãã ã®ããžãã¹æåã®éšåã§äœ¿çšãããäžéã¬ãã«ã®ã³ã³ããŒãã³ããéçºããã¿ã¹ã¯ã«çŽé¢ããŸããã
å Žåã«ãã£ãŠã¯ãæšæºã®æ¢åã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠãããžã§ã¯ãããŒã ãå®è£
ã§ããªããšããåé¡ãçºçããç¹å®ã®åé¡ã解決ããããã«èšèšãããé«åºŠã«å°éåããã補åã®æ€çŽ¢ãŸãã¯éçºãå¿
èŠã«ãªããŸãã
ææŠãã
ãããžã§ã¯ãã®1ã€ã§ã¯ãããŒã ã«ããªãå
·äœçãªã¿ã¹ã¯ãããããã®ãã¬ãŒã ã¯ãŒã¯å
ã§ãããŒã¿ããåçãããè€è£œãæ°Žå¹³ã¹ã±ãŒãªã³ã°ããµããŒããããã©ãŒã«ããã¬ã©ã³ãã«ãªãå³å¯ã«é åºä»ããããããŒã¿ãã¥ãŒãæŽçããå¿
èŠããããŸããã ããã¯ã³ããããã°ãšåŒã°ããå€å
žçãªããŒã¿æ§é ã§ãããã»ãŒãã¹ãŠã®è€éãªDBMSã§äœ¿çšãããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ãã°ã®äž»ãªèŠä»¶ã¯ã倿Žãå³å¯ãªé åºã§èšé²ããããšã§ãããã®ããããã®æ§é ã«ãããã¬ã³ãŒããä»ã®ã¯ã©ã€ã¢ã³ããããé·ãããã£ãå Žåã§ããæåã«ã¬ã³ãŒããéå§ããã¯ã©ã€ã¢ã³ããããäœãã·ãŒã±ã³ã¹çªå·ã®ãžã£ãŒãã«ãšã³ããªãåãåãããšãä¿èšŒãããŸãã æäœãã°ã¯ã泚æããå¿
èŠã®ãããªããžã§ã¯ããžã®ç«¶åã¢ã¯ã»ã¹ãããã·ã¹ãã ã§åºã䜿çšãããŠããŸãã éåžžã®åæã¢ã¯ã»ã¹ãã¥ãŒã¯ããã®ãããªãã°ã®äŸã§ãïŒJavaã®LinkedBlockingQueueãªã©ïŒã
ãã®ãããªæ§é ã®äŸ¡å€ã¯ãç¹°ãè¿ããã¹äžã«æçµç¶æ
ã®äžå€æ§ãä¿èšŒããå€ãã®å Žåãè€æ°ã®å€æŽäžã«ãªããžã§ã¯ãã®æçµç¶æ
ãæ£ããåæ ããããã«æ£ç¢ºã«äœ¿çšãããããšã§ãã
è€æ°ã®ãšãŒãžã§ã³ããè€æ°ã®ãªããžã§ã¯ãã®è€æ°ã®ããŒãã«ããã£ãŠç¶æ
ã®é åºä»ãããã倿ŽãäŒæããå¿
èŠãããå Žåãåé¡ãå§ãŸããŸãã æããã§æãäœããã©ãŒãã³ã¹ã®ã¢ãããŒãã¯ãApache Zookeeperãªã©ã®åæ£ããã¯ãµãŒãã¹ã®äœ¿çšã«åºã¥ããŠããããã®å©ããåããŠãã¹ãã¬ãŒãžãžã®é åºä»ããããã¢ã¯ã»ã¹ãå®è¡ãããŸãã ãã®ãªãã·ã§ã³ã¯æ©èœããŠããŸããããªããžã§ã¯ãã®å€æŽããã£ãã«èµ·ãããªãå Žåããªããžã§ã¯ãã®ç¶æ
ãé »ç¹ã«å€æŽããã髿§èœã·ã¹ãã ãå®è£
ããããã«ããã®ãªãã·ã§ã³ã¯é©åã§ã¯ãããŸããã 2ã€ã®ãšãŒãžã§ã³ããš2ã€ã®ããŒããããç¹æ®ãªã±ãŒã¹ãå³ã«ç€ºããŸãã

ãªãã¯ãã¢ãŒãã£ããµããŒã®ç޹ä»ç»åãæ³šææ·±ãèŠããšãããã«æ°ä»ãããšãã§ããŸã...ãã¹ãŠã¯äŒŒãŠããããã«èŠããŸããããã§ã«è¥å¹²ã®ççŸããããŸãã
RocksDBã®åããŒãããªããžã§ã¯ãã®çŸåšã®ç¶æ
ãç¶æãããªãŒããŒ/ãã©ãã¯ãŒã¿ã€ãã®è€è£œã·ã¹ãã ãéçºããå¿
èŠããããŸãããããŒãã倱ãããå Žåãå¥ã®ããŒããšæ¢åã®æäœãã°ããç°¡åã«åŸ©å
ã§ããæœè±¡ãã¥ãŒãå³ã«è¡šç€ºãããŸãïŒ

ãã®ã¿ã¹ã¯å
ã«ååšããäž»ãªãšã³ãžãã¢ãªã³ã°äžã®åé¡ã¯ã 忣è€è£œæäœãã°ã®éçºã§ãã
忣è€è£œã¢ã¯ãã£ããã£ãã°
æåã«ããã€ãã®ããã«ãèãã¯éãé²ãã - ç¬èªã®ããŒãå¿
èŠã§ã... ç§ãã¡ã¯ã¯ãŒã«ãªéçºè
ã§ã-èªåã§ãã¹ãŠããããïŒãããŒã«ã«ãã¬ãžã³ã®å®è£
ãããããããããããã¯ãŒã¯ã«å±éããŠå®è£
ãè€è£œã§ãããšèããŸãããæ£çŽãªãšãããäœæ¥éãéãæ¯çãåŒãèµ·ãããŸããããäž»èŠè£œåã§ã¯ãªããäžå±€ã®ã³ã³ããŒãã³ãã§ããã
åŸ
ã£ãŠãã ããããããApache KafkaããããŸããé©ããèªè
ã¯èšãã§ãããïŒ ãããŠãããã¯ã»ãŒæ£ããã§ãããã Apache Kafkaã¯çŽ æŽãããããšã§ããããã®ã¿ã¹ã¯ã®äžéšãšããŠãæ¬¡ã®æ©èœãæ¬ ããŠããŸãã
- åäœå®äºã®ç¢ºèª
- ä¿èšŒãããããŒã¿é åºãšäžææ§
ã»ãšãã©ã®å ŽåãApache Kafkaã¯æ£åžžã«æ©èœããŸãããTCPãã±ããã倱ã£ããããŠã£ã¶ãŒããã¯ã©ãã·ã¥ããå Žåãã¡ãã»ãŒãžãè€è£œãããªããšããä¿èšŒã¯ãããŸããã ããã¯ãKafkaã®ã¡ãã»ãŒãžãå®å
šã«éä¿¡ãããApache Kafkaã垯åå¹
ã«å¯ŸããŠæé©åãããŠãããããã¯ã©ã€ã¢ã³ãããµãŒããŒäžã®ãšã³ããªã®é åºãå¶åŸ¡ããªããšããäºå®ã«ãããã®ã§ãã
ãããããœãªã¥ãŒã·ã§ã³ã®è©³çްãåæããèãå§ãããšãããã§ã«ãœãªã¥ãŒã·ã§ã³ãååšããããšãããããŸããããããã«ã€ããŠã¯ç¥ããŸããã§ããã ãããŠãããã¯Apache BookKeeperã§ãã ããã«ãApache ZookeeperãJavaãNettyïŒç§ãã¡ã®ãããžã§ã¯ãã¯Scalaã«ãããŸããããJavaã¹ã¿ãã¯ã¯éåžžã«æºè¶³ããŠããŸããïŒã§ãã€ããªãã®ãŒçã«ãæè¡çã«ãå®è£
ãããŠããŸãã ãã®çµæãããŒãºãæºããããã«Apache BookKeeperããã¹ãããæ°ãããã§ãŒãºãéå§ãããŸããã
Apacheããã¯ããŒããŒ
次ã«ãApache BookKeeperãè€è£œãããã¹ã±ãŒã©ãã«ãªæäœãã°ã®åé¡ã解決ããããã«äœ¿çšããååãšã¢ãããŒãã«ã€ããŠã話ããŸãã
ãã®ããããã®è£œåã¯ããŸãç¥ãããŠããŸãããããŠãŒã¶ãŒã¯ããŸãã äŸïŒ
ããããæåã®èšäºã翻蚳ããã ãã§ããã®ãããããŸãããããã¥ã¯ãã®éã®äžã§-äœå®¶ã
æåã«ã次ã®å³ã«è¡šç€ºãããŠããApache BookKeeperã®æŠå¿µã¢ãŒããã¯ãã£ãèŠãŠã¿ãŸãããã

ã¹ããŒã ã®äž»èŠãªèŠçŽ ïŒ
- Bookie-ãã°ããŒã¿ãä¿åãããŠãããµãŒããŒã
- å
åž³-ãå
åž³ããç¹å®ã®æ°ã®ã¬ã³ãŒããåäžã®ããªã¥ãŒã ã«ç·šæããããŒã¿ã®è€è£œå
ã®BookieãµãŒããŒãå®çŸ©ããŸãã
- å
åž³å
¥å-å
åž³ãžã®å
¥åãæçšãªæ
å ±ã
- BKã¯ã©ã€ã¢ã³ã-APIãå®è£
ããJavaã¯ã©ã€ã¢ã³ãã³ãŒãã
- Zookeeper-å
åž³ã«é¢ããã¬ã³ãŒããä¿åããApache ZookeeperãµãŒããŒïŒçªå·ãã¬ããªã«ãä¿åãããBookieãµãŒããŒïŒã
ããã§ãApache BookKeeperã€ã³ã¿ã©ã¯ã·ã§ã³ã¢ãã«ãšãã®ããŒã¿ç®¡çã¢ãŒããã¯ãã£ãã©ã®ããã«æ©èœããããçè§£ããããã«ãäž»èŠãªèŠçŽ ã詳ããèŠãŠãããŸãã
ããããŒ
ã¹ãã¬ãŒãžãµãŒããŒã BookKeeperã®äžéšãšããŠããã£ãŒã«ãã«è€è£œãããã¹ãã¬ãŒãžç°å¢ãåããå€ãã®BookieãµãŒããŒãå±éããŠå®è¡ããŸãã ããŒã¿ã¯å
åž³å
ã§é
ä¿¡ãããé
ä¿¡æ¹æ³ã¯ãã©ããã§ããã·ã¹ãã ã§ã¯ããããžã©ãã«ãèšå®ã§ããŸããïŒããã¯æ®å¿µã§ãïŒã BookieãµãŒããŒã远å ãããšãã·ã¹ãã ãæ°Žå¹³æ¹åã«æ¡åŒµã§ããŸãã
å
åž³/å
åž³
åããµãŒããŒã«è€è£œãããå³å¯ã«é åºä»ããããã¬ã³ãŒãã®ã»ãããç·šæããŸãã å
åž³ã¯ãèå¥åã®å¢å é ã«äžŠã¹ãããŸãã ã¬ããªã«ãµãŒããŒããŒã¿ã¯ãZookeeperã®å
åž³ã¬ã³ãŒãã«ä¿åãããŸãã
éèŠãªå¶é1 ã å
åž³ã«æžã蟌ãããšãã§ããã®ã¯1人ã®äœå®¶ã®ã¿ã§ãã ãããã£ãŠãå
åž³ã¯ã¹ã±ãŒãªã³ã°ã®åäœã§ãã äžé£ã®æäœã§ç°ãªãå
åž³ã«åé¢ã§ããªãå Žåãããã©ãŒãã³ã¹å¶éã¯å
åž³ãžã®æžã蟌ã¿é床ã«ãªããŸããããã¯ã¬ããªã±ãŒã·ã§ã³ä¿æ°ã«äŸåããŸãïŒBK Clientã¯äžŠè¡ããŠæžã蟌ããããçŽç·çã§ã¯ãããŸããïŒã
åã¬ã³ãŒãã®å
åž³ã«æžã蟌ããšããäžæã®å¢å ããã·ãªã¢ã«æŽæ°çªå·ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠçºè¡ãããŸããããã«ãããèšé²ãžã®éåæã¢ãããŒããç·šæã§ããŸãã åæã«ãBookKeeperã¯ãçªå·ïŒn + 1ïŒã®æžãèŸŒã¿æäœããããå°ããçªå·ã®ãã¹ãŠã®æžãèŸŒã¿æäœãå®äºããå Žåã«ã®ã¿å®äºããããšãä¿èšŒããŸãã ããã¯éåžžã«äŸ¿å©ãªæ©èœã§ãããæäœã®å®äºã«é¢ããã¯ã©ã€ã¢ã³ããžã®èŠåçãªéç¥ãå¿
èŠãªå Žåã§ããå Žåã«ãã£ãŠã¯æžãèŸŒã¿æäœã®ããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããããšãã§ããŸãã
éèŠãªå¶é2 ã ç¡å¶éã®æ°ã®ãªãŒããŒãå°åž³ãã䞊è¡ããŠèªã¿åãããšãã§ããŸãããå°åž³ãéããŠãããšããã€ãŸãçŸåšèª°ãæžããŠããªããšãã«èªã¿åããèš±å¯ãããŸãã
äžè¬ã«ãå
åž³ã«å¯Ÿããäžèšã®å¶éã¯éèŠãªå¶éã§ãããå Žåã«ãã£ãŠã¯ç¯å²ã倧å¹
ã«çããå¯èœæ§ããããŸãã
ããšãã°ãæ¯ç§æ°ããå
åž³ãéããæžã蟌ã¿ãéããŸãã ããã¯ãèªã¿åãåŠçã1ç§é
ããããšãæå³ããŸãã å
åž³ã¯èå¥åã¿ã€ãLongã§ããããã1msããšã«åé¡ãªãéãããšãã§ããŸãããZookeeperã®è² è·ãå¢å ããç¶æ³ãçºçããŸãããããã¯ãã§ã«å€§ããªè² è·ã«ãªããŸãã ç§ãã¡ã解決ããããšããŠããåé¡ã§ã¯ããã®å¶éã¯åãå
¥ããããŸããã
å¥ã®äŸãšããŠãèšé²ã®åŒ·åºŠã¯ã1ã€ã®å°åž³å
ã®ãµãŒããŒã®ããã©ãŒãã³ã¹ãååã§ãªãããšã§ãããã¢ããªã±ãŒã·ã§ã³ããžãã¯ã¯ãè€æ°ã®å
åž³éã§èšé²ãåå²ã§ããªãããšã§ãã 圌ããèšãããã«ããã¹ãŠãå°çããŸããã ãã®å¶éãã¿ã¹ã¯ã®ãã¬ãŒã ã¯ãŒã¯å
ã§ãã€ãã¹ãããŸããããã®æ¹æ³ã§ãã¹ãŠã®ãªããžã§ã¯ããããŒãã£ã·ã§ã³åå²ã§ãããã®å¶éãåé¿ã§ããªãããŒã¿ã¹ããªãŒã ã1ã€ãããããŸããã§ããã
å
åž³èå¥åã¹ãã¬ãŒãž
å
åž³èå¥åã¯Zookeeperã«ä¿åãããŠãããããç¹°ãè¿ã䜿çšã§ããŸããããã¹ãŠãåçŽã§ã¯ãããŸããã è€æ°ã®ãã©ã¬ã«å
åž³ãã§ãŒã³ãå¿
èŠãªå Žåãç¹å®ã®ãã§ãŒã³ã«å±ããå
åž³èå¥åãå¥ã
ã«ã©ããã«ä¿åããå¿
èŠããããŸããBookKeeperã¯ãããæ¯æŽããŸããã å¥ã®ãªãã·ã§ã³ã¯ãZookeeperã§åå¥ã®ãã¹ãæã€ããã«ãã¿ã¹ã¯ããšã«åé¢ãããBookieãµãŒããŒãåå¥ã«å±éããããšã§ãïŒããã¯ç§ãã¡ã«ã¯äžé©åœã§ããïŒã
Apache Zookeeperèªäœã远å ã®å¶éã課ããŠããããšã«ã泚æããå¿
èŠããããŸããããããèæ
®ããå¿
èŠããããŸãã
- ããŒã¿ããŒã¹å
šäœããµãŒããŒã®ã¡ã¢ãªã«é
眮ããå¿
èŠããããŸãïŒå€ãã®å
åž³ãéããŠåé€ããªãå ŽåïŒããã€ããµãŒããŒã«ååãªRAMããªããªãå¯èœæ§ããããŸãïŒãã¡ããããã®äºå®ã¯å²åŒãããŸããïŒã
- 芪Zookeeperãã£ã¬ã¯ããªã«å€ãã®èŠçŽ ãããå Žåã1MBã®æå€§Zookeeperããã±ãŒãžãµã€ãºã«åãŸããªãå Žåããã£ã¬ã¯ããªãªã¹ããåä¿¡ãããšãã«ãšã©ãŒãçºçããå¯èœæ§ããããŸãã
Apache BookKeeperã®äœæè
ã¯ã Hierarchical Ledger Managerãå°å
¥ããããšã§åé¡2ã®è§£æ±ºçãæäŸããŸããããã¯ãLongãã¬ãã«ã«åå²ããããšã«ãããéå±€ããªãŒå
ã®ãã©ãããªèå¥åã¹ããŒã¹ãç·šæããŸãã ããã©ã«ãã¯Flat Ledger Managerã§ã ãããã¯ãæ°ããã¬ãžã£ãŒãé »ç¹ã«çæããå Žåã«ã¯æããã«é©çšãããŸããã
å
åž³å
¥å/èšé²
ã¬ã³ãŒãã¯å
åž³ã®èŠçŽ ã§ãã å
åž³ã®åã¬ã³ãŒãã«ã¯ã0ããé£ç¶ããå¢å ããèå¥åããããŸããã¬ã³ãŒãã«ã¯ããã€ãé
åã®åœ¢åŒã§ä»»æã®ããŒã¿ãå«ãŸããŸãã ã¬ã³ãŒãã®è¿œå ã¯ãåæã¢ãŒããšéåæã¢ãŒãã§å®è¡ã§ããŸãã éåæã¢ãŒãã§ã¯ãéåžžã©ããããã«ããŠãŒã¶ãŒã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã ãã§ã«è¿°ã¹ãããã«ãéåæéšåã¯ãã¬ã³ãŒããå
åž³ã«è¿œå ããããšãã«ãã€ãŸãèŠåæ£ããæ¹æ³ã§åŒã³åºãããŸãã
ãããããããã3ã€ã®æŠå¿µ-BookieãLedgerïŒå
åž³ïŒãããã³Ledger EntryïŒã¬ã³ãŒãïŒã¯ãApache BookKeeperã®äœæ¥ãçè§£ããããã®æãéèŠãªèŠçŽ ã§ãã
çµè«ã®ä»£ããã«
Apache BookKeeperã¯éã®åŒŸäžžãéæ³ã®äžžè¬ã®ããã«ã¯èŠããŸããããããã¯CAPå®çã«æ±ºããŠççŸããªãéåžžã«ç¹æ®ãªè§£æ±ºçã§ããã解決ãããåé¡ã«ããªãã®æ°ã®å¶éã課ããŸãã 幞ããªããšã«ããã®ã³ã³ããŒãã³ãã䜿çšããŠã·ã¹ãã ã®æ°Žå¹³ã¹ã±ãŒãªã³ã°ãæäŸã§ããŸããããèŠä»¶ããµããŒãããããã«ãéäžã§ããã€ãã®ãšã³ãžãã¢ãªã³ã°ã®åé¡ã解決ããå¿
èŠããããŸããã
ãã®èšäºã¯å
¥éçãªäºå®èª¿æ»ã§ãã Apache BookKeeperã§Hello Worldãç°¡åã«ããããšã¯éåžžã«ç°¡åã§ããèè
ã¯è©³çްãªã¹ã¿ãŒãã¢ããã¬ã€ããæäŸããŸããã Scalaã§ã®å®è£
ãæžãçŽããŸããã
RocksDBã«ã€ããŠ
RocksDBãéžã°ããçç±ã¯ã髿§èœã§ãããã¢ãããã¯ãã±ããæžã蟌ã¿ïŒãã¹ãŠãŸãã¯äœãããªãïŒããµããŒãããŠããããã§ããããã«ãããç·æ¥äºæ
ã®å Žåã«æ£ããåäœãä¿èšŒã§ããŸãã ã¿ã¹ã¯ã®äžéšãšããŠãåã®ç¶æ
ãRocksDBããèªã¿èŸŒã¿ãå
åž³ãããã¹ãŠã®ã¢ã¯ã·ã§ã³ãæžç®ããRAMã«æçµç¶æ
ã圢æããŠRocksDBã«ã¢ãããã¯ã«æžã蟌ã¿ãŸããããåŠçããå
åž³çªå·ãã¬ã³ãŒãã«ç§»åããŸããã