æçš¿è ïŒ Denis Tsyplakov ããœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããDataArt
åé¡ã®å£°æ
ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ãæ§ç¯ãããšããç¹ã«ã¢ããªã·ãã¯ã¢ãŒããã¯ãã£ããã€ã¯ããµãŒãã¹ã«ç§»è¡ãããšãã®åé¡ã®1ã€ã¯ãå€ãã®å Žåãã©ã³ã¶ã¯ã·ã§ã³ã§ãã åãã€ã¯ããµãŒãã¹ã¯ãç¬èªã®æ©èœã°ã«ãŒããæ åœããå Žåã«ãã£ãŠã¯ãã®ã°ã«ãŒãã«é¢é£ä»ããããããŒã¿ãå¶åŸ¡ããèªåŸçã«ãŸãã¯ä»ã®ãã€ã¯ããµãŒãã¹ã«ãªã¯ãšã¹ããéä¿¡ããããšã«ããããŠãŒã¶ãŒãªã¯ãšã¹ãã«å¯Ÿå¿ã§ããŸãã ããŸããŸãªãã€ã¯ããµãŒãã¹ã«ãã£ãŠå¶åŸ¡ãããããŒã¿ã®äžè²«æ§ã確ä¿ããå¿ èŠããããŸã§ãããã¯ãã¹ãŠæ£åžžã«æ©èœããŸãã
ããšãã°ããã®ã¢ããªã±ãŒã·ã§ã³ã¯å€§èŠæš¡ãªãªã³ã©ã€ã³ã¹ãã¢ã§åäœããŸãã ãšããããçžäºã«åŒ±ãçžäºæ¥ç¶ããã3ã€ã®äºæ¥é åããããŸãã
- å庫-äœããã©ãã§ãã©ã®ããã«ãã©ã®ãããã®æéä¿ç®¡ããããç¹å®ã®ã¿ã€ãã®ååãçŸåšäœååšåº«ãããŠããããªã©
- ååã®éä»-梱å ãåºè·ãé éã®è¿œè·¡ãé 延ã«é¢ããèŠæ ã®åæãªã©
- ååãæµ·å€ã«éãããå Žåã®ååã®ç§»åã«é¢ããçšé¢å ±åã®ç¶æïŒå®éããã®å Žåãç¹å¥ã«äœããäœæããå¿ èŠããããã©ããã¯ããããŸãããããã©ããè¿œå ããããã»ã¹ã«åœã®ãµãŒãã¹ãæ¥ç¶ããŸãïŒã
ãããã®3ã€ã®é åã«ã¯ããããå€ãã®ã°ãã°ããªæ©èœãå«ãŸããŠãããè€æ°ã®ãã€ã¯ããµãŒãã¹ãšããŠè¡šãããšãã§ããŸãã
1ã€ã®åé¡ããããŸãã 人ã補åãè³Œå ¥ããããã梱å ããå® é 䟿ã§éã£ããšããŸãã ãšããããå庫å ã®ååã®åäœã1ã€å°ãªãããšã瀺ãå¿ èŠããããŸããããã¯ãååã®é éããã»ã¹ãéå§ãããããšãããã³ååãäžåœã«éãããå Žåãçšé¢ã®æžé¡ãåŠçããããã§ãã ããã»ã¹ã®2çªç®ãŸãã¯3çªç®ã®æ®µéã§ã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããå ŽåïŒããšãã°ãããŒããã¯ã©ãã·ã¥ããå ŽåïŒãããŒã¿ã¯äžè²«æ§ã®ãªãç¶æ ã«ãªããŸãããã®ãããªé害ã¯ãããããã§ãããããžãã¹ã«ãšã£ãŠéåžžã«äžæå¿«ãªåé¡ïŒçšé¢è·å¡ã®èšªåãªã©ïŒã«ã€ãªãããŸãã
ãã®çš®ã®å€å žçãªã¢ããªã·ãã¯ã¢ãŒããã¯ãã£ã§ã¯ãããŒã¿ããŒã¹å ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ãã£ãŠåé¡ãç°¡åãã€ãšã¬ã¬ã³ãã«è§£æ±ºãããŸãã ãããããã€ã¯ããµãŒãã¹ã䜿çšãããšã©ããªããŸããïŒ ãã¹ãŠã®ãµãŒãã¹ããåãããŒã¿ããŒã¹ã䜿çšããå ŽåïŒããŸãæŽç·ŽãããŠããŸãããããã®å Žåã¯å¯èœã§ãïŒããã®ããŒã¿ããŒã¹ã®æäœã¯ç°ãªãããã»ã¹ããè¡ãããããã»ã¹éã§ãã©ã³ã¶ã¯ã·ã§ã³ãåŒã䌞ã°ãããšã¯ã§ããŸããã
解決ç
ãã®åé¡ã«ã¯ããã€ãã®è§£æ±ºçããããŸãã
- å¥åŠãªããšã«ãåé¡ãç¡èŠã§ããå ŽåããããŸãã é害ã1ãæã«1åããçºçããããã®çµæãæåã§åé€ããããšã§ããžãã¹ã«èš±å®¹ã§ããè²»çšããããããšãããã£ãŠããå Žåããã®ãèŠãæ¹ã«æ³šæãæãããšã¯ã§ããŸããã çšé¢ã®ç³ãç«ãŠãç¡èŠã§ãããã©ããã¯ããããŸããããç¹å®ã®ç¶æ³äžã§ããããå¯èœã§ãããšèããããŸãã
- è£åïŒçœ°éãæ¯æããªã©ãçšé¢ã«å¯Ÿããééçè£åã§ã¯ãããŸããïŒã¯ãåŠçæé ãè€éã«ããããŸããŸãªã¹ãããã®ã°ã«ãŒãã§ããã倱æããããã»ã¹ãæ€åºããŠåŠçã§ããŸãã ããšãã°ãæäœãéå§ããåã«ãåºè·æäœãéå§ããŠããããšãç¹å¥ãªãµãŒãã¹ã«æžã蟌ã¿ãæåŸã«ãã¹ãŠãæ£åžžã«çµäºããããšãããŒã¯ããŸãã ãã®åŸãå®æçã«äžå®å šãªæäœããããã©ããã確èªããæäœãããå Žåã¯ã3ã€ãã¹ãŠã®ããŒã¿ããŒã¹ã調ã¹ãŠãããŒã¿ãäžè²«ããç¶æ ã«ããããšããŸãã ããã¯å®å šã«æ©èœããæ¹æ³ã§ãããåŠçããžãã¯ãå€§å¹ ã«è€éã«ãªããæäœããšã«è¡ãã®ã¯éåžžã«èŠçã§ãã
- 2ãã§ãŒãºãã©ã³ã¶ã¯ã·ã§ã³ãå³å¯ã«èšãã°ãã¢ããªã±ãŒã·ã§ã³ã«é¢é£ããŠåæ£ããããã©ã³ã¶ã¯ã·ã§ã³ãäœæã§ããXA +ä»æ§ã¯ãå°æ°ã®äººã奜ã¿ãããã«éèŠãªã®ã¯å°æ°ã®äººãæ§æã§ããéåžžã«éãã¡ã«ããºã ã§ãã ããã«ã軜éã®ãã€ã¯ããµãŒãã¹ã§ã¯ãã€ããªãã®ãŒçã«åŒ±ãäºææ§ããããŸãã
- ååãšããŠããã©ã³ã¶ã¯ã·ã§ã³ã¯ã³ã³ã»ã³ãµã¹åé¡ã®ç¹æ®ãªã±ãŒã¹ã§ãããå€æ°ã®åæ£ã³ã³ã»ã³ãµã¹ã·ã¹ãã ã䜿çšããŠåé¡ã解決ã§ããŸãïŒå€§ãŸãã«èšãã°ãããŒã¯ãŒãpaxosãraftãzookeeperãetcdãconsulã§ã°ãŒã°ã«ã§ãããã¹ãŠã®ãã®ïŒã ããããå庫掻åã®åºç¯å²ã§åå²ããããŒã¿ã®å®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããã¯ãã¹ãŠ2ãã§ãŒãºãã©ã³ã¶ã¯ã·ã§ã³ãããããã«è€éã«èŠããŸãã
- ãã¥ãŒãšçµææŽåæ§ïŒé·æçãªäžè²«æ§ïŒ-ã¿ã¹ã¯ã3ã€ã®éåæã¿ã¹ã¯ã«åå²ããããŒã¿ãé 次åŠçãããµãŒãã¹éã§ãã¥ãŒãããã¥ãŒã«æž¡ããé
信確èªã¡ã«ããºã ã䜿çšããŸãã ãã®å Žåãã³ãŒãã¯ããã»ã©è€éã§ã¯ãããŸããããçæãã¹ãç¹ãããã€ããããŸãã
- ãã¥ãŒã¯ãã1å以äžãã®é ä¿¡ãä¿èšŒããŸããã€ãŸããåãã¡ãã»ãŒãžãåé ä¿¡ããå ŽåããµãŒãã¹ã¯ãã®ç¶æ³ãæ£ããåŠçããååã2ååºè·ããªãããã«ããå¿ èŠããããŸãã ããã¯ãããšãã°æ³šæã®äžæã®UUIDã䜿çšããŠå®è¡ã§ããŸãã
- åæç¹ã®ããŒã¿ã¯ãããã«ççŸããŸãã ã€ãŸããååã¯æåã«å庫ããæ¶ããŠãããå°ãé ããŠçºéã®æ³šæãäœæãããŸãã åŸã§ãçšé¢ããŒã¿ãåŠçãããŸãã ãã®äŸã§ã¯ãããã¯å®å šã«æ£åžžã§ãããããžãã¹ã«åé¡ã¯ãããŸãããããã®ãããªããŒã¿ã®åäœãéåžžã«äžå¿«ã«ãªãå ŽåããããŸãã
- ãã®çµæãæåã®ãµãŒãã¹ãäœããã®ããŒã¿ããŠãŒã¶ãŒã«è¿ããªããã°ãªããªãå Žåãæçµçã«ãŠãŒã¶ãŒã®ãã©ãŠã¶ãŒã«ããŒã¿ãé ä¿¡ããäžé£ã®åŒã³åºãã¯éåžžã«éèŠã§ãã äž»ãªåé¡ã¯ããã©ãŠã¶ãŒãèŠæ±ãåæçã«éä¿¡ããéåžžã¯åæå¿çãäºæããããšã§ãã éåæã®ãªã¯ãšã¹ãåŠçãè¡ãå Žåããã©ãŠã¶ãžã®ã¬ã¹ãã³ã¹ã®éåæé ä¿¡ãæ§ç¯ããå¿ èŠããããŸãã åŸæ¥ãããã¯Webãœã±ãããä»ããŠããŸãã¯ãã©ãŠã¶ãããµãŒããŒãžã®æ°ããã€ãã³ãã®å®æçãªèŠæ±ãä»ããŠè¡ãããŸãã ããšãã°ãSocksJSãªã©ããã®ãªã³ã¯ãæ§ç¯ããããã€ãã®åŽé¢ãç°¡çŽ åããã¡ã«ããºã ããããŸãããããã§ãè€éããå¢ããŸãã
ã»ãšãã©ã®å ŽåãåŸè ã®ãªãã·ã§ã³ãæãåãå ¥ããããŸãã åŠçèŠæ±ã¯ããã»ã©è€éã§ã¯ãããŸããããæ°åé·ãåäœããŸãããååãšããŠããã®çš®ã®æäœã§ã¯åãå ¥ããããŸãã ãŸããç¹°ãè¿ããããªã¯ãšã¹ããé®æããããã«ãããå°ãè€éãªããŒã¿ç·šæãå¿ èŠã§ãããããã«ã€ããŠãããã»ã©è€éãªããšã¯ãããŸããã
æŠç¥çã«ããã¥ãŒãšçµææŽåæ§ã䜿çšããŠãã©ã³ã¶ã¯ã·ã§ã³ãåŠçããããã®ãªãã·ã§ã³ã®1ã€ã¯æ¬¡ã®ããã«ãªããŸãã
- ãŠãŒã¶ãŒãè³Œå ¥ãããšãããã«é¢ããã¡ãã»ãŒãžããã¥ãŒã«éä¿¡ãããŸãïŒããšãã°ãRabbitMQã¯ã©ã¹ã¿ãŒããŸãã¯Google Cloud Platformã§äœæ¥ããŠããå Žå-Pub / SubïŒã ãã¥ãŒã¯æ°žç¶çã§ããã1å以äžã®é ä¿¡ãä¿èšŒãããã©ã³ã¶ã¯ã·ã§ã³ã§ããã€ãŸããã¡ãã»ãŒãžãåŠçãããµãŒãã¹ãçªç¶ããããããŠããã¡ãã»ãŒãžã¯å€±ãããŸãããããµãŒãã¹ã®æ°ããã€ã³ã¹ã¿ã³ã¹ã«å床é ä¿¡ãããŸãã
- ã¡ãã»ãŒãžããµãŒãã¹ã«å°çãããšãå庫å ã®ååã«åºè·æºåãã§ããŠãããšããŒã¯ãä»ãããã次ã«ãååã®åºè·æºåãã§ããŸããããšããã¡ãã»ãŒãžããã¥ãŒã«éä¿¡ãããŸãã
- 次ã®ã¹ãããã§ããã£ã¹ããããæ åœãããµãŒãã¹ã¯ããã£ã¹ãããã®æºåç¶æ³ã«é¢ããã¡ãã»ãŒãžãåä¿¡ãããã£ã¹ãããã¿ã¹ã¯ãäœæããŠããååã®ãã£ã¹ããããèšç»ãããŠããŸãããšããã¡ãã»ãŒãžãéä¿¡ããŸãã
- çºéãèšç»ãããŠãããšããã¡ãã»ãŒãžãåãåã£ã次ã®ãµãŒãã¹ã¯ãçšé¢ã®äºååŠçã®ããã»ã¹ãéå§ããŸãã
ããã«ããµãŒãã¹ã«ãã£ãŠåä¿¡ãããåã¡ãã»ãŒãžã¯äžææ§ããã§ãã¯ããããã®ãããªUUIDãæã€ã¡ãã»ãŒãžããã§ã«åŠçãããŠããå Žåãç¡èŠãããŸãã
ããã§ã¯ãåæç¹ã®ããŒã¿ããŒã¹ããŒã¹ã¯ãããã«äžè²«æ§ã®ãªãç¶æ ã«ãããŸããã€ãŸããå庫å ã®ååã¯ãã§ã«é éããã»ã¹ã«ãããšããŒã¯ãããŠããŸãããé éã¿ã¹ã¯èªäœã¯ãŸã ååšãããæ°ç§ã§è¡šç€ºãããŸãã ãããåæã«ã99.999ïŒ ïŒå®éããã®æ°ã¯ãã¥ãŒãµãŒãã¹ã®ä¿¡é Œæ§ã®ã¬ãã«ã«çããïŒã«ãããéä¿¡ã¿ã¹ã¯ã衚瀺ãããããšãä¿èšŒãããŠããŸãã ã»ãšãã©ã®äŒæ¥ã§ã¯ãããã¯åãå ¥ããããŸãã
ãã®ãšãã®èšäºã¯äœã§ããïŒ
ãã®èšäºã§ã¯ããã€ã¯ããµãŒãã¹ã¢ããªã±ãŒã·ã§ã³ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®åé¡ã解決ããå¥ã®æ¹æ³ã«ã€ããŠèª¬æããŸãã ãã€ã¯ããµãŒãã¹ã¯ãåãµãŒãã¹ã«ç¬èªã®ããŒã¿ããŒã¹ãããå Žåã«æé©ã«æ©èœããŸãããäžå°èŠæš¡ã®ã·ã¹ãã ã§ã¯ãååãšããŠãã¹ãŠã®ããŒã¿ãææ°ã®ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã«ç°¡åã«åãŸããŸãã ããã¯ãã»ãŒãã¹ãŠã®å éšãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ã«åœãŠã¯ãŸããŸãã ã€ãŸããå€ãã®å Žåãç°ãªãç©çãã·ã³éã§ããŒã¿ãå³å¯ã«å ±æããå¿ èŠã¯ãããŸããã åãããŒã¿ããŒã¹ã®ããŒãã«ã®ç¡é¢ä¿ãªã°ã«ãŒãã«ç°ãªããã€ã¯ããµãŒãã¹ã®ããŒã¿ãä¿åã§ããŸãã ããã¯ãå€ãã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ã«åå²ããã³ãŒããæ¢ã«åå²ããŠããããããŒã¿ããŸã 1ã€ã®ããŒã¿ããŒã¹ã«ããå Žåã«ç¹ã«äŸ¿å©ã§ãã ãã ãããã©ã³ã¶ã¯ã·ã§ã³ã®åå²ã®åé¡ã¯äŸç¶ãšããŠæ®ã£ãŠããŸãããã©ã³ã¶ã¯ã·ã§ã³ã¯ãããã¯ãŒã¯æ¥ç¶ãšãããã«å¿ããŠãã®æ¥ç¶ãéããããã»ã¹ã«å³å¯ã«çµã³ä»ããããŠãããå¥ã®ããã»ã¹ããããŸãã ã«ãªãæ¹æ³
äžèšã§ã¯ãåé¡ã解決ããããã€ãã®äžè¬çãªæ¹æ³ã説æããŸããããããã«ããã¹ãŠã®ããŒã¿ãåãããŒã¿ããŒã¹ã«ããç¹å¥ãªå Žåã«å¥ã®æ¹æ³ãæäŸããããšæããŸãã ãã®ãããžã§ã¯ãã§ãã®ã¡ãœãããå®è£ ããããšããããšã¯ãå§ãããŸããããèšäºã§çŽ¹ä»ããã®ã¯ååã«èå³ããããŸãã çªç¶ãç¹å®ã®å Žåã«äŸ¿å©ã«ãªããŸãã
ãã®æ¬è³ªã¯éåžžã«ã·ã³ãã«ã§ãã ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãããã¯ãŒã¯æ¥ç¶ã«é¢é£ä»ããããŠãããããŒã¿ããŒã¹ã¯ããªãŒãã³ãããã¯ãŒã¯æ¥ç¶ã®ãã®ç«¯ã«èª°ã座ã£ãŠããããå®éã«ã¯ç¥ããŸããã 圌女ã¯æ°ã«ããŸãããäž»ãªããšã¯æ£ããã³ãã³ãããœã±ããã«éä¿¡ãããããšã§ãã éåžžããœã±ããã¯ã¯ã©ã€ã¢ã³ãåŽã®1ã€ã®ããã»ã¹ã«æä»çã«å±ããŠããããšã¯æããã§ããããããåé¿ããã«ã¯å°ãªããšã3ã€ã®æ¹æ³ããããŸãã
1.ããŒã¿ããŒã¹ã³ãŒããå€æŽãã
ç¬èªã®ããŒã¿ããŒã¹ã¢ã»ã³ããªãäœæããŠã³ãŒããå€æŽã§ããããŒã¿ããŒã¹ã®ããŒã¿ããŒã¹ã³ãŒãã¬ãã«ã§ã¯ãæ¥ç¶éã§ãã©ã³ã¶ã¯ã·ã§ã³ã転éããããã®ã¡ã«ããºã ãå®è£ ããŸãã ã¯ã©ã€ã¢ã³ãã®èŠ³ç¹ããã©ã®ããã«æ©èœãããïŒ
- ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããããã€ãã®å€æŽãè¡ãããã©ã³ã¶ã¯ã·ã§ã³ã次ã®ãµãŒãã¹ã«è»¢éããŸãã
- DBã«ãã©ã³ã¶ã¯ã·ã§ã³ã®UUIDãæäŸããNç§åŸ æ©ããããã«æ瀺ããŸãã ãã®æéäžã«ãã®UUIDãšã®å¥ã®æ¥ç¶ãæ¥ãªãå Žåããã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ãããããããªãããã©ã³ã¶ã¯ã·ã§ã³ã«é¢é£ä»ãããããã¹ãŠã®ããŒã¿æ§é ãæ°ããæ¥ç¶ã«è»¢éãããã®äœæ¥ãç¶ããŸãã
- UUIDã次ã®ãµãŒãã¹ïŒã€ãŸããå¥ã®ããã»ã¹ãå Žåã«ãã£ãŠã¯å¥ã®VMïŒã«æž¡ããŸãã
- ãã®äžã§ãæ¥ç¶ãéããDBã³ãã³ããæå®ããŸã-æå®ãããUUIDã§ãã©ã³ã¶ã¯ã·ã§ã³ãç¶è¡ããŸãã
- å¥ã®ããã»ã¹ã«ãã£ãŠéå§ããããã©ã³ã¶ã¯ã·ã§ã³ã®äžéšãšããŠãããŒã¿ããŒã¹ãåŒãç¶ã䜿çšããŸãã
ãã®ã¡ãœããã¯äœ¿çšããã®ãæã軜éã§ãããããŒã¿ããŒã¹ã³ãŒãã®å€æŽãå¿ èŠã§ããã¢ããªã±ãŒã·ã§ã³ããã°ã©ãã¯éåžžãããè¡ãããå€ãã®ç¹å¥ãªã¹ãã«ãå¿ èŠã§ãã ã»ãšãã©ã®å ŽåãããŒã¿ããŒã¹ããã»ã¹ãšããŒã¿ããŒã¹éã§ããŒã¿ã転éããå¿ èŠããããŸããããŒã¿ããŒã¹ã®ã³ãŒãã¯ãå šäœãšããŠå®å šã«å€æŽã§ããŸã-PostgreSQLã ããã«ãããã¯ç®¡çãããŠããªããµãŒããŒã§ã®ã¿æ©èœããŸããRDSãCloud SQLã§ã¯äœ¿çšã§ããŸããã
æŠç¥çã«ã¯ã次ã®ããã«ãªããŸãã
2.ãœã±ããã®æäœ
2çªç®ã«æãæµ®ãã¶ã®ã¯ããœã±ããã«ããããŒã¿ããŒã¹æ¥ç¶ã®åŸ®åŠãªæäœã§ãã è€æ°ã®ã¯ã©ã€ã¢ã³ãããã®ã³ãã³ãããããŒã¿ããŒã¹ãžã®1ã€ã®ã³ãã³ãã¹ããªãŒã å ã®ç¹å®ã®ããŒãã«åããããªããŒã¹ãœã±ãããããã·ããäœæã§ããŸãã
å®éããã®ã¢ããªã±ãŒã·ã§ã³ã¯pgBouncerãšéåžžã«ãã䌌ãŠããŸãããæšæºæ©èœã«å ããŠãã¯ã©ã€ã¢ã³ãããã®ãã€ãã¹ããªãŒã ãæäœããã³ãã³ãã§1ã€ã®ã¯ã©ã€ã¢ã³ããå¥ã®ã¯ã©ã€ã¢ã³ãã«çœ®ãæããããšãã§ããŸãã
ç§ã¯ãã®æ¹æ³ã匷ãå«ããŸãããã®å®è£ ã®ããã«ããµãŒããŒãšã¯ã©ã€ã¢ã³ãã®éã埪ç°ãããã€ããªãã±ãããã¯ãªãŒã³ã¢ããããå¿ èŠããããŸãã ãããŠããŸã å€ãã®ã·ã¹ãã ããã°ã©ãã³ã°ãå¿ èŠã§ãã å®å šãæãããã ãã«æã£ãŠããŸããã
3.ã²ãŒããŠã§ã€JDBC
ã²ãŒããŠã§ã€JDBCãã©ã€ããŒãäœæã§ããŸããç¹å®ã®ããŒã¿ããŒã¹çšã®æšæºJDBCãã©ã€ããŒã䜿çšããPostgreSQLã«ããŸãã ã¯ã©ã¹ãã©ãããããã®ãã¹ãŠã®å€éšã¡ãœãããžã®HTTPã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸãïŒHTTPã§ã¯ãªããéãã¯ãããã§ãïŒã 次ã«ãå¥ã®JDBCãã©ã€ããŒãäœæããŸããããã¯ããã¹ãŠã®ã¡ãœããåŒã³åºããJDBCã²ãŒããŠã§ã€ã«ãªãã€ã¬ã¯ããããã¡ãµãŒãã§ãã ã€ãŸããå®éã«ã¯ãæ¢åã®ãã©ã€ããŒã2ã€ã«åãããããã®ååããããã¯ãŒã¯çµç±ã§æ¥ç¶ããŠããŸãã 次ã®ã³ã³ããŒãã³ãå³ãååŸããŸãã
NBïŒïŒã芧ã®ãšããã3ã€ã®ãªãã·ã§ã³ã¯ãã¹ãŠé¡äŒŒããŠããŸããå¯äžã®éãã¯ãæ¥ç¶ã転éããã¬ãã«ãšãããã«äœ¿çšããããŒã«ã§ãã
ãã®åŸããã©ã€ããŒã«ãæ¹æ³1ã§èª¬æããUUIDãã©ã³ã¶ã¯ã·ã§ã³ã§åºæ¬çã«åãããªãã¯ãè¡ãããã«æ瀺ããŸãã
Javaã¢ããªã±ãŒã·ã§ã³ã³ãŒãã§ã¯ããã®ã¡ãœããã®äœ¿çšã¯æ¬¡ã®ããã«ãªããŸãã
ãµãŒãã¹A-ãã©ã³ã¶ã¯ã·ã§ã³ã®éå§
以äžã¯ããã©ã³ã¶ã¯ã·ã§ã³ãéå§ããããŒã¿ããŒã¹ã«å€æŽãå ãããããå¥ã®ãµãŒãã¹ã«æž¡ããŠå®äºããããã®ãµãŒãã¹ã®ã³ãŒãã§ãã ã³ãŒãã§ã¯ãJDBCã¯ã©ã¹ãçŽæ¥äœ¿çšããŸãã ãã¡ããã2019幎ã«ã¯èª°ããããè¡ããŸããããç°¡åã«ããããã«ãã³ãŒãã¯åçŽåãããŠããŸãã
// , , ââ // Class.forName("org.postgresql.FacadeDriver"); var connection = DriverManager.getConnection( "jdbc:postgresqlfacade://hostname:port/dbname","username", "password"); // - statement = dbConnection.createStatement(); var statement.executeUpdate(âinsert ...â); /* , . transactionUUID(int) -, , JDBC gateway-. ResultSet Varchar, UUID. . , UUID. 60 â , . , , JDBCTemplate. ResultSet */ var rs = statement.executeQuery(âselect transactionUUID(60)â); String uuid = extractUUIDFromResultSet(rs); // remoteServiceProxy.continueProcessing(uuid, otherParams); // // . closeEverything(); return;
ãµãŒãã¹B-ãã©ã³ã¶ã¯ã·ã§ã³ã®å®äº
// , // remoteServiceProxy.continueProcessing(...) // . Class.forName("org.postgresql.FacadeDriver"); var connection = DriverManager.getConnection( "jdbc:postgresqlfacade://hostname:port/dbname","username", "password"); // Gateway JDBC, // . continue transaction , // gateway JDBC statement = dbConnection.createStatement(); statement.executeUpdate(âcontinue transaction â+uuid); // , , // statement.executeUpdate(âupdate ..."); // connection.commit(); return;
ä»ã®ã³ã³ããŒãã³ãããã³ãã¬ãŒã ã¯ãŒã¯ãšã®çžäºäœçš
ãã®ãããªã¢ãŒããã¯ãã£ãœãªã¥ãŒã·ã§ã³ã®å¯äœçšã®å¯èœæ§ãèæ ®ããŠãã ããã
æ¥ç¶ããŒã«
å®éã«ã¯JDBCã²ãŒããŠã§ã€å ã«å®éã®æ¥ç¶ããŒã«ãããã®ã§ããµãŒãã¹å ã®æ¥ç¶ããŒã«ããªãã«ãããšãå¥ã®ãµãŒãã¹ã䜿çšã§ãããµãŒãã¹å ã®æ¥ç¶ããã£ããã£ããŠä¿æãããããããé©åã§ãã
ããã«ãUUIDãåä¿¡ããŠââå¥ã®ããã»ã¹ãžã®è»¢éãåŸ æ©ããåŸãæ¥ç¶ã¯åºæ¬çã«åäœäžèœã«ãªããããã³ããšã³ãJDBCã®èŠ³ç¹ããã¯èªåçã«éããŸããã²ãŒããŠã§ã€JDBCã®èŠ³ç¹ããã¯ã誰ã«ãäžããã«ä¿æããå¿ èŠããããŸãç®çã®UUIDãä»å±ããŸãã
ã€ãŸããã²ãŒããŠã§ã€JDBCããã³åãµãŒãã¹å ã®æ¥ç¶ããŒã«ã®äºé管çã¯ã埮åŠã§äžå¿«ãªãšã©ãŒãåŒãèµ·ããå¯èœæ§ããããŸãã
JPA
JPAã§ã¯ã2ã€ã®åé¡ãèããããŸãã
- ãã©ã³ã¶ã¯ã·ã§ã³ç®¡çã JPAãã³ããããããšãããšã³ãžã³ã¯ãã¹ãŠã®ããŒã¿ãä¿åããããä¿åããŠããªããšèããå ŽåããããŸãã ã»ãšãã©ã®å Žåããã©ã³ã¶ã¯ã·ã§ã³ã転éããåã«æåã§ãã©ã³ã¶ã¯ã·ã§ã³ç®¡çãšãã©ãã·ã¥ïŒïŒãè¡ãããšã§åé¡ã解決ã§ããŸãã
- 2次ãã£ãã·ã¥ã¯ã»ãšãã©ã®å Žåæ£ããåäœããŸããããåæ£ã·ã¹ãã ã§ã¯ãã®äœ¿çšã¯ãããã«ããå¶éãããŸãã
æ¥ã®ãã©ã³ã¶ã¯ã·ã§ã³
Springãã©ã³ã¶ã¯ã·ã§ã³ç®¡çã¡ã«ããºã ã¯ããããã䜿çšã§ããªããããæåã§ç®¡çããå¿ èŠããããŸãã ã«ã¹ã¿ã ã¹ã³ãŒããäœæãããªã©ãæ¡åŒµã§ããããšã¯ã»ãŒééããããŸãããã確ãã«ãSpring Transactionsæ¡åŒµæ©èœãã©ã®ããã«é 眮ãããŠãããã調ã¹ãå¿ èŠããããŸããããŸã æ€èšããŠããŸããã
é·æãšçæ
é·æ
- ãœãŒã€ã³ã°æã«æ¢åã®ã¢ããªã·ãã¯ã³ãŒããå€æŽããå¿ èŠã¯ãããŸããã
- å®è³ªçã«ã³ãŒããè€éã«ããããšãªããè€éãªã¯ãã¹ãµãŒããŒãã©ã³ã¶ã¯ã·ã§ã³ãèšè¿°ã§ããŸãã
- ãã©ã³ã¶ã¯ã·ã§ã³å®è¡ã®ã¯ãã¹ãµãŒãã¹ãã¬ãŒã¹ãå®è¡ã§ããŸãã
- ãã®ãœãªã¥ãŒã·ã§ã³ã¯éåžžã«æè»ã§ããé åžãäžèŠãªåŸæ¥ã®ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããã¯ãã¹ãµãŒãã¹ã®çžäºäœçšãå¿ èŠãªæäœã«å¯ŸããŠã®ã¿ãã©ã³ã¶ã¯ã·ã§ã³ãå ±æã§ããŸãã
- ãããžã§ã¯ãããŒã ã¯ãæ°ãããã¯ãããžã匷å¶çã«ç¿åŸããå¿ èŠã¯ãããŸããã ãã¡ãããæ°ããæè¡ã¯åªããŠããŸãããã¿ã¹ã¯-å¿ é ãã€ç·æ¥ã§ãïŒæšæ¥ãŸã§ïŒïŒ20人ã®éçºè ã«ãªã¢ã¯ãã£ãã·ã¹ãã ã®æ§ç¯ã®æŠå¿µãæããããšã¯ãéåžžã«éèŠã§ãã ãã ãã20äººå šå¡ãæééãã«ãã¬ãŒãã³ã°ãå®äºãããšããä¿èšŒã¯ãããŸããã
çæ
- ãã¥ãŒã«å ¥ãããããœãªã¥ãŒã·ã§ã³ãšã¯å¯Ÿç §çã«ãããŒã¿ããŒã¹ã¬ãã«ã§ã¹ã±ãŒã©ãã«ã§ãªããå®éã«ã¯éã¢ãžã¥ã©ãŒã§ãã ãã¹ãŠã®ã¯ãšãªãšè² è·å šäœãåæãã1ã€ã®ããŒã¿ããŒã¹ããŸã ãããŸãã ãã®æå³ã§ããœãªã¥ãŒã·ã§ã³ã¯è¡ãè©°ãŸãã§ããåŸã§è² è·ãå¢ãããããããŒã¿ã«å¿ããŠãœãªã¥ãŒã·ã§ã³ãã¢ãžã¥ãŒã«åããå Žåã¯ããã¹ãŠãããçŽãå¿ èŠããããŸãã
- ããã»ã¹éãç¹ã«ãã¬ãŒã ã¯ãŒã¯ã§èšè¿°ãããããã»ã¹éã§ãã©ã³ã¶ã¯ã·ã§ã³ã転éããå Žåã¯ãéåžžã«æ³šæããå¿ èŠããããŸãã ã»ãã·ã§ã³ã«ã¯ç¬èªã®èšå®ããããããŸããŸãªãã¬ãŒã ã¯ãŒã¯ã§ã¯ãããŒã¿ããŒã¹ãšã®æ¥ç¶ãçªç¶å€æŽããããšã誀åäœãçºçããå¯èœæ§ããããŸãã ããšãã°ãPostgreSQLã®ã»ãã·ã§ã³èšå®ãšãã©ã³ã¶ã¯ã·ã§ã³ãåç §ããŠãã ããã
- å°å ã®å»ºç¯å®¶ã®DataArtã®ãã£ããã§ã¢ã€ãã¢ã話ãããšããååãç§ã«æåã«å°ããã®ã¯ãç§ã飲ãã§ãããã©ããïŒãããã飲ãŸãªãïŒïŒ ããããããšãã°ããã®ã¢ã€ãã¢ã¯æãæ®åããŠãããã®ã§ã¯ãªãããããžã§ã¯ãã«å®è£ ãããšãä»ã®åå è ã«ãšã£ãŠã¯éåžžã«çãããã®ã«ãªããšæããŸãã
- ã«ã¹ã¿ã JDBCãã©ã€ããŒãå¿ èŠã§ãã æžã蟌ã¿ã«ã¯æéãããããŸãããããã°ãããããããã¯ãŒã¯éä¿¡ãšã©ãŒãªã©ãå«ããšã©ãŒãæ¢ããŠãã ããã
èŠå
ããäžåºŠèŠåããŸãããã®ãããžã§ã¯ãã®
4æ1æ¥ãããã¹ãŠïŒ