顾名思义,微服务体系结构是将服务器应用程序构建为一组小型服务的方法。这意味着微服务架构主要面向后端,尽管这种方法也用于前端。每个服务在其自己的进程中运行,并使用HTTP/HTTPS、WebSockets或AMQP等协议与其他进程通信。每个微服务在特定的上下文边界内实现特定的端到端域或业务能力,并且每个微服务都必须自主开发和独立部署。最后,每个微服务都应该拥有其相关的域数据模型和域逻辑(主权和分散的数据管理),并且可以基于不同的数据存储技术(SQL、NoSQL)和不同的编程语言。
微服务应该有多大?在开发微服务时,大小不应该是重点。相反,重要的一点应该是创建松散耦合的服务,这样您就可以为每个服务自主地进行开发、部署和扩展。当然,在识别和设计微服务时,只要不与其他微服务有太多直接依赖关系,就应该尽量使它们尽可能小。比微服务的大小更重要的是它必须具有的内部内聚性及其与其他服务的独立性。
为什么是微服务架构?简而言之,它提供了长期的灵活性。微服务允许您基于许多独立部署的服务创建应用程序,每个服务都有粒度和自主的生命周期,从而在复杂、大型和高度可伸缩的系统中实现更好的可维护性。
另一个好处是,微服务可以独立扩展。与必须作为一个单元扩展的单个单片应用程序不同,您可以扩展特定的微服务。这样,您可以只扩展需要更多处理能力或网络带宽来支持需求的功能区域,而不是扩展不需要扩展的应用程序的其他区域。这意味着成本节约,因为你需要更少的硬件。
图6 单片部署与微服务方法
图6 单片部署与微服务方法
如图6所示,在传统的单块方法中,应用程序通过在多个服务器/VM中克隆整个应用程序来扩展。在微服务方法中,功能在较小的服务中分离,因此每个服务可以独立扩展。microservices方法允许对每个microservices进行灵活的更改和快速的迭代,因为您可以更改复杂、大型和可伸缩应用程序的特定小区域。
构建基于细粒度微服务的应用程序可以实现持续集成和持续交付实践。它还加速了新功能在应用程序中的交付。应用程序的细粒度组合还允许您孤立地运行和测试微服务,并在维护它们之间的清晰契约的同时自主地对它们进行改进。只要不更改接口或契约,就可以更改任何微服务的内部实现或添加新功能,而不破坏其他微服务。
以下是使用基于微服务的系统成功投入生产的重要方面:
- 对服务和基础设施进行监测和健康检查。
- 服务的可扩展基础设施(即云和编排器)。
- 多级安全设计与实现:认证、授权、机密管理、安全通信等。
- 快速的应用程序交付,通常由不同的团队专注于不同的微服务。
- DevOps和CI/CD实践与基础设施。
其中,本指南仅涵盖或介绍前三项。与应用程序生命周期相关的最后两点,将在另外的专栏介绍。
额外资源
- 马克·鲁辛诺维奇。微服务:云技术推动的应用革命
- 马丁·福勒。微服务
- 马丁·福勒。微服务先决条件
- 吉米·尼尔森。块云计算
- 德拉托雷。微软平台和工具的集装箱码头应用程序生命周期(可下载电子书)
最佳实践
如果应用程序满足以下条件,则应使用微服务体系结构:
- 业务和市场变化很快,所以产品或者应用的变化也很迅速。
- 需要快速的应用程序交付,通常由不同的团队专注于不同的微服务。
- 需要快速部署应用程序。应用程序的每个部分都需要独立部署。
超级架构师
架构师的宝库,每天一篇,开拓你的视野和深度。分享企业架构,业务架构,应用架构,数据架构,技术架构,安全架构等。讨论架构框架,规划,治理,标准,落地。交流新兴的架构风格和模型。如微服务,事件驱动,微前端,大数据,数仓,物联网,人工智能架构。
超级工程师
前端后端一锅端,数据物联区块链,AI AR 和VR,分析 安全 元宇宙。全栈开发Java,Python,Go,Groovy,Kotlin,C#,Node,TypeScript,JavaScript,Rust, Swift,R,Ruby。
首席数字化转型官
交流数字化转型,创新和整合。帮助CIO,CDO,CDTO成长。关注数字化方法,流程,框架,案例以及趋势。探讨业务架构规划,IT建设和数字化落地。聊产品,研发,营销,销售,供应链,计划,工厂,财务,税务等数字化领域。