MS_CloudApplicationArchitectureGuide - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒã¢ãŒããã¯ãã£èšèšïŒ
- ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãŒããã¯ãã£
- Azure Well-Architected Framework
- ã¯ã©ãŠã ã¢ããªã±ãŒã·ã§ã³ ã¢ãŒããã¯ã㣠ã¬ã€ã
- åç §ã¢ãŒããã¯ãã£
- ã¯ã©ãŠãèšèšãã¿ãŒã³
- åèããç®æ¬¡ãæããŠäœç³»åããã
- çµæ§ãç¶²çŸ ãåºæ¥ãŠæ¥ãïŒãªã³ããã³ãã§è¿œèšäºå®ïŒã
è£è¶³ïŒ3 ããŒãžã®æ£²ã¿åãïŒ: Azure Architecture Center ã®å 容ã¯
æ¬ Wiki ã§ã¯æ¬¡ã® 3 ããŒãžã«åãããŠãããæ··åããããã®ã§æŽçããŠããã
ããŒãž æ±ããã® ç²åºŠ Azure Well-Architected Framework è©äŸ¡ã®èгç¹ïŒ5 æ¬ã®æ±ïŒ å€æåºæº æ¬ããŒãž éžæè¢ã®äœç³»ïŒã¹ã¿ã€ã«ã»ååã»æè¡éžå®ã»ãã¹ã ãã©ã¯ãã£ã¹ïŒ èšèšæé åç §ã¢ãŒããã¯ãã£ å ·äœçãªæ§æäŸ å®è£ ã®åºçºç¹ ããã«ãåã ã®å®è£ ææ³ã¯
ã¯ã©ãŠãèšèšãã¿ãŒã³ã«ãŸãšãŸã£ãŠããã
以äžã®ãããªç«ãŠä»ãã«ãªã£ãŠããã
Azure Batch (HPC) æšããããã
- ãããªãã·ã¥/ãµãã¹ã¯ã©ã€ã
- ã€ãã³ã ã¹ããªãŒã ã¢ãã«
- ã€ãã³ãããã°ã«æžã蟌ãŸããã
- ã¯ã©ã€ã¢ã³ãã¯ãã€ã§ãåå ã§ããã€ãã³ããåç
- ã¹ããªãŒã å ã§ã¯ã©ã€ã¢ã³ãã®äœçœ®ãé²ããã®ã¯ãã¯ã©ã€ã¢ã³ãã®åœ¹å²
è£è¶³ïŒãã® 2 ã€ã¯å¥ç©ïŒ: åããã€ãã³ããã§ãã
ã¡ãã»ãŒãžã³ã°åïŒPub/SubïŒãšã€ãã³ã ã¹ããªãŒã åã¯
æ§è³ªããŸã£ããç°ãªãããããæ··åãããšè£œåéžå®ã誀ãã
Pub/SubïŒã¡ãã»ãŒãžïŒ ã€ãã³ã ã¹ããªãŒã ïŒãã°ïŒ ã€ãã³ãã®å¯¿åœ æ¶è²»ããããæ¶ãã ä¿ææéãŸã§æ®ã äœçœ®ã®ç®¡ç ãããŒã«ãŒåŽ ã¯ã©ã€ã¢ã³ãåŽïŒãªãã»ããïŒ åç åºæ¬çã«äžå¯ å¯èœïŒéå»ããèªã¿çŽããïŒ åŸããåå éå»åã¯åãåããªã éå»åããèªãã Azure ã®äŸ Service BusãEvent Grid Event HubsïŒKafka äºæïŒ ãã¯ã©ã€ã¢ã³ãã®äœçœ®ãé²ããã®ã¯ã¯ã©ã€ã¢ã³ãã®åœ¹å²ããšãã
æ¬æã®äžæãããã®éãã®æ žå¿ãçªããŠããã
- çé¢ç®ã«ãããšæ²Œã
- SOA ã® REST WebAPI çïŒéïŒ
è£è¶³ïŒãçé¢ç®ã«ãããšæ²Œãã¯æ£ããïŒ: ãã®èº«ãèããªãäžèšã¯
å®åäžããããŠéèŠãªææã§ããããã€ã¯ããµãŒãã¹ã¯
æè¡ã®éžæã§ã¯ãªãçµç¹ãšéçšã®éžæã§ããã
åå²ããç¬éã«æ¬¡ããã¹ãŠå¿ èŠã«ãªãã
åäžã¢ããªãªãäžèŠã ã£ããã® ãµãŒãã¹ééä¿¡ã®å€±æåŠçïŒPollyãå詊è¡ããµãŒããã ãã¬ãŒã«ãŒïŒ 忣ãã©ã³ã¶ã¯ã·ã§ã³ã®åé¿ïŒSagaãè£æ£ãã©ã³ã¶ã¯ã·ã§ã³ãçµææŽåæ§ïŒ 忣ãã¬ãŒã·ã³ã°ïŒ1 ãªã¯ãšã¹ããäœåãµãŒãã¹ãè·šãïŒ ãµãŒãã¹ ãã£ã¹ã«ããªãAPI ã²ãŒããŠã§ã€ ãµãŒãã¹ããšã® CI/CD ãšããŒãžã§ã³äºæç®¡ç ããŒã¿ã®éè€ãšåæïŒDB ãå ±æã§ããªãïŒ ãããã£ãŠçŸåšã®äžè¬çãªæéã¯
**ãã¢ããªã¹ããå§ããŠãå¿ èŠã«ãªã£ãéšåã ãåãåºãã**ã§ãã
ïŒã¢ãžã¥ã©ãŒ ã¢ããªã¹ïŒã
ãSOA ã® REST çããšããèŠçŽãã
ç²åºŠãšèªåŸæ§ã®åºŠåããéãã ããšããæå³ã§ã¯çãå°ãŠããã
ã¢ããªã±ãŒã·ã§ã³ãè«çå±€ãšç©çå±€ã«åé¢
è£è¶³: åŸæ¥åã®åå²ã§ããã
ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãŒããã¯ãã£ã§æ±ã
ç©ç 2 å±€ïŒ3 å±€ã®è°è«ããã®ãŸãŸåœãŠã¯ãŸãã
ã¯ã©ãŠããžã®ç§»è¡ïŒãªããïŒã·ããïŒã§æãéžã°ãã圢ã§ãããã
- Web ããŒã«ãWorker ããŒã«
- å¿ èŠã«å¿ããŠããã¥ãŒ
è£è¶³: ãWeb ããŒã«ïŒWorker ããŒã«ãã¯
Azure Cloud ServicesïŒã¯ã©ã·ãã¯ïŒã®çšèªã§ãã
ïŒåãµãŒãã¹ã¯ 2024 幎 8 æã«æäŸçµäºïŒã
ãã ãæ§æãšããŠã® Web-Queue-Worker ã¯çŸåœ¹ã§ããã
çŸåšã¯æ¬¡ã®ããã«å®è£ ããã
åœ¹å² çŸåšã®ãµãŒãã¹ Web App ServiceãContainer Apps ãã¥ãŒ Storage QueueãService Bus Worker FunctionsãWebJobsãContainer Apps Jobs éãåŠçããã¥ãŒçµç±ã§åŸæ®µã«éãããšãã圢ã¯ã
å¿çæéã®ç¢ºä¿ãšè² è·å¹³æºåã®äž¡æ¹ã«å¹ããæãè²»çšå¯Ÿå¹æã®é«ãæ§æã§ããã
- Polly ïŒ Pollyã§è¶³ããŠããªããµãŒãå®è£
- ãã§ã€ã«ã»ãªãŒããŒïŒ
OTR_HighReliabilityDesignPoints.mdïŒ - ãã¿ãŒã³
- ãã®ä»
- ãã©ãŒã«ãæ¿å ¥ã§ãã¹ãããã
- Chaos ãšã³ãžãã¢ãªã³ã°ãå©çšããã
- åŸæ¥åã®ãã§ã€ã«ã»ãªãŒããŒã«å ãã
- ã·ã¹ãã ã»ããŒã¿ã®ããŒãã£ã·ã§ã³åå²
- è€æ°ã®ãªãŒãžã§ã³ã«ãããã€
- geo ã¬ããªã±ãŒã·ã§ã³
- Traffic ManagerïŒAzureã®é«å¯çšæ§èšèšïŒ
- ãã©ã³ã¶ã¯ã·ã§ã³ïŒACID ç¹æ§ïŒä»¥å€ã®å®çŸæ¹æ³ãæ€èšããã
- ãã®ä»
- ãã¡ã€ã³ ã€ãã³ããšåæ
- èªå / æžèŸŒã¯ãŒã¯ããŒãã®ç«¶åãåæž
- å¥ã®ã€ã³ã¹ã¿ã³ã¹
- åªçæäœã®èšèš
- ãªãŒããŒéžå®
- 䞊åã®åæ£ã¢ã«ãŽãªãºã ïŒããã°ããŒã¿ç³»ã®åæ£ïŒ
è£è¶³ïŒã調æŽãïŒ coordination ãã¯ã©ãŠãã§æãé«ãã€ãïŒ: ãã®ååã®åæã¯
"Minimize coordination" ã§ããã
ã€ã³ã¹ã¿ã³ã¹éã§åæãåãåŠçïŒããã¯ã忣ãã©ã³ã¶ã¯ã·ã§ã³ã
é åºä¿èšŒïŒã¯ãå°æ°ãå¢ããã»ã©åŸ ã¡ãå¢ããããã
ã¹ã±ãŒã«ã¢ãŠãã®å¹æãæã¡æ¶ããŠããŸããã調æŽããã å°æ°ãå¢ãã â 調æŽã®ãªãŒãããããå¢ãã â é æã¡ ã調æŽãªãã å°æ°ãå¢ãã â ãã®ãŸãŸã¹ã«ãŒãããã䌞ã³ããããã£ãŠã¯ã©ãŠãã§ã¯ãACID ã諊ãã代ããã«
- 楜芳æä»ïŒè¡çªã¯çšãšä»®å®ããŠãèµ·ããã匟ãïŒ
- åªçæ§ïŒåãæäœãäœåºŠå®è¡ããŠãåãçµæïŒ
- çµææŽåæ§ïŒä»ããäžèŽããŠããªããŠããïŒ
- è£æ£ãã©ã³ã¶ã¯ã·ã§ã³ïŒããŒã«ããã¯ã®ä»£ããã«æã¡æ¶ãæäœïŒ
ãšããææ®µã§çœ®ãæããã
ç¹ã«åªçæ§ã¯ãå詊è¡ãåæãšãã以äž
é¿ããŠéããªãèŠä»¶ã«ãªãïŒPollyïŒã
åçŽæ¹åã»æ°Žå¹³æ¹åã«ã¹ã±ãŒã«ã§ããããã«èšèš
- åçŽæ¹å
ã·ã¹ãã ãã¢ããªã§æ§æããã- ããã«ããã¯ã®ç¹å®ãã¯ãŒã¯ããŒãã®åè§£ãªã©ã
- ã¿ã¹ã¯ã®ãªãããŒãïŒããã¯ã°ã©ãŠã³ãã»ãžã§ãåïŒ
- æ°Žå¹³æ¹å
ã¯ã©ãŠãæ©èœã§æ§æããã- ãµãŒããŒã»ã¹ããŒãã¬ã¹
- ã¹ã±ãŒã«ã¢ãŠãã»ã¹ã±ãŒã«ã€ã³
- èªåã¹ã±ãŒã«
è£è¶³ïŒã¹ããŒãã¬ã¹åãå šãŠã®åæïŒ: æ°Žå¹³æ¹åã®é ã«ãã
ããµãŒããŒã»ã¹ããŒãã¬ã¹ããã
å®ã¯ãã®ç¯ã§æãéèŠãªäžè¡ã§ããã
ãµãŒããã»ãã·ã§ã³ç¶æ ãä¿æããŠãããšã
- ã¹ã±ãŒã«ã¢ãŠãããŠãåããµãŒãã«æ»ãå¿ èŠãããïŒã¹ãã£ãã㌠ã»ãã·ã§ã³ïŒ
- ã¹ã±ãŒã«ã€ã³ãåèµ·åã§ç¶æ ãæ¶ãã
ãããæ°Žå¹³æ¹åã®ã¹ã±ãŒã«ãæ©èœããªãã
ASP.NET ã§ã¯ãã»ãã·ã§ã³ç¶æ ã
**ããã»ã¹å€ïŒSQL Server / RedisïŒ**ã«åºããã
ãããããµãŒãã«æããªãèšèšã«ãã
ïŒASP.NETã®ç¶æ ç®¡çæ¹åŒïŒã
ã¹ã±ãŒã«ã»ã¢ããã«éçãããã®ã§ãããŒãã£ã·ã§ã³åå²ã
- ã·ã¹ãã
- ããŒã¿ããŒã¹
- ãã¥ãŒãŸãã¯ã¡ãã»ãŒãž ãã¹
- App Service Web ã¢ããª
- ããŒã¿ããŒã¹
- è¡æ¹å
- åæ¹å
ç°¡åã«èšããšããŒãã«ã®åå² - æ©èœç
è«æ±æžããŒãã«ãšè£œååšåº«ããŒãã«ãåå²
éçšããŒã ãå¿ èŠãªããŒã«ãåŸãããããã«ã¢ããªã±ãŒã·ã§ã³ãèšèš
ãªãã¹ããPaaS / FaaS, SaaSãéžæã
- ããŒã¿ ã¹ãã¢ã®éžæ
- 調æŽãæå°éã«æãã
- ãã®ä»
- éçºããŒã ã®ã¹ãã«ã»ãã
- ã³ã³ããã¹ãå¢çã確èªïŒDDDïŒ
SOA ã£ãœãïŒççµåïŒã
- é«åéãšççµå
- ãµãŒãã¹ãåå¥ã«ãããã€
- å ±éæ©èœãå°çšã®ãµãŒãã¹ã«ãªãããŒã
- ã²ãŒããŠã§ã€ã«ã¯ãã¡ã€ã³ ãã¬ããžãå®è£
ããªã
- ãã¡ã€ã³ ãã¬ããžãã«ãã»ã«å
- ãªãŒãã³ ã€ã³ã¿ãŒãã§ã€ã¹ãå ¬é
- éåæã¡ãã»ãŒãžã³ã°ã䜿çš
-
ã¯ãªãŒã³ã»ã¢ãŒããã¯ãã£ïŒ.NETéçºåºç€éšäŒ WikiïŒçãª
ïŒæœè±¡ã€ã³ãã©ã¹ãã©ã¯ãã£ããã¡ã€ã³ ããžãã¯ãšåé¢ïŒ
- æé·ã«å¯Ÿå¿å¯èœãªèšç»ãšã³ã¹ãã®ç®¡ç
- ç®æšåŸ©æ§æé (RTO)ãç®æšåŸ©æ§æç¹ (RPO)ãæå€§èš±å®¹åæ¢æé (MTO)
- ãµãŒãã¹ ã¬ãã« ã¢ã°ãªãŒã¡ã³ã (SLA) ãšãµãŒãã¹ ã¬ãã«ç®æš (SLO)
- èŠä»¶
- æ©èœèŠä»¶ãšéæ©èœèŠä»¶
- ã¯ãŒã¯ããŒãå¥ã«åããŠèŠä»¶ã倿
- ããžãã¹ ãã¡ã€ã³ãäžå¿ã«ã¢ããªã±ãŒã·ã§ã³ãã¢ãã«åïŒDDDïŒ
è£è¶³ïŒåæ SLA ã«æ³šæïŒ: è€æ°ã®ãããŒãžã ãµãŒãã¹ã
çŽåã«çµã¿åããããšãSLA ã¯æãç®ã§äžãããApp Service(99.95%) à SQL Database(99.99%) à Storage(99.9%) â 99.84% â 幎éã®èš±å®¹åæ¢æéã¯ çŽ 14 æéãåãµãŒãã¹ã 99.9% 以äžã ããå šäœã 99.9%ãã¯æç«ããªãã
åé·æ§æïŒäžŠåïŒãå ¥ãããšéã«äžããããã
çŽåã䞊åããæèããŠåæ SLA ãèšç®ããå¿ èŠãããã
é©åãªã¢ã³ã䜿ããšã
- ãã¹ãã£ã³ã°ç°å¢
- åç §ã¢ãŒããã¯ãã£
é©åãªã¢ã³ã䜿ããšã
- RDBMSïŒSQL Serverãªã©ïŒ
- NoSQLïŒ.NETéçºåºç€éšäŒ WikiïŒ
- , etc.
â» å€èšèªããŒã·ã¹ãã³ã¹ãšèšããããã
è£è¶³ïŒãé©åãªã¢ã³ã䜿ããã®å€æè»žïŒ: çªãæŸããæžãæ¹ã ãã
å®éã®å€æè»žã¯ããã»ã©å€ããªãã
åã åå² åŒ·ãæŽåæ§ãèŠãã èŠã â RDBMSãèŠããªã â NoSQL ãå¯ ã¯ãšãªã®åœ¢ã¯æ±ºãŸã£ãŠããã æ±ºãŸã£ãŠãã â ããŒå€ïŒããã¥ã¡ã³ããèªç± â RDBMS ã¹ããŒãã¯å€åããã ããå€ãã â ããã¥ã¡ã³ã DB æ³å®ããŒã¿éãšã¹ã«ãŒããã åäžã€ã³ã¹ã¿ã³ã¹ã®éçãè¶ ããã é¢é£ïŒJOINïŒãäžå¿ã äžå¿ â RDBMSãã°ã©ã ãªãããå€èšèªããŒã·ã¹ãã³ã¹ããå矩ã©ããã«å®è·µãããš
éçšå¯Ÿè±¡ã® DB ãå¢ããŠç Žç¶»ããããã
æ¢å®ã¯ RDBMSãæç¢ºãªçç±ããããã®ã ãå¥ã® DBãšãã
ä¿å®çãªéçšãçŸå®çã§ããã
è² è·åæ£ã«ã€ããŠã¯ãNLBã®é
ãåèã«ãªãã
ïŒNLB ã䜿ããšã¯èšã£ãŠããªãïŒ
è£è¶³ïŒAzure ã®è² è·åæ£ãµãŒãã¹ã®éžã³åãïŒ: 4 çš®é¡ããã
OSI åç §ã¢ãã«ã®ã©ã®å±€ã§æ¯ãããš
ã°ããŒãã«ããªãŒãžã§ã³å ãã§æŽçã§ããã
ãµãŒãã¹ å±€ ç¯å² äž»ãªçšé Traffic Manager DNS ã°ããŒãã« ãªãŒãžã§ã³éã®æ¯ãåãã»DR Front Door L7ïŒHTTPïŒ ã°ããŒãã« CDN + WAF + ã°ããŒãã«è² è·åæ£ Application Gateway L7ïŒHTTPïŒ ãªãŒãžã§ã³å URL ãã¹ ããŒã¹æ¯ãåããWAFãSSL çµç«¯ Load Balancer L4ïŒTCP/UDPïŒ ãªãŒãžã§ã³å é HTTP ãå«ãäžè¬çãªåæ£
è²ã ãããããã
- Azure Service Bus
- Event Grid
- Event Hubs
è£è¶³ïŒ3 ã€ã®äœ¿ãåãïŒ: ååã䌌ãŠããã圹å²ã¯æç¢ºã«éãã
ãµãŒãã¹ çš®å¥ ç¹åŸŽ å žåçãªçšé Service Bus ã¡ãã»ãŒãž é åºä¿èšŒããã©ã³ã¶ã¯ã·ã§ã³ãããã ã¬ã¿ãŒãFIFO æ¥ååŠçã®ç¢ºå®ãªåãæž¡ã Event Grid ã€ãã³ãéç¥ è»œéãPush é ä¿¡ãAzure ãªãœãŒã¹ã®å€åã«åå¿ ãªãœãŒã¹äœæãããªã¬ã«åŠçãèµ·å Event Hubs ã€ãã³ã ã¹ããªãŒã 倧éåã蟌ã¿ãåçå¯èœãKafka äºæ ãã¬ã¡ããªã»ãã°ã®åé 倿ã®ãã€ã¯ã
**ãåãããŒãããæ¥åãæç«ããªããïŒã¡ãã»ãŒãžïŒã**ãš
**ã倧éã«æµããŠããäºå®ã®èšé²ãïŒã€ãã³ãïŒã**ã®åºå¥ã§ããã
- WebAPI > REST
- éåææäœïŒCIBAã®ãããªïŒ
- ããŒã¿åŠç
ïŒãããã¯ãŒã¯åž¯åå¹ ãšåŠçèœåã®æå¹æŽ»çšïŒ- ãã£ã«ã¿ãŒ or ããŒãžã³ã°åŠç
- HATEOAS
- ãã€ã㪠ãªãœãŒã¹ã®éšåçãªå¿ç
- ãµãŒããŒå®è£
-
ã¹ã±ãŒã©ããªãã£ãå¯çšæ§ãå¿çæ§ã®ç¶æ
- éåæãµããŒã
- ã¹ããŒãã¬ã¹
- ã¯ã©ã€ã¢ã³ãã®
ã»è¿œè·¡ãšèª¿æŽ
ã»HTTP Keep-Alive ã®ç®¡ç
- Web API
- ãã¹ã
- å ¬éãšç®¡çïŒAzure API ManagementïŒ
-
ã¹ã±ãŒã©ããªãã£ãå¯çšæ§ãå¿çæ§ã®ç¶æ
- ã¯ã©ã€ã¢ã³ãå®è£
- Polly
- ã¯ã©ã€ã¢ã³ã SDK ã®éçº
-
API Gatewayã®å©çš
- äžè¬çæ©èœïŒ.NETéçºåºç€éšäŒ WikiïŒïŒAPI Gatewayã®è©²åœç¯ãåç §ïŒ
- ç£èŠ
- Azure API Management
- ASP.NET Application InsightsïŒAzureã®ç£èŠãšç®¡çïŒ
- ãã®ä»
- ããã¥ã¡ã³ã
æ°Žå¹³æ¹åã®ã¹ã±ãŒãªã³ã°
- ã¢ããªã±ãŒã·ã§ã³èšèš
- ã¯ã©ãŠãæ©èœã®æŽ»çš
- PaaS çµèŸŒã®æ©èœ
- Azure MonitorïŒäžèšã® PaaS ãšçµã¿åãããŠå©çšïŒ
- é¢é£ã®ãããã¿ãŒã³ãšã¬ã€ãã³ã¹
- ãã¿ãŒã³
- ç£èŠãšèšºæïŒã¢ãŒãã»ã¬ã€ãïŒ
è£è¶³ïŒèªåã¹ã±ãŒã«ã¯äžèœã§ã¯ãªãïŒ: å®åã§åé¡ã«ãªãã®ã¯
ã¹ã±ãŒã«ãéã«åããªãã±ãŒã¹ã§ããã
- VM ãã€ã³ã¹ã¿ã³ã¹ã®èµ·åã«ã¯æ°åãããã
æ°åç§ã§ç«ã¡äžããæ¥æ¿ãªã¹ãã€ã¯ã«ã¯è¿œéã§ããªãã- å€å®ã«äœ¿ãã¡ããªãã¯ïŒCPU çïŒã¯é è¡ææšã§ããã
æ··éããŠããå¢ãå§ããã察çãšããŠã¯ã
ææ®µ å 容 ãã¥ãŒã«ããå¹³æºå ã¹ãã€ã¯ããã¥ãŒã§åžåããWorker ã¯äžå®é床ã§åŠç äºæž¬ã«åºã¥ãã¹ã±ãŒã« æ¥åã®ããŒã¯æå»ãæ¢ç¥ãªãã¹ã±ãžã¥ãŒã« ã¹ã±ãŒã«ãäœµçš äºåãŠã©ãŒã ã¢ãã æå°ã€ã³ã¹ã¿ã³ã¹æ°ãé«ãã«èšå® ã¹ã±ãŒã«ã€ã³ã®ç·©å ã¯ãŒã«ããŠã³ãé·ãã«ãããã©ããã³ã°ãé²ã ãŸããåŸè¿°ã®ãã¥ãŒãã³ã°ã®ç¯ã«ãããšããã
èªåã¹ã±ãŒã«ã¯æ ¹æ¬ã®åé¡ãé ãå¯äœçšããã
ïŒé ãã¯ãšãªãå°æ°ã§æŒãåã£ãŠããŸãïŒã
- ããªã¬
- ã€ãã³ã ããªãã³ ããªã¬ãŒ
- ã¹ã±ãžã¥ãŒã« ããªãã³ ããªã¬ãŒ
- ãã®ä»
- çµæã®è¿éæ¹æ³
- ãã¹ãã£ã³ã°ç°å¢
- ããŒãã£ã·ã§ã³åå²ïŒã·ã¹ãã ïŒ
- ç«¶åïŒãªãœãŒã¹ïŒ
- 調æŽãå埩æ§
ã¿ã¹ã¯ã®å調åäœãšè£æ£ - ã¹ã±ãŒãªã³ã°
- é¢é£ã®ãããã¿ãŒã³ãšã¬ã€ãã³ã¹
- 泚æç¹
- é«å¯çšæ§ã®å®è£ ãã¹ã±ãŒã©ããªãã£ã»ããã©ãŒãã³ã¹ã®åäž
- ã³ã³ã«ã¬ã³ã·ãŒã®ç®¡çãæçµçãªæŽåæ§
- ããŒã¿ããã£ãã·ã¥ããã¿ã€ãã³ã°ã決ãã
- ããŒã¿ãå¹ççã«ãã£ãã·ã¥ããæ¹æ³ã決ãã
- éåžžã«åçãªããŒã¿ããã£ãã·ã¥ãã
- ãã£ãã·ã¥å ã®ããŒã¿ã®æå¹æéã管çãã
- ã¯ã©ã€ã¢ã³ãåŽãã£ãã·ã¥å ã®ããŒã¿ãç¡å¹ã«ãã
- Redis CacheïŒ.NETéçºåºç€éšäŒ WikiïŒ
è£è¶³ïŒãã£ãã·ã¥ã®é£æã¯ãæ¶ãæ¹ãïŒ: äžã®æ³šæç¹ã
æå¹æéã»ç¡å¹åã«éäžããŠãããšããã
ãã£ãã·ã¥ã§é£ããã®ã¯èŒãæ¹ã§ã¯ãªãæšãŠæ¹ã§ããã
åé¡ å 容ãšå¯Ÿç ãã£ãã·ã¥ ã¹ã¿ã³ããŒã æéåãã®ç¬éã«å šãªã¯ãšã¹ãã DB ã«æ®ºå°ãããæå¹æéããããïŒãžãã¿ãŒïŒãåçæã 1 æ¬ã«çµã å€ãããŒã¿ã®è¡šç€º æŽæ°æã«æç€ºçã«ç¡å¹åããïŒwrite-through / write-behindïŒ ãã£ãã·ã¥é害æã®éªåŽ© ãã£ãã·ã¥ãèœã¡ããšå šè² è·ã DB ãžãDB åŽãèãããããã確èªããŠãã äœã§ãèŒãã ãããçãäžããã¡ã¢ãªã浪費ãããåç §ãå€ãæŽæ°ãå°ãªããã®ã«çµã
- ã«ãŒãã£ã³ã°ãšããŒãžã§ã³ç®¡ç
- ãã£ãã·ã¥å¶åŸ¡
- ã»ãã¥ãªãã£
- CDN ãã©ãŒã«ããã¯
- ããŒãã£ã·ã§ã³ã®èšèš
- æ°Žå¹³çããŒãã£ã·ã§ã³åå²ïŒè¡æ¹åãã·ã£ãŒãã£ã³ã°ïŒ
- åçŽçããŒãã£ã·ã§ã³åå²ïŒåæ¹åïŒ
- æ©èœçããŒãã£ã·ã§ã³åå²ïŒæ©èœçïŒ
- é¢é£ã®ãããã¿ãŒã³ãšã¬ã€ãã³ã¹
è£è¶³ïŒããŒãã£ã·ã§ã³ ããŒã®éžæãå šãŠã決ããïŒ: æ°Žå¹³åå²ã§ã¯
ããŒã®éžã³æ¹ãåŸããå€ããã®ã極ããŠå°é£ã§ãã
ïŒå šããŒã¿ã®åé 眮ãå¿ èŠã«ãªãïŒãéžå®æã®èгç¹ã¯æ¬¡ã®ãšããã
èŠ³ç¹ å 容 åçã«åæ£ããã åããšããã ããŒãã£ã·ã§ã³ãçãŸããããã ã飜åãã ã¯ãšãªãããŒãå«ãã å«ãŸãªããšå šããŒãã£ã·ã§ã³ãžã®åãåããïŒfan-outïŒã«ãªã è·šããã©ã³ã¶ã¯ã·ã§ã³ãèŠãã èŠããªãåå²äœçœ®ã誀ã£ãŠããå¯èœæ§ãé«ã æç³»åããŒã®çœ æ¥ä»ãããŒã«ãããšææ°ããŒãã£ã·ã§ã³ã«æžã蟌ã¿ãéäžãã SQL Server ã®ããŒãã£ã·ã§ã³ã¯
åäžã€ã³ã¹ã¿ã³ã¹å ã®åå²ã§ããã
ããã§ããã·ã£ãŒãã£ã³ã°ïŒã€ã³ã¹ã¿ã³ã¹ãè·šãåå²ïŒãšã¯
ç®çãç°ãªãç¹ã«ã泚æãã
ïŒSQL Server ã® Elastic Scale ãšããŒã«ïŒã
- Azure SQL Database ã®ããŒãã£ã·ã§ã³åå²
- Azure Table Storage ã®ããŒãã£ã·ã§ã³åå²
- Azure Blob Storage ã®ããŒãã£ã·ã§ã³åå²
- Azure Queue Storage ã®ããŒãã£ã·ã§ã³åå²
- Azure Service Bus ã®ããŒãã£ã·ã§ã³åå²
- Cosmos DB ã®ããŒãã£ã·ã§ã³åå²
- Azure Search ã®ããŒãã£ã·ã§ã³åå²
- Azure Cache for Redis ã®ããŒãã£ã·ã§ã³åå²
- Azure Service Fabric ã®ããŒãã£ã·ã§ã³åå²
- Azure Event Hubs ã®ããŒãã£ã·ã§ã³åå²
- ããŒã¿ ã¹ãã¢ãå«ããã¢ããªã±ãŒã·ã§ã³ ã³ã³ããŒãã³ãã®è€æ°ã®ç¬ç«ããã³ããŒããããã€ããã
- åã ã®ã³ããŒã¯ "ã¹ã¿ã³ã" ãšåŒã°ãã"ãµãŒãã¹ ãŠããã" ãŸã㯠"ã¹ã±ãŒã« ãŠããã" ãšåŒã°ããå Žåãããã
- ãã®ã¢ãããŒãã«ããã
- 顧客ããŒã¿ãåé¢ã§ãã
- ãœãªã¥ãŒã·ã§ã³ã®ã¹ã±ãŒã©ããªãã£ãåäžãã
- ã€ã³ã¹ã¿ã³ã¹ãè€æ°ã®ãªãŒãžã§ã³ã«ãããã€ããããšãå¯èœãšãªãã
- èªååãããå®å šã«å埩å¯èœãªããã〠ããã»ã¹ã䜿çšãã
è£è¶³: ãã«ãããã³ã SaaS ã§
ããã³ãããšïŒãŸãã¯äžå®æ°ã®ããã³ãããšïŒã«äžåŒãäžžããšè€è£œããæ¹åŒã§ããã
åé¢ãšã¹ã±ãŒã«ãåæã«åŸãããäžæ¹ã
ã¹ã¿ã³ãæ°ã ãéçšå¯Ÿè±¡ãå¢ããããã
ãèªååãããå®å šã«å埩å¯èœãªãããã€ãã
åªåç®æšã§ã¯ãªãåææ¡ä»¶ã«ãªã
ïŒã¯ã©ãŠãã®ã€ã³ãã©èªååïŒã
- æ£åžžæ§ã®ç£èŠ
- å¯çšæ§ã®ç£èŠ
- ããã©ãŒãã³ã¹ã®ç£èŠ
- ã»ãã¥ãªãã£ã®ç£èŠ
- SLA ã®ç£èŠ
- ãŠãŒã¶ãŒæäœã®ç£æ»
- å©çšç¶æ³ã®ç£èŠ
- åé¡è¿œè·¡
- æäœã®ãã¬ãŒã¹
- ãªãªãŒã¹ã®ãããã°
- ç£èŠãšèšºæã®ãã€ãã©ã€ã³
- ç£èŠãšèšºæã®ããŒã¿ ãœãŒã¹
- ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ãã«ã¡ã³ãå
- ããŒã¿ã®åéãšä¿å
- ããŒã¿ã®åæãšåé¡ã®èšºæ
- ããŒã¿ã®èŠèŠåãšã¢ã©ãŒãã®çæ
è£è¶³ïŒåæ£ã·ã¹ãã ã§ã¯ãç£èŠããããå¯èŠ³æž¬æ§ããžïŒ: åäžãµãŒãã§ããã°
ãã°ãèŠãã°æžãã ãããªã¯ãšã¹ããè€æ°ãµãŒãã¹ãè·šããš
ã©ãã§é ããªã£ãã®ãããã°ããã¯åãããªãã
ããã§ã次㮠3 æ¬ãæããã®ãçŸåšã®æšæºçãªèãæ¹ã§ããã
æ± å 容 Azure ã§ã®å®è£ ã¡ããªã㯠æ°å€ã®æç³»åïŒCPUãå¿çæéããã¥ãŒé·ïŒ Azure Monitor ãã° äºè±¡ã®èšé² Log Analytics ãã¬ãŒã¹ 1 ãªã¯ãšã¹ãã®çµè·¯ãšååºéã®æèŠæé Application InsightsïŒåæ£ãã¬ãŒã¹ïŒ ç¹ã«åæ£ãã¬ãŒã¹ã¯ã
çžé¢ ID ãå šãµãŒãã¹ã«åŒãåãããšã§
ãA â B â C ã®ãã¡ B ãé ãããå¯èŠåããã
ãããç¡ããšãåŸè¿°ã®ãã«ã¹ã±ãŒã ãšã©ãŒãã®åãåããã§ããªãã
çŸåšã¯ OpenTelemetry ãæšæºèŠæ Œãšãªãã
Application Insights ãããã«æºæ ããŠããã
- Azure ãµãŒãã¹ã®åè©Šè¡æ©èœ
https://docs.microsoft.com/ja-jp/azure/architecture/best-practices/retry-service-specific
- æšæºã®åè©Šè¡æ©æ§ãååšãããã©ããã調ã¹ãã
- æäœãå詊è¡ããã®ã劥åœãã©ããã倿ããã
- é©åãªå詊è¡åæ°ãšééãæ±ºããã
- ã¢ã³ããã¿ãŒã³ãé¿ããã
- å詊è¡ã®æŠç¥ãšå®è£ ããã¹ãããã
- å詊è¡ããªã·ãŒã®æ§æã管çããã
- äžéæ§ã®é害ãšäžéæ§ã§ã¯ãªãé害ãèšé²ã远跡ããã
- çµ¶ãã倱æããæäœã«å¯ŸåŠããã
è£è¶³ïŒå詊è¡ã¯ãããéãããšéå®³ãæªåããããïŒ: äžèЧã®
ãã¢ã³ããã¿ãŒã³ãé¿ãããã®äžèº«ãå®åã§ã¯æéèŠã§ããã
ã¢ã³ããã¿ãŒã³ äœãèµ·ããã å€å±€ã§ã®åè©Šè¡ ã©ã€ãã©ãªã»ã¢ããªã»ã²ãŒããŠã§ã€ãå 3 å â å®é㯠27 åãè² è·ãææ°çã«å¢ãã åºå®ééã§ã®åè©Šè¡ å šã¯ã©ã€ã¢ã³ããåæã«å詊è¡ããå埩çŽåŸã«åã³æœ°ãïŒthundering herdïŒ å詊è¡ãã¹ãã§ãªããã®ãåè©Šè¡ èªèšŒãšã©ãŒã»äžæ£ãªå ¥åïŒ4xxïŒã¯äœåºŠãã£ãŠã倱æãã åªçã§ãªãæäœã®åè©Šè¡ äºéç»é²ã»äºé課é äžéãç¡ã é害ãçµãããªã æ£ãã圢ã¯
ææ°ããã¯ãªãïŒãžãã¿ãŒïŒä¹±æ°ïŒïŒäžéïŒãµãŒããã ãã¬ãŒã«ãŒã§ããã
ãµãŒããã ãã¬ãŒã«ãŒã¯ã倱æãç¶ããã
äžå®æéãŸã£ããåŒã³ã«è¡ããªãããšã§
çžæã®å埩ãåŸ ã¡ãèªååŽã®ã¹ã¬ãããå®ãã
.NET ã§ã¯ Polly ãããããæäŸããã
- ãã¬ã¡ããªã§ã¡ããªãã¯ãåéã§ããããã³ãŒããã€ã³ã¹ãã«ã¡ã³ãåããã
- å¹³åå€ã«ãã£ãŠãå€ãå€ãè§£ããªããªãå¯èœæ§ãããã®ã§ã
90/95/99 ããŒã»ã³ã¿ã€ã«å€ãéŸå€ã«ãç£èŠããã - äžåºŠã« 1 ã€ã®ããã«ããã¯ã«åãçµã
ïŒããã«ããã¯ãåãé€ããšã次ã®å¥ã®ããã«ããã¯ãæããã«ãªãïŒ - ãšã©ãŒãšå詊è¡ã¯ãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ãããã
- 䞊åã忣åã§ããå¯èœæ§ãæ¢ãïŒããŒãã£ã·ã§ã³åå²ïŒã
- 1 ã€ã®æäœãå æ¬çã«ãšã³ãããŒãšã³ãã§ææ¡ããã®ã¯å°é£ã«ãªãã
- äžè²«æ§ã®ãããã¥ãŒãååŸããã«ã¯ãã°ãšã¡ããªãã¯ã 1 ãæã§éèšããã
- èªåã¹ã±ãŒã«ã¯ã
- å ã®åé¡ãè§£ããªããªãå¯èœæ§ãããã
- ãŸããã¹ã±ãŒã«ã¢ãŠãã»ã¹ã±ãŒã«ã€ã³ã®éŸå€ãè§£ããªããªãã
- ã«ã¹ã±ãŒã ãšã©ãŒ
- ãšã©ãŒãé£éããŠæ ¹æ¬åå ãšã¯
ç°ãªãã³ã³ããŒãã³ãã§ã·ã°ãã«ãçŸãã - äžæµã®ãšã©ãŒãåå ã§äžæµã§é害ãçºçããã
- ãšã©ãŒãé£éããŠæ ¹æ¬åå ãšã¯
ç§»è¡ã¡ã¢ïŒäœè£ïŒ: åå žã®ã90/95/99 ããŒã»ã³ã¿ã€ã«ããŒã»ã³ã¿ã€ã«å€ãã¯
ãããŒã»ã³ã¿ã€ã«ããéè€ããŠããããä¿®æ£ããã
ãŸããåºã®åé¡ãã¯ãå ã®åé¡ããšããã
è£è¶³ïŒãäžåºŠã« 1 ã€ã®ããã«ããã¯ãã®æå³ïŒ: ããã¯æé ã®æç€ºã§ãããšåæã«ã
æ§èœåé¡ã®æ§è³ªãã®ãã®ãè¿°ã¹ãŠããã
ã·ã¹ãã ã®åŠçéåºŠã¯æãé ãç®æã§æ±ºãŸãããã
ãããçŽããŸã§ä»ããããéãããŠãå šäœã¯å€ãããªãã
ãããŠçŽããç¬éãæ¬¡ã«é ãç®æãæ°ããäžéãšããŠçŸããããæ¹ååã CPU:30% DB:95% â ãããäžé NW:20% ãDBæ¹ååŸãCPU:85% â æ°ããäžé DB:40% NW:25%ãããã£ãŠã
- åæã«è€æ°ãçŽããªãïŒã©ããå¹ãããåãããªããªãïŒ
- 1 ã€çŽããã³ã«æž¬ãçŽã
ïŒJmeterã«ããWebã¢ããªã®è² è·ãã¹ãïŒ- æ¹åç®æšã«éãããããã§æ¢ããïŒééãç¡ãïŒ
ãšããé²ãæ¹ã«ãªãã
ãªã³ãã¬ãã¹ïŒåäœã·ã¹ãã ã§ã®åãè°è«ã¯
æ§èœåé¡ã®ãã€ã³ãã
å æé¢ä¿ã®åæäŸãåç §ã
https://docs.microsoft.com/ja-jp/azure/architecture/performance/distributed-transaction
https://docs.microsoft.com/ja-jp/azure/architecture/performance/backend-services
https://docs.microsoft.com/ja-jp/azure/architecture/performance/event-streaming
- ããžãŒç¶æ ã®ããŒã¿ããŒã¹
- ããžãŒç¶æ ã®ããã³ã ãšã³ã
- é »åºŠã®é«ã I/O
- äœåãªãã§ãã
- äžé©åãªã€ã³ã¹ã¿ã³ã¹å
- ã¢ããªã·ãã¯æ°žç¶å
- ãã£ãã·ã¥ãªã
- åæ I/O
è£è¶³ïŒåã¢ã³ããã¿ãŒã³ã®äžèº«ïŒ: åç§°ã ãã§ã¯åããã«ããããè£è¶³ããã
ããããã¯ã©ãŠãåºæã§ã¯ãªããåŸæ¥ããæ§èœåé¡ã®å®çªã§ããã
ã¢ã³ããã¿ãŒã³ å 容 å¯ŸåŠ ããžãŒç¶æ ã®ããŒã¿ããŒã¹ ããžãã¯ã DBïŒã¹ãã¢ãïŒã«å¯ãéããã¹ã±ãŒã«ãã«ããå±€ã«è² è·ãéäž ã¢ããªå±€ã«æ»ã ããžãŒç¶æ ã®ããã³ã ãšã³ã Web å±€ã§éãåŠçãåæå®è¡ããèŠæ±ãæããªããªã ãã¥ãŒïŒ Worker ã«éãã é »åºŠã®é«ã I/OïŒChatty I/OïŒ çŽ°ããåŒã³åºãã®å€çºãã©ãŠã³ã ããªããã®çޝç©ãæ¯é çã«ãªã ãŸãšããŠååŸãã äœåãªãã§ããïŒExtraneous FetchingïŒ SELECT *ãå šä»¶ååŸåŸã«ã¢ããªã§çµãå¿ èŠãªåã»è¡ã ãåã äžé©åãªã€ã³ã¹ã¿ã³ã¹å HttpClientçãæ¯å new ããïŒãœã±ããæ¯æžã®åå ïŒäœ¿ãåãïŒ IHttpClientFactoryïŒã¢ããªã·ãã¯æ°žç¶å å šããŒã¿ã 1 ã€ã®ã¹ãã¢ã«æŒã蟌ã ç¹æ§ããšã«åãã ãã£ãã·ã¥ãªã åãçµæãæ¯åäœãçŽã ãã£ãã·ã¥ãå ¥ãã åæ I/O I/O åŸ ã¡ã§ã¹ã¬ãããå æããã¹ã¬ãã ããŒã«ãæ¯æž async/awaitãã®ãã¡ Chatty I/O ãš åæ I/O ã¯
.NET ã¢ããªã§ç¹ã«é »åºããã
åè 㯠ADO.NETã»ORM ã®äœ¿ãæ¹
ïŒADO.NET vs ORMïŒã
åŸè ã¯ååãé ãïŒãªã©ãšäœµããŠçè§£ããŠããããã
- Azure Architecture Center
- Azure ã¢ããªã±ãŒã·ã§ã³ ã¢ãŒããã¯ã㣠ã¬ã€ã
https://docs.microsoft.com/ja-jp/azure/architecture/guide/
- Azure ã¢ããªã±ãŒã·ã§ã³ ã¢ãŒããã¯ã㣠ã¬ã€ã
https://docs.microsoft.com/ja-jp/azure/architecture/guide/architecture-styles/
https://docs.microsoft.com/ja-jp/azure/architecture/guide/design-principles/
https://docs.microsoft.com/ja-jp/azure/architecture/guide/technology-choices/
https://docs.microsoft.com/ja-jp/azure/architecture/best-practices/
https://docs.microsoft.com/ja-jp/azure/architecture/performance/
- Scott Leberknight æ°ãå€èšèªããŒã·ã¹ãã³ã¹ã«ã€ããŠèªã
https://www.infoq.com/jp/news/2009/08/leberknight-polyglot-persistence/
- RESTFul APIs ã«ãã㊠HATEOAS ã䜿çšããå©ç¹
https://www.infoq.com/jp/news/2009/04/hateoas-restful-api-advantages/ - Rails ã® API ã« HATEOAS ãæ£ãã°ããŠã¿ã : REST ã®æ¡åŒµãHATEOAS ã®è©³è§£ãšå®è£
äŸ | POSTD
https://postd.cc/sprinkle-some-hateoas-on-your-rails-apis/
è£è¶³ïŒHATEOAS ã¯æ®åããªãã£ãïŒ: HATEOAS 㯠REST ã®
æç床ã¢ãã«ïŒRichardson Maturity ModelïŒã®ã¬ãã« 3ã«ãããã
å¿çã«æ¬¡ã«åãåŸãæäœã®ãªã³ã¯ãå«ããããšã§
ã¯ã©ã€ã¢ã³ãã URL ãçµã¿ç«ãŠãã«æžãããšããèãæ¹ã§ããããã ãå®éã«ã¯ã»ãšãã©æ®åããªãã£ãã
ã¯ã©ã€ã¢ã³ãåŽã«ãªã³ã¯ãè§£éããä»çµã¿ãå¿ èŠãªå²ã«
åŸãããççµåãéå®çã ã£ãããã§ã
çŸåšã® Web API ã¯**ã¬ãã« 2ïŒãªãœãŒã¹ïŒ HTTP ã¡ãœããïŒ**ã«
OpenAPI ã«ãã仿§èšè¿°ãçµã¿åããã圢ãäž»æµã§ãã
ïŒWebAPIãRESTïŒã
Tags: ç§»è¡, ã¢ãŒããã¯ãã£, ã¯ã©ãŠãç³»éçº