在本模块中,您要将 node.js 应用程序拆分成几项互联的服务,并将每项服务的映像推送到 Amazon ECR 存储库。 开始构建
最终的应用程序架构使用 Amazon Elastic Container Service 和应用程序负载均衡器。
a. 客户端
客户端通过端口 80 发出流量请求。
b. 负载均衡器
应用程序负载均衡器 (ALB) 将外部流量路由到相应的服务。ALB 可检测客户端请求,并根据路由规则将请求定向至符合规则的目标组的实例和端口。
c. 目标组
每项服务都有一个目标组,用于跟踪该服务运行的每个容器的实例和端口。
d. 使用容器封装服务
Amazon Elastic Container Service (Amazon ECS) 会将每项服务部署到 EC2 群集中的一个容器。每个容器只能处理一项功能。
隔离崩溃
即使最好的工程组织在生产环境中也会遇到严重的崩溃情况。除了从容按照所有标准最佳实践处理崩溃外,还有一种方法可以降低此类崩溃的影响,那就是构建微服务。好的微服务架构意味着,如果服务中的一个微小部分崩溃,则只有该部分服务会中断。其余部分的服务可以继续正常运行。
通过隔离确保安全
在整体式应用程序中,如果应用程序的某项功能存在安全漏洞 (例如允许远程执行代码的漏洞),则您必须假定攻击者可能也获得了访问系统其他所有功能的权限。这可能会很危险,例如,如果您的头像上传功能存在安全问题,最终的结果会是包含用户密码的数据库遭到入侵。如果使用 Amazon ECS 将功能拆分成微服务,您便可以通过向每项服务授予其自己的 IAM 角色,确保安全访问 AWS 资源。如果遵循了微服务最佳实践,那么当攻击者入侵某项服务时,他们只能获得该服务的资源的访问权限,但不能水平访问其他服务中的其他资源,也无法入侵这些服务。
单独扩展
将功能拆分成微服务后,可以单独增加和缩减每个微服务类使用的基础设施和实例数量。这可让您更加轻松地衡量特定功能的费用,识别最需要优化的功能,同时在特定功能的资源需求超出控制范围时,确保其他功能性能可靠。
开发速度
微服务可以降低开发风险,这可帮助团队加快构建速度。在整体架构中,添加新功能可能会影响整体架构包含的其他所有功能。开发人员必须慎重考虑他们添加的任何代码的影响,并确保它们不会扰乱任何功能。另一方面,对于转入新服务的新功能,适当的微服务架构具有相应的新代码。开发人员可以确信,他们编写的任何代码确实都不会影响现有的代码,除非他们在两项微服务之间明确编写连接。