ã¢ããªã¹ãã€ãã³ãé§ååã§ã¹ã±ãŒã«ã»ãã¥ã»ãŒããå¯èœã§ç¬ç«ããŠãããã€ã§ãããµãŒããŒã¬ã¹ãã€ã¯ããµãŒãã¹ãžãšåè§£ããŸãã

ã¹ã¿ãŒãã¢ããäŒæ¥ã«ããŸãæ©èœããŠããã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ããèŠæš¡ãæ¡å€§ããã«ã€ããŠè² åµãšãªããŸããåäžã®ã³ãŒãããŒã¹ã§ã¯ããã§ãã¯ã¢ãŠããããŒã®å€æŽã«ã¯ããŠãŒã¶ãŒãããã¡ã€ã«ã¢ãžã¥ãŒã«ãéç¥ãšã³ãžã³ãã¬ããŒããã€ãã©ã€ã³ãå«ãã¢ããªã±ãŒã·ã§ã³å šäœãåãããã€ããå¿ èŠããããŸããããŒã ãå ±æã³ãŒãããŒã¹ãžã®ããŒãžã調æŽããããããªãªãŒã¹ãµã€ã¯ã«ã¯æ°é±éã«åã³ã1ã€ã®ã¢ãžã¥ãŒã«ã®ã¡ã¢ãªãªãŒã¯ããã©ãããã©ãŒã å šäœãããŠã³ãããå¯èœæ§ããããŸããã¹ã±ãŒãªã³ã°ã¯ç²ç²åºŠã§ãããæ€çŽ¢ãµãŒãã¹ã®ã¿ãè² è·ãåããŠããå Žåã§ãã¢ããªã¹å šäœãæ°Žå¹³ã«ã¹ã±ãŒã«ããå¿ èŠããããããèšç®ãªãœãŒã¹ã®ç¡é§ãçºçããŸãããšã³ãžãã¢ãªã³ã°ããŒã ã¯éçºé床ã倱ããã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã¹ãã¯ãã©ãã£ãã¯ã«æ¯äŸããŠå¢å ãããããªãé害ã®çç ŽååŸãã¢ããªã±ãŒã·ã§ã³å šäœã«åã³ãŸãã
次ã®ãããžã§ã¯ãã®ããã®å®è£ ãã«ãŒããªã³ãããã£ãšèŠã€ãã

ã¹ã±ãŒã«ã«ããããã¬ãŒãã³ã°ãšæšè«ã®ããã®ã€ã³ããªãžã§ã³ããªãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã«ãããGPUå©çšçãæå€§åããå®éšãããã®ã³ã¹ããæå°éã«æããŸãã

