å埩åãããã¹ã±ãŒã©ãã«ãªåæ£ã·ã¹ãã ãæ§ç¯ããããã®çµææŽåæ§ãã¿ãŒã³ãæ·±ãæãäžããã°ããŒãã«ãªãŒãã£ãšã³ã¹åãã«èšèšãããŠããŸãã
ããŒã¿ã®æŽåæ§ããã¹ã¿ãŒããïŒçµææŽåæ§ãã¿ãŒã³ãæ¢ã
忣ã·ã¹ãã ã®é åã«ãããŠããã¹ãŠã®ããŒãéã§çµ¶å¯Ÿçãªãªã¢ã«ã¿ã€ã ã®ããŒã¿æŽåæ§ãéæããããšã¯ãèšãç¥ããªã課é¡ãšãªãåŸãŸããã·ã¹ãã ãè€éåããç¹ã«åºå€§ãªå°ççè·é¢ã倿§ãªã¿ã€ã ãŸãŒã³ã«ããããŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãããŠèŠæš¡ãæ¡å€§ããã«ã€ããŠãåŒ·ãæŽåæ§ã®è¿œæ±ã¯ãå€ãã®å Žåãå¯çšæ§ãšããã©ãŒãã³ã¹ãç ç²ã«ããããšã«ãªããŸããããã§ãçµææŽåæ§ã®æŠå¿µã匷åãã€å®çšçãªãã©ãã€ã ãšããŠæµ®äžããŸãããã®ããã°èšäºã§ã¯ãçµææŽåæ§ãšã¯äœãããªãçŸä»£ã®åæ£ã¢ãŒããã¯ãã£ã«ãšã£ãŠãããéèŠãªã®ããæ·±ãæãäžããããã广çã«ç®¡çããããã®æ§ã ãªãã¿ãŒã³ãšæŠç¥ãæ¢ããŸãã
ããŒã¿æŽåæ§ã¢ãã«ã®çè§£
çµææŽåæ§ãçã«çè§£ããåã«ãããŒã¿æŽåæ§ã¢ãã«ã®ããåºç¯ãªå šäœåãçè§£ããããšãäžå¯æ¬ ã§ãããããã®ã¢ãã«ã¯ãããŒã¿ã«å ãããã倿Žã忣ã·ã¹ãã ã®ç°ãªãéšåã§ãã€ãã©ã®ããã«å¯èŠåãããããèŠå®ããŸãã
åŒ·ãæŽåæ§
ç·åœ¢åå¯èœæ§ãšãåŒã°ããåŒ·ãæŽåæ§ã¯ããã¹ãŠã®èªã¿åããææ°ã®æžã蟌ã¿ãè¿ãããšãä¿èšŒããŸããåŒ·ãæŽåæ§ã®ããã·ã¹ãã ã§ã¯ããã¹ãŠã®æäœãåäžã®ã°ããŒãã«ãªæç¹ã§è¡ããããã®ããã«èŠããŸããããã¯äºæž¬å¯èœã§çŽæçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãããéåžžãããŒãéã®ããªãã®èª¿æŽãªãŒããŒããããå¿ èŠãšããæ¬¡ã®åé¡ã«ã€ãªããå¯èœæ§ããããŸãã
- ã¬ã€ãã³ã·ã®å¢å : æäœã¯è€æ°ã®ããŒãããã®ç¢ºèªãåŸ ã€å¿ èŠããããå¿çãé ããªããŸãã
- å¯çšæ§ã®äœäž: ã·ã¹ãã ã®å€§éšåãå©çšäžèœã«ãªã£ãå Žåãäžéšã®ããŒãããŸã 皌åããŠããŠããæžã蟌ã¿ãèªã¿åãããããã¯ãããå¯èœæ§ããããŸãã
- ã¹ã±ãŒã©ããªãã£ã®å¶é: å¿ èŠãªèª¿æŽã¯ãã·ã¹ãã ãæ¡åŒµããã«ã€ããŠããã«ããã¯ã«ãªãå¯èœæ§ããããŸãã
å€ãã®ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ãç¹ã«é«ããã©ã³ã¶ã¯ã·ã§ã³éãæã€ãã®ããäžçäžã®ãŠãŒã¶ãŒã«äœã¬ã€ãã³ã·ã®ã¢ã¯ã»ã¹ãå¿ èŠãšãããã®ã«ãšã£ãŠãåŒ·ãæŽåæ§ã®ãã¬ãŒããªãã¯æ³å€ãªãã®ãšãªãå¯èœæ§ããããŸãã
çµææŽåæ§
çµææŽåæ§ã¯ãããåŒ±ãæŽåæ§ã¢ãã«ã§ãããç¹å®ã®ããŒã¿é ç®ã«æ°ããæŽæ°ãè¡ãããªãå Žåãæçµçã«ãã®é ç®ãžã®ãã¹ãŠã®ã¢ã¯ã»ã¹ãæåŸã«æŽæ°ãããå€ãè¿ãããšãä¿èšŒããŸããç°¡åã«èšãã°ãæŽæ°ã¯æéã®çµéãšãšãã«ã·ã¹ãã å šäœã«äŒæããŸããç°ãªãããŒããç°ãªãããŒãžã§ã³ã®ããŒã¿ãä¿æããæéããããããããŸãããããã®çžéã¯äžæçãªãã®ã§ããæçµçã«ã¯ããã¹ãŠã®ã¬ããªã«ãåãç¶æ ã«åæããŸãã
çµææŽåæ§ã®äž»ãªå©ç¹ã¯æ¬¡ã®ãšããã§ãã
- é«å¯çšæ§: ããŒãã¯ãä»ã®ããŒããšããã«éä¿¡ã§ããªãå Žåã§ããèªã¿åããšæžã蟌ã¿ãåãå ¥ãç¶ããããšãã§ããŸãã
- ããã©ãŒãã³ã¹ã®åäž: æäœã¯ããã¹ãŠã®ä»ã®ããŒãããã®æ¿èªãå¿ ãããåŸ ã€å¿ èŠããªããããããè¿ éã«å®äºã§ããŸãã
- ã¹ã±ãŒã©ããªãã£ã®åäž: 調æŽãªãŒããŒãããã®åæžã«ãããã·ã¹ãã ããã容æã«æ¡åŒµã§ããŸãã
峿ã®äžè²«æ§ããªãããšã¯æžå¿µããããããããŸããããããã¯ãå€§èŠæš¡ãªãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ãeã³ããŒã¹ã®å·šäººãã°ããŒãã«ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ãªã©ãå€ãã®é«å¯çšæ§ããã³ã¹ã±ãŒã©ãã«ãªã·ã¹ãã ãäŸæ ããŠããã¢ãã«ã§ãã
CAPå®çãšçµææŽåæ§
çµææŽåæ§ãšã·ã¹ãã èšèšã®é¢ä¿ã¯ãCAPå®çã«æ¬è³ªçã«çµã³ã€ããŠããŸãããã®åæ£ã·ã¹ãã ã®åºæ¬çãªå®çã¯ã忣ããŒã¿ã¹ãã¢ã以äžã®3ã€ã®ä¿èšŒã®ãã¡ãåæã«2ã€ããæäŸã§ããªããšè¿°ã¹ãŠããŸãã
- æŽåæ§ (C): ãã¹ãŠã®èªã¿åãã¯ææ°ã®æžã蟌ã¿ããŸãã¯ãšã©ãŒãåãåããŸããïŒããã¯åŒ·ãæŽåæ§ãæããŸãïŒã
- å¯çšæ§ (A): ãã¹ãŠã®ãªã¯ãšã¹ãã¯ãææ°ã®æžã蟌ã¿ãå«ããšããä¿èšŒãªãã«ãïŒãšã©ãŒã§ã¯ãªãïŒå¿çãåãåããŸãã
- åæèæ§ (P): ããŒãéã®ãããã¯ãŒã¯ã«ãã£ãŠä»»æã®æ°ã®ã¡ãã»ãŒãžãç Žæ£ïŒãŸãã¯é å»¶ïŒãããŠããã·ã¹ãã ã¯åäœãç¶ããŸãã
å®éã«ã¯ããããã¯ãŒã¯åæïŒPïŒã¯ãç¹ã«ã°ããŒãã«ãªåæ£ã·ã¹ãã ã«ãããŠé¿ããããªãçŸå®ã§ãããããã£ãŠãèšèšè ã¯ãåæãçºçãããšãã«æŽåæ§ïŒCïŒãšå¯çšæ§ïŒAïŒã®ã©ã¡ããåªå ããããéžæããªããã°ãªããŸããã
- CPã·ã¹ãã : ãããã®ã·ã¹ãã ã¯ãæŽåæ§ãšåæèæ§ãåªå ããŸãããããã¯ãŒã¯åæã®éãæ®ãã®ããŒãéã®ããŒã¿æŽåæ§ã確ä¿ããããã«ãå¯çšæ§ãç ç²ã«ããŠå©çšäžèœã«ãªãããšããããŸãã
- APã·ã¹ãã : ãããã®ã·ã¹ãã ã¯ãå¯çšæ§ãšåæèæ§ãåªå ããŸãããããã¯ãŒã¯åæã®éãå©çšå¯èœã§ããç¶ããŸãããããã¯å€ãã®å Žåã峿æŽåæ§ãç ç²ã«ããããšãæå³ããçµææŽåæ§ã«ã€ãªãããŸãã
ã»ãšãã©ã®çŸä»£ã®ã°ããŒãã«åæ£ã·ã¹ãã ã¯ãé«å¯çšæ§ãšã¹ã±ãŒã©ããªãã£ãç®æããŠãããå¿ ç¶çã«APã·ã¹ãã ã«åŸåãããã®çµæãšããŠçµææŽåæ§ãåãå ¥ããŠããŸãã
çµææŽåæ§ãé©åãªã®ã¯ãã€ãïŒ
çµææŽåæ§ã¯ããã¹ãŠã®åæ£ã·ã¹ãã ã«ãšã£ãŠäžèœè¬ã§ã¯ãããŸããããã®é©åæ§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®èŠä»¶ãšãé³è åããããŒã¿ã«å¯Ÿãã蚱容å¯èœãªèæ§ã«å€§ããäŸåããŸããç¹ã«æ¬¡ã®ç¶æ³ã«é©ããŠããŸãã
- èªã¿åãè² è·ã®é«ãã¯ãŒã¯ããŒã: èªã¿åããæžã蟌ã¿ãããã¯ããã«é »ç¹ãªã¢ããªã±ãŒã·ã§ã³ã¯ãé³è åããèªã¿åããé³è åããæžã蟌ã¿ããã圱é¿ãå°ãªãããã倧ããªæ©æµãåããŸããäŸãšããŠã¯ã補åã«ã¿ãã°ã®è¡šç€ºããœãŒã·ã£ã«ã¡ãã£ã¢ã®ãã£ãŒãããã¥ãŒã¹èšäºãªã©ããããŸãã
- éã¯ãªãã£ã«ã«ãªããŒã¿: äŒæã®ããããªé å»¶ãäžæçãªäžæŽåããããžãã¹ããŠãŒã¶ãŒã«é倧ãªåœ±é¿ãäžããªãããŒã¿ããŠãŒã¶ãŒèšå®ãã»ãã·ã§ã³ããŒã¿ãåæã¡ããªã¯ã¹ãªã©ãèããŠã¿ãŠãã ããã
- ã°ããŒãã«ãªåæ£: äžçäžã®ãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ã¯ãå€ãã®å Žåãå¯çšæ§ãšäœã¬ã€ãã³ã·ãåªå ããå¿ èŠããããçµææŽåæ§ãå¿ èŠãªãã¬ãŒããªããšãªããŸãã
- é«ã皌åæéãå¿ èŠãšããã·ã¹ãã : ããŒã¯ã·ã§ããã³ã°ã·ãŒãºã³äžã«ã¢ã¯ã»ã¹å¯èœã§ããç¶ããå¿ èŠãããeã³ããŒã¹ãã©ãããã©ãŒã ããŸãã¯éèŠãªã€ã³ãã©ã¹ãã©ã¯ãã£ãµãŒãã¹ã
éã«ãåŒ·ãæŽåæ§ãå¿ èŠãšããã·ã¹ãã ã«ã¯ãéèååŒïŒäŸïŒéè¡æ®é«ãæ ªåŒååŒïŒãéå°è²©å£²ã鲿¢ããå¿ èŠãããåšåº«ç®¡çããŸãã¯æäœã®å³å¯ãªé åºä»ããæéèŠã§ããã·ã¹ãã ãå«ãŸããŸãã
äž»èŠãªçµææŽåæ§ãã¿ãŒã³
çµææŽåæ§ã广çã«å®è£ ã管çããã«ã¯ãç¹å®ã®ãã¿ãŒã³ãšãã¯ããã¯ãæ¡çšããå¿ èŠããããŸããæ žãšãªã課é¡ã¯ãç°ãªãããŒããä¹é¢ãããšãã«çºçããç«¶åãåŠçããæçµçãªåæã確å®ã«ããããšã§ãã
1. ã¬ããªã±ãŒã·ã§ã³ãšãŽã·ãããããã³ã«
ã¬ããªã±ãŒã·ã§ã³ã¯åæ£ã·ã¹ãã ã®åºæ¬ã§ããæçµçã«æŽåæ§ã®ããã·ã¹ãã ã§ã¯ãããŒã¿ã¯è€æ°ã®ããŒãã«ã¬ããªã±ãŒããããŸããæŽæ°ã¯ãœãŒã¹ããŒãããä»ã®ã¬ããªã«ã«äŒæãããŸãããŽã·ãããããã³ã«ïŒãšããããã¯ãããã³ã«ãšãåŒã°ããïŒã¯ããããå®çŸããããã®äžè¬çã§å ç¢ãªæ¹æ³ã§ãããŽã·ãããããã³ã«ã§ã¯ã次ã®ããã«ãªããŸãã
- åããŒãã¯ãä»ã®ããŒãã®ãµãã»ãããšå®æçãã€ã©ã³ãã ã«éä¿¡ããŸãã
- éä¿¡äžãããŒãã¯èªèº«ã®çŸåšã®ç¶æ ãšæã£ãŠããæŽæ°ã«é¢ããæ å ±ã亀æããŸãã
- ãã®ããã»ã¹ã¯ããã¹ãŠã®ããŒããææ°ã®æ å ±ãæã€ãŸã§ç¶ããŸãã
äŸ: Apache Cassandraã¯ãããŒãæ€åºãšããŒã¿äŒæã«ãã¢ããŒãã¢ã®ãŽã·ããã¡ã«ããºã ã䜿çšããŠããŸããã¯ã©ã¹ã¿å ã®ããŒãã¯ãèªèº«ã®ç¶æ ãšããŒã¿ã«é¢ããæ å ±ãç¶ç¶çã«äº€æããæŽæ°ãæçµçã«ã·ã¹ãã å šäœã«åºããããã«ããŸãã
2. ãã¯ãã«ã¯ããã¯
ãã¯ãã«ã¯ããã¯ã¯ã忣ã·ã¹ãã ã«ãããå æé¢ä¿ãšäžŠè¡æŽæ°ãæ€åºããããã®ã¡ã«ããºã ã§ããåããã»ã¹ã¯ãã·ã¹ãã å ã®åããã»ã¹ã«å¯Ÿå¿ããã«ãŠã³ã¿ã®ãã¯ãã«ãç¶æããŸããã€ãã³ããçºçããããããã»ã¹ãããŒã«ã«ç¶æ ãæŽæ°ãããšããã¯ãã«å ã®èªèº«ã®ã«ãŠã³ã¿ãã€ã³ã¯ãªã¡ã³ãããŸããã¡ãã»ãŒãžãéä¿¡ãããšãã¯ãçŸåšã®ãã¯ãã«ã¯ããã¯ãå«ããŸããã¡ãã»ãŒãžãåä¿¡ãããšãã¯ãèªèº«ã®ã«ãŠã³ã¿ãšåä¿¡ããã«ãŠã³ã¿ã®æå€§å€ãåããã»ã¹ã«ã€ããŠååŸããããšã«ããããã¯ãã«ã¯ããã¯ãæŽæ°ããŸãã
ãã¯ãã«ã¯ããã¯ã¯æ¬¡ã®èå¥ã«åœ¹ç«ã¡ãŸãã
- å æé¢ä¿ã®ããã€ãã³ã: ãã¯ãã«ã¯ããã¯Aããã¯ãã«ã¯ããã¯B以äžã§ããå ŽåïŒèŠçŽ ããšã®æ¯èŒïŒãã€ãã³ãAã¯ã€ãã³ãBã®åã«çºçããŸããã
- 䞊è¡ã€ãã³ã: ãã¯ãã«ã¯ããã¯AãB以äžã§ããBãA以äžã§ããªãå Žåããããã®ã€ãã³ãã¯äžŠè¡ããŠããŸãã
ãã®æ å ±ã¯ãç«¶å解決ã«ãšã£ãŠéåžžã«éèŠã§ãã
äŸ: Amazon DynamoDBïŒå éšçã«ïŒã®ãããªå€ãã®NoSQLããŒã¿ããŒã¹ã¯ãããŒã¿é ç®ã®ããŒãžã§ã³ã远跡ããããŒãžãå¿ èŠãªäžŠè¡æžã蟌ã¿ãæ€åºããããã«ããã¯ãã«ã¯ããã¯ã®äžçš®ã䜿çšããŠããŸãã
3. æçµæžã蟌ã¿è åªå (LWW)
æçµæžã蟌ã¿è åªå (LWW) ã¯ãåçŽãªç«¶å解決æŠç¥ã§ããåãããŒã¿é ç®ã«å¯ŸããŠè€æ°ã®ç«¶åããæžã蟌ã¿ãçºçããå Žåãææ°ã®ã¿ã€ã ã¹ã¿ã³ããæã€æžã蟌ã¿ã決å®çãªããŒãžã§ã³ãšããŠéžæãããŸããããã«ã¯ããææ°ãã®ã¿ã€ã ã¹ã¿ã³ããæ±ºå®ããä¿¡é Œã§ããæ¹æ³ãå¿ èŠã§ãã
- ã¿ã€ã ã¹ã¿ã³ãã®çæ: ã¿ã€ã ã¹ã¿ã³ãã¯ãã¯ã©ã€ã¢ã³ããæžã蟌ã¿ãåãåããµãŒããŒããŸãã¯éäžåæéãµãŒãã¹ã«ãã£ãŠçæã§ããŸãã
- 課é¡: ããŒãéã®ã¯ããã¯ããªããã¯å€§ããªåé¡ãšãªãåŸãŸããã¯ããã¯ãåæãããŠããªãå ŽåããåŸã®ãæžã蟌ã¿ããæ©ãããšèŠãªãããå¯èœæ§ããããŸãã解決çãšããŠã¯ãåæã¯ããã¯ïŒäŸïŒNTPïŒãŸãã¯ç©çæéãšè«çã€ã³ã¯ãªã¡ã³ããçµã¿åããããã€ããªããè«çã¯ããã¯ã䜿çšããããšãæããããŸãã
äŸ: Redisã¯ãã¬ããªã±ãŒã·ã§ã³çšã«æ§æãããŠããå Žåããã§ã€ã«ãªãŒããŒã·ããªãªäžã®ç«¶å解決ã«LWWããã䜿çšããŸãããã¹ã¿ãŒã倱æãããšãã¬ããªã«ãæ°ãããã¹ã¿ãŒã«ãªãããšãã§ããäž¡æ¹ã§äžŠè¡ããŠæžã蟌ã¿ãçºçããå Žåãææ°ã®ã¿ã€ã ã¹ã¿ã³ããæã€æ¹ãåªå ãããŸãã
4. å ææŽåæ§
å³å¯ã«ã¯ãçµææŽåæ§ãã§ã¯ãããŸããããå ææŽåæ§ã¯åºæ¬çãªçµææŽåæ§ããã匷åãªä¿èšŒã§ãããçµææŽåæ§ã·ã¹ãã ã§ããæ¡çšãããŸããããã¯ãããã€ãã³ããå¥ã®ã€ãã³ãã«å æçã«å è¡ããå Žåã2çªç®ã®ã€ãã³ããèŠããã¹ãŠã®ããŒããæåã®ã€ãã³ããèŠãå¿ èŠãããããšãä¿èšŒããŸããå æé¢ä¿ã®ãªãæäœã¯ãç°ãªãããŒãã«ãã£ãŠç°ãªãé åºã§èŠãããããšããããŸãã
ããã¯ãæäœã®å æå±¥æŽã远跡ããããã«ããã¯ãã«ã¯ããã¯ãŸãã¯é¡äŒŒã®ã¡ã«ããºã ã䜿çšããŠå®è£ ãããããšããããããŸãã
äŸ: Amazon S3ã®æ°èŠãªããžã§ã¯ãã«å¯Ÿããæžã蟌ã¿åŸã®èªã¿åãæŽåæ§ããäžæžãPUTããã³DELETEã«å¯ŸããçµææŽåæ§ã¯ãäžéšã®æäœã«ã¯åŒ·ãæŽåæ§ãæäŸããä»ã®æäœã«ã¯ããåŒ±ãæŽåæ§ãæäŸããã·ã¹ãã ã®äŸã§ãããå€ãã®å Žåãå æé¢ä¿ã«äŸåããŠããŸãã
5. ã»ããèª¿æŽ (CRDTs)
ç«¶åããªãŒã¬ããªã±ãŒãããŒã¿å (CRDTs) ã¯ãã¬ããªã«ãžã®äžŠè¡æŽæ°ãè€éãªç«¶å解決ããžãã¯ãäžå€®æ©é¢ãå¿ èŠãšããã«èªåçã«ããŒãžã§ããããã«èšèšãããããŒã¿æ§é ã§ãããããã¯æ¬è³ªçã«çµææŽåæ§ãšé«å¯çšæ§ã®ããã«èšèšãããŠããŸãã
CRDTã«ã¯äž»ã«2ã€ã®åœ¢åŒããããŸãã
- ç¶æ ããŒã¹CRDT (CvRDTs): ã¬ããªã«ã¯èªèº«ã®ç¶æ å šäœã亀æããŸããããŒãžæäœã¯çµåæ³åãäº€ææ³åãã¹ãçæ§ãæã¡ãŸãã
- æäœããŒã¹CRDT (OpRDTs): ã¬ããªã«ã¯æäœã亀æããŸããïŒå æãããŒããã£ã¹ãã®ãããªïŒã¡ã«ããºã ããæäœãå æé åºã§å šãŠã®ã¬ããªã«ã«é ä¿¡ãããããšãä¿èšŒããŸãã
äŸ: 忣NoSQLããŒã¿ããŒã¹ã§ããRiak KVã¯ãã«ãŠã³ã¿ãŒãã»ããããããããªã¹ãã®CRDTããµããŒãããŠãããéçºè ãç°ãªãããŒãã§ããŒã¿ãåæã«æŽæ°ãããèªåçã«ããŒãžãããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãå¯èœã«ããŸãã
6. ããŒãžå¯èœãªããŒã¿æ§é
CRDTãšåæ§ã«ãäžéšã®ã·ã¹ãã ã¯ã䞊è¡ãã倿ŽåŸãããŒãžã§ããããã«èšèšãããç¹æ®ãªããŒã¿æ§é ã䜿çšããŸããããã«ã¯ãããŒãžã§ã³ãããŒã¿ã®å·®åãã€ã³ããªãžã§ã³ãã«çµåã§ããããã«ä¿åããããšããã䌎ããŸãã
- æäœç倿 (OT): å ±åç·šéã·ã¹ãã ïŒGoogleããã¥ã¡ã³ããªã©ïŒã§äžè¬çã«äœ¿çšãããOTã¯ãè€æ°ã®ãŠãŒã¶ãŒããã®äžŠè¡ç·šéããå°çé åºãã°ãã°ãã§ãã£ãŠããäžè²«ããé åºã§é©çšãããããšãä¿èšŒããŸãã
- ããŒãžã§ã³ãã¯ãã«: ãã¯ãã«ã¯ããã¯ã®ããåçŽãªåœ¢åŒã§ããããŒãžã§ã³ãã¯ãã«ã¯ãã¬ããªã«ãèªèããŠããããŒã¿ã®ããŒãžã§ã³ã远跡ããç«¶åãæ€åºããŠè§£æ±ºããããã«äœ¿çšãããŸãã
äŸ: CRDTèªäœã§ã¯ãããŸããããGoogleããã¥ã¡ã³ãã䞊è¡ç·šéãåŠçãããããããŠãŒã¶ãŒéã§åæããæ¹æ³ã¯ãããŒãžå¯èœãªããŒã¿æ§é ãå®éã«æ©èœããŠããå žåçãªäŸã§ããã誰ããæçµçã«æŽæ°ãããäžè²«æ§ã®ããããã¥ã¡ã³ããèŠãããšãä¿èšŒããŸãã
7. ã¯ã©ãŒã©ã èªã¿åããšæžã蟌ã¿
ã¯ã©ãŒã©ã ã¡ã«ããºã ã¯åŒ·ãæŽåæ§ãšãã°ãã°é¢é£ä»ããããŸãããèªã¿åãããã³æžã蟌ã¿ã¯ã©ãŒã©ã ãµã€ãºã調æŽããããšã§ãçµææŽåæ§ã«ãé©å¿ãããããšãã§ããŸããCassandraã®ãããªã·ã¹ãã ã§ã¯ãæžãèŸŒã¿æäœã¯ãããŒãã®å€æ°ïŒWïŒã«ãã£ãŠæ¿èªãããå Žåã«æåãšèŠãªãããèªã¿åãæäœã¯ãããŒãã®å€æ°ïŒRïŒããå¿çãåŸãããå Žåã«ããŒã¿ãè¿ããŸããããW + R > NïŒNã¯ã¬ããªã«ã®ç·æ°ïŒã§ããã°ãåŒ·ãæŽåæ§ãåŸãããŸããããããW + R <= Nãšãªãå€ãéžæãããšãããé«ãå¯çšæ§ãå®çŸããçµææŽåæ§ã«èª¿æŽããããšãã§ããŸãã
çµææŽåæ§ã®å Žåãé垞次ã®ããã«ãªããŸãã
- æžã蟌ã¿: åäžã®ããŒãïŒW=1ïŒãŸãã¯å°æ°ã®ããŒãã«ãã£ãŠæ¿èªãããããšãã§ããŸãã
- èªã¿åã: ä»»æã®å©çšå¯èœãªããŒãã«ãã£ãŠæäŸãããããšããããäžäžèŽãããå Žåãèªã¿åãæäœã¯ããã¯ã°ã©ãŠã³ãã§ã®èª¿æŽãããªã¬ãŒããããšãã§ããŸãã
äŸ: Apache Cassandraã¯ãèªã¿åããšæžã蟌ã¿ã®æŽåæ§ã¬ãã«ã調æŽã§ããŸããé«å¯çšæ§ãšçµææŽåæ§ãå®çŸããã«ã¯ãW=1ïŒ1ããŒãã«ãã£ãŠæ¿èªãããæžã蟌ã¿ïŒãšR=1ïŒ1ããŒãããã®èªã¿åãïŒãèšå®ããããšãèããããŸããããŒã¿ããŒã¹ã¯ãã®åŸãäžæŽåã解決ããããã«ããã¯ã°ã©ãŠã³ãã§èªã¿åã修埩ãå®è¡ããŸãã
8. ããã¯ã°ã©ãŠã³ã調æŽ/èªã¿åã修埩
çµææŽåæ§ã·ã¹ãã ã§ã¯ãäžæŽåã¯é¿ããããŸãããããã¯ã°ã©ãŠã³ã調æŽãŸãã¯èªã¿åã修埩ã¯ããããã®äžæŽåãæ€åºããŠä¿®æ£ããããã»ã¹ã§ãã
- èªã¿åã修埩: èªã¿åããªã¯ãšã¹ããè¡ããããšããè€æ°ã®ã¬ããªã«ãç°ãªãããŒãžã§ã³ã®ããŒã¿ãè¿ãå Žåãã·ã¹ãã ã¯ææ°ããŒãžã§ã³ãã¯ã©ã€ã¢ã³ãã«è¿ããéåæçã«å€ãã¬ããªã«ãæ£ããããŒã¿ã§æŽæ°ããããšããããŸãã
- ããã¯ã°ã©ãŠã³ãã¹ã«ãã³ãžã³ã°: 宿çãªããã¯ã°ã©ãŠã³ãããã»ã¹ããäžæŽåããªããã¬ããªã«ãã¹ãã£ã³ãã修埩ã¡ã«ããºã ãéå§ããããšãã§ããŸãã
äŸ: Amazon DynamoDBã¯ãèå°è£ã§äžæŽåãæ€åºããŠä¿®åŸ©ããããã®æŽç·Žãããå éšã¡ã«ããºã ãæ¡çšããŠãããæç€ºçãªã¯ã©ã€ã¢ã³ãã®ä»å ¥ãªãã«ããŒã¿ãæçµçã«åæããããšãä¿èšŒããŸãã
çµææŽåæ§ã®èª²é¡ãšèæ ®äºé
匷åã§ããäžæ¹ã§ãçµææŽåæ§ã«ã¯ãã¢ãŒããã¯ããéçºè ãæ éã«èæ ®ããªããã°ãªããªãç¬èªã®èª²é¡ããããŸãã
1. å€ãèªã¿åã
çµææŽåæ§ã®æãçŽæ¥çãªçµæã¯ãå€ãããŒã¿ãèªã¿åãå¯èœæ§ã§ããããã¯æ¬¡ã®åé¡ã«ã€ãªããå¯èœæ§ããããŸãã
- äžè²«æ§ã®ãªããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹: ãŠãŒã¶ãŒã¯ãããã«å€ãæ å ±ãèŠãããšããããæ··ä¹±ãäžæºã«ã€ãªããå¯èœæ§ããããŸãã
- 誀ã£ã決å®: éèŠãªæ±ºå®ã®ããã«ãã®ããŒã¿ã«äŸåããã¢ããªã±ãŒã·ã§ã³ã¯ãæé©ã§ãªãéžæãããå¯èœæ§ããããŸãã
察ç: èªã¿åãä¿®åŸ©ãæ€èšŒä»ãã®ã¯ã©ã€ã¢ã³ãåŽãã£ãã·ã¥ããŸãã¯éèŠãªãã¹ã«å¯ŸããŠããå ç¢ãªæŽåæ§ã¢ãã«ïŒå ææŽåæ§ãªã©ïŒã®ãããªæŠç¥ã䜿çšããŸããããŒã¿ããããã«é å»¶ããå¯èœæ§ãããå Žåã¯ããŠãŒã¶ãŒã«æç¢ºã«äŒããŸãã
2. ç«¶åããæžã蟌ã¿
è€æ°ã®ãŠãŒã¶ãŒãŸãã¯ãµãŒãã¹ããæŽæ°ãåæãããåã«ç°ãªãããŒãäžã§åãããŒã¿é ç®ãåæã«æŽæ°ãããšãç«¶åãçºçããŸãããããã®ç«¶åã解決ããã«ã¯ãLWWãCRDTããŸãã¯ã¢ããªã±ãŒã·ã§ã³åºæã®ããŒãžããžãã¯ã®ãããªå ç¢ãªæŠç¥ãå¿ èŠã§ãã
äŸ: ãªãã©ã€ã³åªå ã®ã¢ããªã±ãŒã·ã§ã³ã§2人ã®ãŠãŒã¶ãŒãåãããã¥ã¡ã³ããç·šéããŠãããšæ³åããŠãã ãããäž¡è ãç°ãªãã»ã¯ã·ã§ã³ã«æ®µèœã远å ããåæã«ãªã³ã©ã€ã³ã«ãªã£ãå Žåãã·ã¹ãã ã¯ã©ã¡ããã倱ãããšãªããããã®è¿œå ãããŒãžããæ¹æ³ãå¿ èŠãšããŸãã
3. ãããã°ãšå¯èŠ³æž¬æ§
çµææŽåæ§ã·ã¹ãã ã«ãããåé¡ã®ãããã°ã¯ãèããè€éã«ãªãå¯èœæ§ããããŸããæŽæ°ã®çµè·¯ããã¬ãŒã¹ããç¹å®ã®ããŒãããªãå€ãããŒã¿ãæã£ãŠããã®ããçè§£ããç«¶å解決ã®å€±æã蚺æããã«ã¯ãæŽç·ŽãããããŒã«ãšæ·±ãçè§£ãå¿ èŠã§ãã
å®è·µçãªæŽå¯: ããŒã¿ã¬ããªã±ãŒã·ã§ã³ã®é å»¶ãç«¶åçãããã³ã¬ããªã±ãŒã·ã§ã³ã¡ã«ããºã ã®å¥å šæ§ã«å¯Ÿããå¯èŠæ§ãæäŸããå æ¬çãªãã®ã³ã°ã忣ãã¬ãŒã·ã³ã°ãããã³ç£èŠããŒã«ã«æè³ããŠãã ããã
4. å®è£ ã®è€éã
çµææŽåæ§ã®æŠå¿µã¯é åçã§ããããããæ£ããå ç¢ã«å®è£ ããããšã¯è€éã«ãªããã¡ã§ããé©åãªãã¿ãŒã³ãéžæãããšããžã±ãŒã¹ãåŠçããã·ã¹ãã ãæçµçã«åæããããšãä¿èšŒããã«ã¯ãæ éãªèšèšãšãã¹ããå¿ èŠã§ãã
å®è·µçãªæŽå¯: LWWã®ãããªããåçŽãªçµææŽåæ§ãã¿ãŒã³ããå§ããããŒãºã®é²åãšçµéšã®èç©ã«å¿ããŠCRDTã®ãããªããæŽç·Žããããã¿ãŒã³ãåŸã ã«å°å ¥ããŠãã ããããã®è€éãã®äžéšãæœè±¡åãããããŒãžããµãŒãã¹ã掻çšããŸãããã
5. ããžãã¹ããžãã¯ãžã®åœ±é¿
ããžãã¹ããžãã¯ã¯çµææŽåæ§ã念é ã«çœ®ããŠèšèšããå¿ èŠããããŸããæ£ç¢ºã§ææ°ã®ç¶æ ã«äŸåããæäœã¯ã倱æãããäºæãã¬åäœããããããå¯èœæ§ããããŸããããšãã°ã顧客ãååãã«ãŒãã«è¿œå ãããšããã«åšåº«ãæžããeã³ããŒã¹ã·ã¹ãã ã¯ãåšåº«æŽæ°ããã¹ãŠã®ãµãŒãã¹ãšã¬ããªã«éã§åŒ·ãäžè²«ããŠããªãå Žåãéå°è²©å£²ãåŒãèµ·ããå¯èœæ§ããããŸãã
察ç: äžæçãªäžæŽåã«èæ§ã®ããããžãã¹ããžãã¯ãèšèšããŠãã ãããéèŠãªæäœã«ã€ããŠã¯ãåºç€ãšãªãããŒã¿ã¹ãã¢ãçµææŽåæ§ã§ãã£ãŠããSagaãã¿ãŒã³ãªã©ã®ãã¿ãŒã³ã䜿çšããŠãã€ã¯ããµãŒãã¹éã®åæ£ãã©ã³ã¶ã¯ã·ã§ã³ã管çããããšãæ€èšããŠãã ããã
ã°ããŒãã«ã«çµææŽåæ§ã管çããããã®ãã¹ããã©ã¯ãã£ã¹
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãçµææŽåæ§ãåãå ¥ããããšã¯ãã°ãã°å¿ èŠäžå¯æ¬ ã§ãã以äžã«ããã€ãã®ãã¹ããã©ã¯ãã£ã¹ã瀺ããŸãã
1. ããŒã¿ãšã¯ãŒã¯ããŒããçè§£ãã
ã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ã¢ã¯ã»ã¹ãã¿ãŒã³ã培åºçã«åæããŠãã ãããçµææŽåæ§ã蚱容ã§ããããŒã¿ãšããã匷ãä¿èšŒãå¿ èŠãšããããŒã¿ãç¹å®ããŸãããã¹ãŠã®ããŒã¿ãã°ããŒãã«ã«åŒ·ãäžè²«ããŠããå¿ èŠã¯ãããŸããã
2. é©åãªããŒã«ãšãã¯ãããžãŒãéžæãã
çµææŽåæ§ã®ããã«èšèšãããŠãããã¬ããªã±ãŒã·ã§ã³ãç«¶åæ€åºãããã³è§£æ±ºã®ããã®å ç¢ãªã¡ã«ããºã ãæäŸããããŒã¿ããŒã¹ãšåæ£ã·ã¹ãã ãéžæããŠãã ãããäŸãšããŠã¯ã次ã®ãããªãã®ããããŸãã
- NoSQLããŒã¿ããŒã¹: Cassandra, Riak, Couchbase, DynamoDB, MongoDBïŒé©åãªæ§æã§ïŒã
- 忣ãã£ãã·ã¥: Redis Cluster, Memcachedã
- ã¡ãã»ãŒãžã³ã°ãã¥ãŒ: Kafka, RabbitMQïŒé忿޿°çšïŒã
3. å ç¢ãªç«¶å解決ãå®è£ ãã
ç«¶åãçºçããªããšä»®å®ããªãã§ãã ãããã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«æãé©ããç«¶å解決æŠç¥ïŒLWWãCRDTsãã«ã¹ã¿ã ããžãã¯ïŒãéžæããæ éã«å®è£ ããŠãã ãããé«ãäžŠè¡æ§ã®ããšã§åŸ¹åºçã«ãã¹ãããŠãã ããã
4. ã¬ããªã±ãŒã·ã§ã³é å»¶ãšæŽåæ§ãç£èŠãã
ããŒãéã®ã¬ããªã±ãŒã·ã§ã³é å»¶ã远跡ããããã®å æ¬çãªç£èŠãå®è£ ããŠãã ãããæŽæ°ãäŒæããã®ã«éåžžã©ããããæéããããããçè§£ããé床ãªé å»¶ã«å¯Ÿããã¢ã©ãŒããèšå®ããŠãã ããã
äŸ: 忣ããŒã¿ã¹ãã¢å šäœã§ããèªã¿åã修埩ã¬ã€ãã³ã·ãããã¬ããªã±ãŒã·ã§ã³ã¬ã€ãã³ã·ãããããŒãžã§ã³çºæ£ããªã©ã®ã¡ããªã¯ã¹ãç£èŠããŸãã
5. åªé ãªå£åãèšèšãã
ã¢ããªã±ãŒã·ã§ã³ã¯ãäžéšã®ããŒã¿ãäžæçã«äžæŽåã§ãã£ãŠããæ©èœãäœäžããç¶æ ã§åäœã§ããå¿ èŠããããŸããå€ãèªã¿åãã«ããé倧ãªé害ãé¿ããŠãã ããã
6. ãããã¯ãŒã¯ã¬ã€ãã³ã·ãæé©åãã
ã°ããŒãã«ã·ã¹ãã ã§ã¯ããããã¯ãŒã¯ã¬ã€ãã³ã·ãäž»èŠãªèŠå ã§ããã¬ã€ãã³ã·ã®åœ±é¿ãæå°éã«æããããã«ã¬ããªã±ãŒã·ã§ã³ãšããŒã¿ã¢ã¯ã»ã¹æŠç¥ãèšèšããŠãã ãããæ¬¡ã®ãããªãã¯ããã¯ãæ€èšããŠãã ããã
- ãªãŒãžã§ã³ãããã€: ãŠãŒã¶ãŒã«ããè¿ãå Žæã«ããŒã¿ã¬ããªã«ããããã€ããŸãã
- éåææäœ: éåæéä¿¡ãšããã¯ã°ã©ãŠã³ãåŠçãåªå ããŸãã
7. ããŒã ãæè²ãã
éçºããŒã ãšéçšããŒã ããçµææŽåæ§ããã®åœ±é¿ãããã³ããã管çããããã«äœ¿çšããããã¿ãŒã³ã«ã€ããŠæ·±ãçè§£ããŠããããšã確èªããŠãã ãããããã¯ãä¿¡é Œæ§ã®é«ãã·ã¹ãã ãæ§ç¯ããã³ç¶æããããã«äžå¯æ¬ ã§ãã
çµè«
çµææŽåæ§ã¯åŠ¥åã§ã¯ãããŸãããç¹ã«ã°ããŒãã«ãªæèã«ãããŠãé«å¯çšæ§ãã¹ã±ãŒã©ãã«ã髿§èœãªåæ£ã·ã¹ãã ãæ§ç¯å¯èœã«ããæ ¹æ¬çãªèšèšäžã®éžæã§ãããã¬ãŒããªããçè§£ãããŽã·ãããããã³ã«ããã¯ãã«ã¯ããã¯ãLWWãCRDTãªã©ã®é©åãªãã¿ãŒã³ãåãå ¥ããäžæŽåã diligently ã«ç£èŠããããšã§ãéçºè ã¯çµææŽåæ§ã®åãå©çšããŠãäžçäžã®ãŠãŒã¶ãŒã«å¹æçã«ãµãŒãã¹ãæäŸããå埩åã®ããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
çµææŽåæ§ããã¹ã¿ãŒããéã®ãã¯ç¶ç¶çãªãã®ã§ãããç¶ç¶çãªåŠç¿ãšé©å¿ãå¿ èŠãšããŸããã·ã¹ãã ãé²åãããŠãŒã¶ãŒã®æåŸ ãå€åããã«ã€ããŠãçžäºæ¥ç¶ãããããžã¿ã«äžçã§ã®ããŒã¿æŽåæ§ãšå¯çšæ§ã確ä¿ããããã«æ¡çšãããæŠç¥ãšãã¿ãŒã³ãå€åããŠããã§ãããã