ãã€ã¯ããµãŒãã¹(Microservies)ãšããèšèãèããããšãããã§ããããã
ãã€ã¯ããµãŒãã¹ã¯ITèŸå žã§ä»¥äžã®éãã«å®çŸ©ãããŠããçšèªã§ãã
è€æ°ã®å°ããªãµãŒãã¹ã®éåäœãšããŠã·ã¹ãã ãæ§ç¯ããåãµãŒãã¹å士ãHTTPçµç±ã®APIãã¡ãã»ãŒãžã³ã°ãªã©ã®è»œéãªéä¿¡ã§é£æºããææ³ã
James Lewisæ°ã«ãã£ãŠææ¡ãããèšèã§ãåæ°ãMartin Fowleræ°ãšå·çããèšäºãMicroservicesãã«ããåæã§åãäžããããããã«ãªã£ãã
è€æ°ã®æ©èœãã²ãšã€ã®ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ç©ãšããŠæ§ç¯ãããã¢ããªã·ãã¯(äžæå²©)ãã¢ãŒããã¯ãã£ãšæ¯èŒãããã
æšä»æ¥éã«èªç¥åºŠãé«ãŸã£ãŠããŠãæè¡ã»ãããŒãªã©ã§è³ã«ããããšãå€ããªã£ãŠããŸãããããã§ããã¯ã©ãŠããã¢ãžã£ã€ã«ãšãã£ãçšèªãšæ¯ã¹ããšãŸã ãŸã ç解床ã¯äœãã以äžã®ãããªæèŠã®ãšã³ãžãã¢ãå€ãããã§ãã
- å°ãããºã¯ãŒãã£ãœããããšããããæµè¡ãèšèã®äžã€ã ããæããŠãããã
- è§Šã£ãŠã¿ãŠèªã·ã¹ãã ãžã®å°å ¥æ€èšã«ã€ãªããã
- ã¢ããŸã³ãã¯ãã¯ããããªã©ãå®äŸã¯å€ããã®ã®ãSOA(Service Oriented Architecture:ãµãŒãã¹æåã¢ãŒããã¯ãã£)ãšã®éããä»äžã€ããããªã
æ¬é£èŒã§ã¯ããã€ã¯ããµãŒãã¹ãåãå·»ãæè¡èŠçŽ ãäœçœ®ä»ããå®éçºé©çšã®ãã€ã³ãçã解説ããŠãããããšæããŸãã
ãã€ã¯ããµãŒãã¹ãçè§£ããããã®3ã€ã®ãã€ã³ã
ãã€ã¯ããµãŒãã¹ãçè§£ããã«ã¯ããŸãã¯ä»¥äžã®3ç¹ãæããŠããå¿ èŠããããšèããŠããŸãã
- ãã¢ããªã·ãã¯(Monolithic:äžæå²©)ãã®èª²é¡ãšãã€ã¯ããµãŒãã¹ãçãŸããŠããçµç·¯
- ãHTTPçµç±ã®APIãã®å®æ ã§ãããREST APIããªã©ããã€ã¯ããµãŒãã¹ãäžæ¯ãããŠããæè¡
- é¡äŒŒã®ã¢ãŒããã¯ãã£ãšããŠèªãããããšã®å€ããSOAããšã®éã
ãã£ãšçªã£èŸŒãã§ç¥ãããå Žåã«ã¯ãã€ã¯ããµãŒãã¹ãç¹åŸŽä»ãã9ã€ã®èŠçŽ ã ã£ãããã¯ã©ãŠããªã©ããã€ã¯ããµãŒãã¹ãåãå·»ãå€ãã®æè¡èŠçŽ ã ã£ãããçè§£ãããšè¯ãã§ãããã
æ¬é£èŒã§ã¯ããããã«ã€ããŠé ã远ã£ãŠèª¬æããŠãããŸããä»åã¯ã¢ããªã·ãã¯ã§ã
Microservice vs Monolith(ã¢ããªã¹)
ãã€ã¯ããµãŒãã¹ã®ç¹åŸŽã¯ã·ã¹ãã å šäœãå°ããªç²åºŠã«åããŠæ§ç¯ããŠããç¹ã§ãã
ãããšã¯å¯Ÿç §çãªåŸæ¥åã®éçºã¹ã¿ã€ã«ã¯ãMonolith(ã¢ããªã¹)ãšåŒã³ãŸããMonolithãšã¯äžæå²©ã®æã§ãã·ã¹ãã ãåäžã®ã¢ããªã±ãŒã·ã§ã³ã§æ§ç¯ããŸãã
![]() |
|
Monolithã¢ããªã±ãŒã·ã§ã³ |
![]() |
|
ãã€ã¯ããµãŒãã¹ã¢ããªã±ãŒã·ã§ã³ |
äžæå²©ã®ã¢ããªã±ãŒã·ã§ã³ã¯ã忥åçãå¯çµåã§ããããããéçºãããã«ããããããã€ã¡ã³ããã®ããããã®ãã§ãŒãºã«ãŠããŸããŸãªåé¡ãçºçãããŸããã¢ããªã±ãŒã·ã§ã³ã®åäœã®ã€ã¡ãŒãžã¯Java EEçéã®æ¹ã§ããã°ãear/warãæ³åãããšããããããã§ããããã
åŸæ¥ãã¢ããªã±ãŒã·ã§ã³ã®å¯çµåã®åé¡ã解決ããç¬ç«æ§ãé«ããããã«ã以äžã®ãããªå¯Ÿçã宿œãããŠããŸããã
- ã³ã³ããã¹ãã«ãŒããåããŠè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã«åå²ããã ãã¢ããªã±ãŒã·ã§ã³éã®éä¿¡ãå¿ èŠ
- ã¢ããªã±ãŒã·ã§ã³å ã®äžéšã®åŠçãã©ã€ãã©ãªå
- MVCã¢ãã«ããã¬ãŒã ã¯ãŒã¯(Struts/Spring/Hibernateç)ãæŽ»çšããç»é¢ã»ããžãã¯ã»DBã¢ã¯ã»ã¹ãšãã£ãå±€ã«åå²
äžèšã®å¹æã¯äž»ã«ãéçºããã§ãŒãºã«éå®ãããããã«ããããã³ããããã€ã¡ã³ããã®ãã§ãŒãºã«ãªããšããã®åäœã¯äžæå²©ãã€ãŸãåæã«è¡ãããå¿ èŠããããŸããã
ãããã£ãç¶æ³ã¯ã倿Žå®¹ææ§ããäžããèŠå ãšãªã£ãŠããŸãããã·ã¹ãã ã巚倧åããã°ããã»ã©ãå šäœãææ¡ããã®ãå°é£ãšãªãã®ã¯èšããŸã§ããããŸããããåå±€ãå¯çµåããŠããããã«ã圱é¿ç¯å²ãèŠæ¥µããã®ãé£ããã£ãã®ã§ãããŸããåæã«ããã«ããããããã€ã¡ã³ããã«æéããããã¹ããŒãã£ãŒãªé害æ¹ä¿®ãæ©èœè¿œå ã劚ããŠããŸããã
ããã«ãããã§ãŒãºã«ã¯ãœãŒã¹ã³ãŒãã®ã³ã³ãã€ã«ã®ã¿ã§ã¯ãªããJUnitçã®åäœãã¹ãã®å®è¡ããSeleniumãSelenideãšãã£ãçµåãã¹ãã®å®è¡ãŸã§å«ãŸãããããã«ãããæéã¯å€§ãããªããŸãã
ããã§ã¯ã詳ããã¯è¿°ã¹ãŸããããCI(Continuous Integration:ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³)ãCD(Continuous Delivery:ç¶ç¶çããªããª)ã«ãããããã«ãããããããã€ã¡ã³ããã®èªååãåœããåã®æä»£ã«ãªãããããã®ãã§ãŒãºã«ãããæéãåŽåã¯ãããŸã§ãããå°ãããªããŸãããããã§ãäžæå²©ã§ãããæ ã«ãããŸã ã«äžå€§ã€ãã³ããšãªã£ãŠããŸãã»ã©ã®æéãããããŸãã
çè ãéçºãå§ããŠéããªãé ãå 茩ããéçº(ã³ãŒãã£ã³ã°äœæ¥)ã«ãããæéã®ïŒå²ã¯ããã«ããããŠããæéã ãšèšãããããšããããŸãããåœæã¯ããŸããã³ãšããŸããã§ããããå€§èŠæš¡ãªJava EEã¢ããªã±ãŒã·ã§ã³éçºãçµéšããŠããã«ã€ãã宿ãçãŸããŠããããã«æããŸãã
極端ãªäŸã§ã¯ãã¡ã¬ã¹ãããçŽã®Java EEã¢ããªã±ãŒã·ã§ã³ãéçºããå ŽåãEclipseãã©ã°ã€ã³ã®ãããªéçºããŒã«ã®å©ç𿹿³ã«ãã£ãŠã¯ãã³ãŒããæžããŠã¯ã³ã³ãã€ã«ãéçãã§ãã¯ã«æ°ååŸ ã€ããšãçãããããŸããããã®ãããããã°ã©ããŒã¯ãã£ãšè çµã¿ãããŠç»é¢ãèŠã€ããŠãããšãã£ãã±ãŒã¹ããSakuraãšãã£ã¿çã§éçºãçµãã£ããEclipseã®ãšãã£ã¿ã«ã³ããŒãããšãã£ãèŠèã®çããšã£ãŠããã±ãŒã¹ãèŠãããŸããã
ãŸããæ§èœèгç¹ã§ã®ãæ¡åŒµå®¹ææ§ããäžããèŠå ã«ããªã£ãŠããŸããããããã€ã¡ã³ããäžæå²©ã§ããããããæ§èœé¢ã§æ¡åŒµããããšãããšãäžæå²©ã®åäœã§ããŒãé¢ãå¢åŒ·ã»è¿œå ããTomcatçã®ã¢ããªã±ãŒã·ã§ã³ãµãŒãã®ããã»ã¹ãå¢ããå¿ èŠããããŸãã
çžæ§ã®è¯ãã·ã¹ãã ã¯?
以äžãåŸæ¥åã®Monolithãªã¢ããªã±ãŒã·ã§ã³ãšæ¯èŒããå Žåã®ãã€ã¯ããµãŒãã¹ã®ã¡ãªãããäžå¿ã«èª¬æããŸããã
äžæå²©ã®ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠããã€ã¯ããµãŒãã¹ã¯ã·ã¹ãã ãè€æ°ã®ãµãŒãã¹ã«åå²ããçžäºã®ããåããREST APIãçšããŠè¡ããŸããããã«ãããåãµãŒãã¹ã¯ããããç°ãªãããã°ã©ãã³ã°èšèªãå©çšããŠããŠãæ§ããªãããããéçºãã®ç¬ç«æ§ãé«ãŸããŸããããã«ããµãŒãã¹ãšããŠåå²ãããæ¥åããšã«ããã«ããå¯èœãªãããä¿®æ£ã®åœ±é¿ã屿åãããããã«ããã«ãããæéãæ¥µå°åãããŸããæ§èœé¢ã§æ¡åŒµãå¿ èŠãªå Žåã¯æ¥åããšã®å¯Ÿå¿ãå¯èœãšãªããŸãã
次å以éãRESTçãããçªã£èŸŒãã å 容ã説æãããã€ã¯ããµãŒãã¹ã®åäœã€ã¡ãŒãžãæ·±ããŠãããããšæããŸãã
ãªããMartin Fowleræ°ããMicroservicePremiumãã«ãŠæ³šæãä¿ããŠããŸããããã€ã¯ããµãŒãã¹ã¯ãããããéã®åŒŸäžžãã§ã¯ãªããé©åããã·ã¹ãã ãªã©ã«é¢ããŠæ³šæãã¹ãç¹ããããŸãã®ã§ããã®ãããã説æããŠãããããšæããŸãããŸãããã¯ã©ãŠããã€ãã£ãããšãã£ãæšä»æ³šç®ãããŠããé åã®éçºã¹ã¿ã€ã«ã«ãããçµç¹ãæåçã«ã©ããã£ãå€åãçãŸããŠãããã«ã€ããŠããèšåããŠãããããšæããŸãã
èè 玹ä»
![]() |
æ£é åå£ (SHONO Yuji ) - NTTããŒã¿ ã·ãã¢ã»ãšãã¹ããŒã
2011幎é ãŸã§éçºèªååæè¡ã®R&Dã«åŸäºããã®åŸãéçºãããžã§ã¯ãæ¯æŽããã©ãã«ã·ã¥ãŒãã£ã³ã°çã«äž»æŠå Žãç§»ããããœãŒã¹ã³ãŒãèªåçæãã«å ããŠãJenkinsãMavençã®ããã«ãèªååããJsTestDriverãSeleniumçã®ããã¹ãèªååããæ±ãããã«ãªãã倿§åããéçºèªååæè¡ååã«èå³ã
æè¿ã¯ç¬¬åã®èªååã§ããInfrastructure as Codeçã®ãåºç€èªååãã®é åã«æ¹ãããŠãããéçºèªååæè¡ã«é¢ããéèªã»èšäºå·çãè¡ãã2å ã®ããã