MicrocosmWorksã¯ãã¹ãã©ã³ã°ã©ãŒã»ãã£ã°ã»ãã¿ãŒã³ãæ¡çšããŠããŸãããã®ãã¿ãŒã³ã§ã¯ã皌åäžã®ã¢ããªã¹ãšäžŠè¡ããŠæ°ããæ©èœããµãŒããŒã¬ã¹ãã€ã¯ããµãŒãã¹ãšããŠæ§ç¯ããAPIã²ãŒããŠã§ã€ããã£ãŒãã£ãŒãã©ã°ã𿮵éçãªãã©ãã£ãã¯ã·ããã«åºã¥ããŠãå€ãã³ã³ããŒãã³ããšæ°ããã³ã³ããŒãã³ãéã§ãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ããŸããåãã¡ã€ã³å¢çã¯ãæãçµå床ãäœãã䟡å€ã®é«ãã³ã³ããŒãã³ãããçæããæ®µéçã«æœåºãããŸãããã®éãã¢ããªã¹ãšãã€ã¯ããµãŒãã¹ã®ããŒã¿ã¢ãã«éã®å€æãè¡ãã¢ã³ãã»ã³ã©ãã·ã§ã³ã»ã¬ã€ã€ãŒãä»ããŠåŸæ¹äºææ§ãç¶æããŸãããã®ã¢ãããŒãã¯ããªã¹ã¯ã®é«ãããã°ãã³ã»ã«ãããªãŒããŒãå¿ èŠãšãããæœåºããšã«æ®µéçãªäŸ¡å€ãæäŸããŸããå žåçãªç§»è¡æéã¯ãã¢ããªã¹ã®è€éãã«ããããŸããã6ã18ã¶æã§ãã
MicrocosmWorksã¯ãã³ãŒã«ãã¹ã¿ãŒãã¬ã€ãã³ã·ïŒã©ã³ã¿ã€ã ãšããã±ãŒãžãµã€ãºã«å¿ããŠéåžž100msïœ3ç§ïŒã«å¯ŸåŠããããã«ãã¯ãªãã£ã«ã«ãã¹åãã®ããããžã§ãã³ã°ãããã³ã³ã«ã¬ã³ã·ãŒã颿°ãŠã©ãŒã ããŒãæŠç¥ãåæåæéãæå°éã«æããæé©åããããããã€ã¡ã³ãããã±ãŒãžããããŠã¬ã€ãã³ã·ã«ææãªæäœãåžžã«ãŠã©ãŒã ãªãµãŒãã¹ã«ã«ãŒãã£ã³ã°ãããããããã³éåææäœã«ã¯æšæºã®ãµãŒããŒã¬ã¹ã¹ã±ãŒãªã³ã°ã䜿çšãããšããã¢ãŒããã¯ãã£äžã®æ±ºå®ãæ¡çšããŠããŸããç¹ã«Lambdaã®å Žåããã軜éãªã©ã³ã¿ã€ã ïŒJavaã§ã¯ãªãNode.jsãŸãã¯PythonïŒã䜿çšããäŸåé¢ä¿ãã³ãã«ãµã€ãºãæå°éã«æããJavaã¯ãŒã¯ããŒãåãã«Lambda SnapStartãæŽ»çšããããšã§æé©åãå³ã£ãŠããŸããéèŠãªã®ã¯ãã©ã®APIãã¹ãæ¬åœã«ã¬ã€ãã³ã·ã«ææã§ãããããããã¯ã³ãŒã«ãã¹ã¿ãŒãã蚱容ã§ãããããããã¡ã€ãªã³ã°ããå¿ èŠã®ãªãå Žæã§ã®ããããžã§ãã³ã°ãããã³ã³ã«ã¬ã³ã·ãŒã®è²»çšãåé¿ããããšã§ãã
MicrocosmWorksã¯åæ£ãã©ã³ã¶ã¯ã·ã§ã³ã«å¯ŸããŠSagaãã¿ãŒã³ãå®è£ ããŠãããã¹ãããã倱æããå Žåã«éšåçãªæäœããããã«ããŒã«ããã¯ããè£åãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããã³ã¬ãªã°ã©ãã£ãŒïŒã€ãã³ãé§ååïŒãŸãã¯ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ïŒã¹ããã颿° / ã¯ãŒã¯ãããŒãšã³ãžã³ïŒã®ãããããéããŠããã«ããµãŒãã¹ããžãã¹ããã»ã¹ã調æŽããŸããããŒã¿æŽåæ§ã«ã€ããŠã¯ãåãã€ã¯ããµãŒãã¹ãèªèº«ã®ããŒã¿ã¹ãã¢ãææããä»ã®ãµãŒãã¹ãããŒã«ã«ã®ãªãŒãã¢ãã«ãç¶æããããã«æ¶è²»ãããã¡ã€ã³ã€ãã³ããå ¬éããEvent SourcingãšCQRSãã¿ãŒã³ã䜿çšããŠããŸãããã®Eventual Consistencyã®ã¢ãããŒãã¯ããµãŒããŒã¬ã¹ã®ããã©ãŒãã³ã¹ãäœäžããã忣ãã©ã³ã¶ã¯ã·ã§ã³ã®èª¿æŽãäžèŠã«ããçã«Strong ConsistencyãèŠæ±ãããããžãã¹ã¯ãªãã£ã«ã«ãªæäœã§ã¯åææ€èšŒã¹ãããã䜿çšããŸãã
MicrocosmWorks ã¯ãåäžã® trace ID ã§å šãŠã® microservice å¢çãè¶ãããªã¯ãšã¹ããé¢é£ä»ãã忣ãã¬ãŒã·ã³ã°ïŒAWS X-RayãOpenTelemetryããŸã㯠Datadog APT ã䜿çšïŒãå šãŠã®ãã°ãšã³ããªã«çžé¢ã¡ã¿ããŒã¿ãå«ãæ§é åãã®ã³ã°ããããŠãµãŒãã¹äŸåé¢ä¿ãšã¬ã€ãã³ã·ã®ããŒã»ã³ã¿ã€ã«ãèŠèŠåããã«ã¹ã¿ã ã¡ããªã¯ã¹ããã·ã¥ããŒããå°å ¥ããŠããŸãããªãã¶ãŒãããªãã£ã¹ã¿ãã¯ã«ã¯ããŠãŒã¶ãŒã«åœ±é¿ãäžããåã«ãã¬ã€ãã³ã·ã®æ¥å¢ããšã©ãŒçã®å¢å ããŸãã¯ç°åžžãªåŒã³åºããã¿ãŒã³ãèŠåããèªåç°åžžæ€åºãå«ãŸããŠããŸãããŸãã倱æããéåææäœãéãã«æ¶ããã®ã§ã¯ãªããããã«è¡šé¢åãããããã«ãdead letter queue ã¢ãã¿ãªã³ã°ãšèªåãªãã©ã€å¯èŠæ§ãå®è£ ããŠããŸãããªãã¶ãŒãããªãã£ã€ã³ãã©ã¹ãã©ã¯ãã£ã®éçºè²»çšã¯$20ã$40/æã§ãã
MicrocosmWorks ã¯ãã客æ§ã®ç¹å®ã®ãã©ãã£ãã¯ãããã¡ã€ã«ã«åãããŠããµãŒããŒã¬ã¹ã®åŸé課éïŒã€ã³ãã±ãŒã·ã§ã³ããšã®æéïŒãšã³ã³ããããŒã¹ã®ä»£æ¿æ¡ïŒECS Fargate, EKSïŒãæ¯èŒãã詳现ãªã³ã¹ãã¢ããªã³ã°ã宿œããŸããããã¯ãæçåå²ç¹ããªã¯ãšã¹ãéãå®è¡æéãã¡ã¢ãªèŠä»¶ãããã³ãã©ãã£ãã¯ã®äºæž¬å¯èœæ§ã«å€§ããäŸåããããã§ãããµãŒããŒã¬ã¹ã¯éåžžãããŒã¹ãæ§ã®ããäœããäžçšåºŠã®ãã©ãã£ãã¯ã®ã¯ãŒã¯ããŒãïŒ1颿°ããã1æ¥100äžã€ã³ãã±ãŒã·ã§ã³æªæºïŒã«å¯ŸããŠããè²»çšå¯Ÿå¹æãé«ããªããŸããäžæ¹ãã³ã³ããããŒã¹ã®ãã€ã¯ããµãŒãã¹ã¯ãäºçŽããããã£ãã·ãã£ãå®å šã«æŽ»çšãããé«ã¹ã«ãŒãããã§å®åžžç¶æ ã®ã¯ãŒã¯ããŒãã«å¯ŸããŠå®äŸ¡ã«ãªããŸããMicrocosmWorks ã¯ãåŒŸåæ§ã®ããã«äžéšã®ãµãŒãã¹ããµãŒããŒã¬ã¹ã§å®è¡ããã³ã¹ãå¹çã®ããã«é«ãã©ãã£ãã¯ã®ãµãŒãã¹ãé©åãªãµã€ãºã®ã³ã³ããã§å®è¡ãããã€ããªããã¢ãŒããã¯ãã£ããã°ãã°æšå¥šããŠããŸãã
å°éããŒã ãã客æ§ã®ããžãã¹ã®ããã«ãã®ãœãªã¥ãŒã·ã§ã³ãæ§ç¯ããæ¹æ³ã«ã€ããŠãåãåãããã ããã
ãåãåããMicrocosmWorks ã¯ããã¡ã€ã³é§åèšèšãé©çšããŠã¢ããªã¹å ã®ãå¢çä»ããããã³ã³ããã¹ã (bounded contexts)ããç¹å®ããã¹ãã©ã³ã¬ãŒã»ãã£ã°ã»ãã¿ãŒã³ïŒstrangler fig patternïŒã䜿çšããŠãããããç¬ç«ããŠãããã€å¯èœãªãµãŒããŒã¬ã¹ãã€ã¯ããµãŒãã¹ã«äœç³»çã«æœåºããŸãããªã¹ã¯ã®é«ãããã°ãã³ãªã©ã€ãã§ã¯ãªããAPI gateway ã®èåŸã«ã¢ããªã¹ãã©ããããæ°ãããµãŒãã¹ãæ€èšŒãããã«ã€ããŠã段éçã«ãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ããŸããåãã€ã¯ããµãŒãã¹ã¯ãLambdaãCloud FunctionsããŸã㯠Fargate ãšãã£ããµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°äžã«æ§ç¯ããããããŒãžãã¡ãã»ãŒãžãããŒã«ãŒãä»ããã€ãã³ãé§ååéä¿¡ãè¡ããŸãããã®çµæãåãµãŒãã¹ã¯ã¢ã€ãã«æã«ç¬ç«ããŠãŒãã«ã¹ã±ãŒã«ããæ°ç§ã§ãããã€ãããã«ã¹ã±ãŒãããããšãªãç¬ç«ããŠé害ãçºçããã·ã¹ãã ãå®çŸããŸãã
API gateway ã¯åäžã®ãšã³ããªãã€ã³ããšããŠæ©èœãããã£ãŒãã£ãŒãã©ã°ãšãã¹ããŒã¹ã®ã«ãŒã«ã«åºã¥ããŠãã¬ã¬ã·ãŒã¢ããªã¹ãŸãã¯æ°ãããã€ã¯ããµãŒãã¹ã«ãªã¯ãšã¹ããã«ãŒãã£ã³ã°ããŸãããµãŒãã¹ã¯ã€ãã³ããã¹ãä»ããŠéåæçã«éä¿¡ããåãµãŒãã¹ãç¬èªã®ããŒã¿ã¹ãã¢ãææããŸããå ±æã¹ããŒãã¬ãžã¹ããªã¯ãããŒã ãšããŒãžã§ã³éã§ã€ãã³ãã³ã³ãã©ã¯ãã®äºææ§ãä¿èšŒããŸãã
| ã¬ã€ã€ãŒ | ãã¯ãããžãŒ |
|---|---|
| ããã¯ãšã³ã | TypeScript (Node.js), Python, AWS Lambda, AWS Step Functions, Fargate |
| AI / ML | ã€ã³ããªãžã§ã³ããªèªåã¹ã±ãŒãªã³ã°äºæž¬ããµãŒãã¹ã¡ããªã¯ã¹ã«ãããèªåç°åžžæ€åº |
| ããã³ããšã³ã | React, micro-frontends via Module Federation, Storybook |
| ããŒã¿ããŒã¹ | DynamoDB (ãµãŒãã¹ããš), Aurora Serverless, ElastiCache, S3 |
| ã€ã³ãã©ã¹ãã©ã¯ã㣠| AWS CDK, SST (Serverless Stack), EventBridge, SQS, GitHub Actions, OpenTelemetry, Datadog |
ãã®å€é©ã¯ãã¹ãã©ã³ã¬ãŒã»ãã£ã°ã»ãã¿ãŒã³ïŒstrangler fig patternïŒã䜿çšããŠã10ã14é±éãããŠæ®µéçã«å®æœãããŸãã1ã2é±ç®ã§ã¯ããã¡ã€ã³é§åèšèšã¯ãŒã¯ã·ã§ããã宿œããå¢çä»ããããã³ã³ããã¹ãïŒbounded contextsïŒãç¹å®ããããžãã¹äŸ¡å€ãšçµååæã«åºã¥ããŠæœåºåè£ã®åªå é äœä»ããè¡ããŸãã3ã7é±ç®ã§ã¯ãAPI gatewayãã€ãã³ããã¹ãå®è£ ãããµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ãšç¬ç«ããããŒã¿ã¹ãã¢ãåããæåã®2ã€ã®é«äŸ¡å€ãã€ã¯ããµãŒãã¹ãæœåºããŸãã8ã11é±ç®ã§ã¯ãOpenTelemetry ãšåæ£ãã¬ãŒã·ã³ã°ã«ããå¯èŠ³æž¬æ§ã¹ã¿ãã¯ã確ç«ããªãããæ®ãã®åªå ãµãŒãã¹ã®æœåºãç¶è¡ããŸãã12ã14é±ç®ã§ã¯ããã©ãã£ãã¯ç§»è¡ãå®äºãã眮ãæããããã¢ããªã¹ã¢ãžã¥ãŒã«ã廿¢ããéçšã©ã³ããã¯ãšãšãã«ããŒã ã®ãªã³ããŒãã£ã³ã°ã»ãã·ã§ã³ãæäŸããŸãã
| ææš | æ¹å | 詳现 |
|---|---|---|
| ãããã€é »åºŠ | 20ååäž | 調æŽãããã¢ããªã¹ãªãªãŒã¹ã«ä»£ãããç¬ç«ãããµãŒãã¹ãããã€ã¡ã³ããå¯èœã« |
| ã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã¹ã | 35-50%åæž | ãµãŒããŒã¬ã¹ã®ã¹ã±ãŒã«ã»ãã¥ã»ãŒãã«ãããäœãã©ãã£ãã¯ãµãŒãã¹ã«ãããåžžæçšŒåã®èšç®ãªãœãŒã¹ãäžèŠã« |
| å¹³ååŸ©æ§æé | 75%åæž | é害ã¯åã ã®ãµãŒãã¹ã«åé¢ãããèªåãªãã©ã€ãšãµãŒããããã¬ãŒã«ãŒã«ããå¯Ÿå¿ |
| éçºè ãªã³ããŒãã£ã³ã° | 60%é«éå | æ°ãããšã³ãžãã¢ã¯ã¢ããªã¹å šäœã§ã¯ãªããåäžã®å¢çä»ããããã³ã³ããã¹ãïŒbounded contextïŒã§ç«ã¡äžããããšãå¯èœã« |
| ãªãªãŒã¹ãªãŒãã¿ã€ã | 85%åæž | æ°é±éã®èª¿æŽãããæ°æéã§ã®ç¬ç«ãããµãŒãã¹ãããã€ã¡ã³ããž |
ã³ã³ãã©ã€ã¢ã³ã¹ãç ç²ã«ããããšãªããæ©å¯ããŒã¿ããªã³ãã¬ãã¹ã«ä¿æãã€ã€ããã®ä»ã®ãã¹ãŠã«å¯ŸããŠã¯ã©ãŠãã®ã¢ãžãªãã£ãè§£æŸããŸãã