在当今世界,应用现代化通常意味着迁移到以微服务形式构建的云原生应用。然后使用 Docker 和 Kubernetes 等容器技术进行部署。随着 Netflix 和 Atlassian 完成此部署,其他组织也纷纷仿效。原因在于,微服务架构可以提高可扩展性、加快开发速度和服务迭代。
微服务架构将应用拆分为一系列可独立部署的服务,并通过 API 进行通信。 这样,每个服务都可单独部署和扩展。这种方法允许快速、频繁地交付庞大且复杂的应用。与单体式应用不同,微服务架构允许团队更快地实施新功能并进行更改,并且大部分现有代码均无需重写。
微服务架构的部分关键特征如下:
多个组件服务
微服务由单独的、松散耦合的组件服务构成,这些服务均可单独开发、部署、运营、更改和重新部署,而不影响其他服务的功能或应用的完整性。如此一来,便可快速、轻松地部署应用的各项功能。
高度可维护性和可测试性
借助微服务,团队可试验新的功能,并在出现状况时回滚。这样,代码更新变得更加轻松,新功能的面市时间也得以加快。此外,隔离和修复单个服务中错误和漏洞的过程也得以简化。
由小型团队负责
小型独立团队通常会在微服务内构建服务,鼓励敏捷实践和 DevOps。团队可以独立工作和快速行动,从而缩短开发周期。
根据业务能力进行组织
微服务方法根据业务能力来组织服务。各个团队均为跨职能团队,且具备开发所需的全部技能,从而努力实现某一职能。
自动化基础架构
构建和维护微服务的团队通常使用基础架构自动化实践,例如持续集成 (CI)、持续交付 (CD) 和持续部署(也简称为 CD)。这样,团队便可独立构建和部署每项服务,而不影响其他团队。它还允许团队将新版本的服务与先前的版本并行部署。
微服务架构示例
举例来说,有一个电子商务软件项目。下图所示的电子商务站点包含与多个微服务交互的 Web 应用和移动应用,且每项微服务都为一个领域提供特定的功能。
现代 Web 应用在浏览器中运行,且通常由内容分发网络 (CDN) 提供。CDN 的优势在于可将 Web 应用分发到世界各地的服务器,让 Web 浏览器提供快速下载。CDN 还用于提供图像、音频和视频等媒体资产。例如,在此系统中,在售商品的图像和视频由 CDN 提供。
上图中的微服务包括:
帐户服务
帐户服务提供与顾客帐户相关的信息,例如地址和付款信息。
库存服务
提供最新库存信息,方便顾客购买商品。
购物车服务
顾客使用该服务从库存中挑选他们想购买的商品。
付款服务
顾客为购物车中的商品付款。
配送服务
此服务负责安排所购商品的包装与发货。
应用通过各个微服务发布的 REST API 与微服务进行交互。API 网关允许应用依赖微服务所提供的 API,也允许将这些微服务交换为使用相同 API 的其他微服务。
每项微服务均由服务和数据库构成。这些服务负责处理 REST API、实现业务逻辑,并将数据存储在数据库中。对于微服务,我们按照 12 Factor App 协定将它们的资源(如数据库和队列)彼此分离。