顾名思义,微服务体系结构是将服务器应用程序构建为一组小型服务的方法。 这意味着微服务体系结构主要面向后端,尽管该方法也用于前端。 每个服务在其自己的进程中运行,并使用 HTTP/HTTPS、WebSocket 或 AMQP 等协议与其他进程通信。 每个微服务在特定的上下文边界内实现特定的端到端域或业务功能,并且每个微服务必须自主开发并独立部署。 最后,每个微服务都应拥有其相关的域数据模型和域逻辑(主权和分散式数据管理),并且可以基于不同的数据存储技术(SQL、NoSQL)和不同的编程语言。
微服务应该是什么大小? 开发微服务时,大小不应是重要事项。 相反,重要的是创建松散耦合的服务,以便你可以为每个服务实现开发、部署和缩放的自主性。 当然,在识别和设计微服务时,应尽量缩小它们,前提是与其他微服务没有太多直接依赖项。 比微服务的大小更重要的是,它必须具有的内部凝聚力,并且独立于其他服务。
为什么是微服务体系结构? 简言之,它提供了长期的敏捷性。 微服务允许基于许多独立可部署的服务(每个服务具有精细和自主生命周期)创建应用程序,从而在复杂、大型和高度可缩放的系统中实现更好的可维护性。
作为其他优势,微服务可以独立横向扩展。 可以横向扩展特定的微服务,而无需将单个整体应用程序作为一个单位扩展。 这样,只需缩放需要更多处理能力或网络带宽的功能区域来支持需求,而不是横向扩展不需要缩放的应用程序的其他区域。 这意味着节省成本,因为所需硬件更少。
图 4-6. 整体部署与微服务方法
如图 4-6 所示,传统的整体式方法会通过在多个服务器或虚拟机上克隆整个应用程序来实现扩展。 在微服务方式中,功能被分割到较小的服务中,因此每个服务都可以独立扩展。 微服务方法允许敏捷更改和每个微服务的快速迭代,因为可以更改特定、较小的复杂、大型和可缩放的应用程序区域。
构建基于微服务的细粒度应用程序使持续集成和持续交付实践可行。 它还加快了应用程序中新功能的交付。 应用程序的细粒度组合还允许你以隔离方式运行和测试微服务,并在它们之间保持明确的协定的同时自主地对其进行改进。 只要不更改接口或协定,就可以更改任何微服务的内部实现或添加新功能,而不会中断其他微服务。
以下是使用基于微服务的系统实现生产成功的重要方面:
对服务和基础设施的监控和健康检查。
服务的可缩放基础结构(即云和业务流程协调程序)。
多个级别的安全设计和实现:身份验证、授权、机密管理、安全通信等。
快速应用程序交付,通常使用不同的团队专注于不同的微服务。
DevOps 和 CI/CD 做法和基础结构。
其中,本指南仅涵盖或介绍前三个。 最后两个与应用程序生命周期相关的要点已被涵盖在附加的Microsoft 平台和工具的容器化 Docker 应用程序生命周期电子书中。
其他资源
马克·鲁西诺维奇 微服务:由云提供支持的应用程序革命
https://azure.microsoft.com/blog/microservices-an-application-revolution-powered-by-the-cloud/马丁·福勒 微服务
https://www.martinfowler.com/articles/microservices.html马丁·福勒 微服务先决条件
https://martinfowler.com/bliki/MicroservicePrerequisites.html吉米·尼尔森 Chunk Cloud Computing(区块云计算)
https://www.infoq.com/articles/CCC-Jimmy-Nilsson塞萨尔·德拉托雷 使用 Microsoft 平台和工具的容器化 Docker 应用程序生命周期 (可下载电子书)
https://aka.ms/dockerlifecycleebook