ç§ã®æŽ»åã®æ§è³ªäžãåºåããã£ã³ããã¯ã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ã«ã¢ãããã¯ã«æžã蟌ã¿ãŸããããåŠçããå åž³çªå·ãã¬ã³ãŒãã«ç§»åããŸããã