在本單元中,您會將 node.js 應用程式分解成數個互連服務,並將每個服務的映像推送至 Amazon Elastic Container Registry (Amazon ECR) 儲存庫。 開始建置
最終應用程式架構使用 Amazon Elastic Container Service (Amazon ECS) 和 Application Load Balancer (ALB)。

a.用戶端
用戶端透過連接埠 80 發出流量請求。
b.Load Balancer
ALB 會將外部流量路由至正確的服務。ALB 會偵測用戶端請求,並使用路由規則將請求引導至符合規則之目標群組的執行個體和連接埠。
c.目標群組
每個服務皆有目標群組,其會持續追蹤執行該服務之每個容器的執行個體和連接埠。
d.微型服務
Amazon ECS 會將每個服務部署至 EC2 叢集中的容器。每個容器只處理一個功能。
損毀狀況隔離
即使是最優異的工程組織,也必然會在生產過程中遇到嚴重的損毀狀況。除了妥善遵循所有標準最佳實務來處理損毀狀況之外,還有一種方式可以降低當機所造成的影響,即建置微型服務。良好的微型服務架構意味著,當服務的一小部分發生當機,則只有這部分服務無法正常運作。其他服務仍可繼續正常運作。
安全隔離
在巨型應用程式中,如果應用程式的其中一項功能存在安全漏洞,例如允許遠端程式碼執行的漏洞,那麼您就必須假設攻擊者也能同時存取系統中的其他所有功能。這種情況十分危險,例如,如果您的虛擬人物上傳功能存在安全性問題,最後則可能導致保存使用者密碼的資料庫遭到入侵,其後果將不堪設想。透過 Amazon ECS 將各項功能分成不同的微型服務,您可為每個服務設定自己的 AWS Identity and Access Management (IAM) 角色,從而確保安全存取 AWS 資源。若遵循微型服務最佳實務,當攻擊者入侵應用程式的其中一項服務時,則只能存取該項服務的資源,無法橫向存取其他服務中的其他資源,從而保證其他資源不被入侵。
獨立擴展
在將各項功能分解成不同的微型服務後,可獨立擴展和縮減每個微型服務類別使用的基礎設施數目和執行個體數量。如此一來,便能輕鬆估算特定功能的成本,並找出可能需要優先進行優化的功能。如果某個特定功能的資源需求發生問題,其他功能也不會受到影響,仍可確保可靠效能。
開發速度
微型服務可降低開發風險,從而加快團隊建置應用程式的速度。使用巨型應用程式時,新增功能可能會影響該巨型應用程式內的其他所有功能。開發人員必須仔細思考新增任何程式碼所帶來的影響,並確保這些程式碼不會造成任何損壞。相較之下,合適的微型服務架構可為新服務中加入的新功能提供全新的程式碼。開發人員可以確保自己所編寫的任何程式碼完全不會對現有的程式碼造成影響,除非明確編寫了兩個微型服務之間的連結。