1.3.2 什么是微服务
微服务是由单体架构演变而来的。在业务早期,基本上就是由单体的一个应用支撑着各种业务功能。以电商为例,用户、订单、商品、交易、支付最开始都在一个应用中实现。随着业务规模的扩大,单体架构很难支撑业务功能的平滑扩展,同时某一个功能的迭代或故障会引起整体服务的不可用。为了降低各功能模块的耦合性,提升整体业务架构的高可用性,SOA(Service-Oriented Architecture,面向服务架构)开始盛行。微服务其实是SOA的一种演进,这个概念最早是由Martin Fowler提出的。那么什么是微服务架构呢?
Martin指出:“微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务(多个微服务),服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在独立的进程中,服务与服务之间采用轻量级的通信机制进行沟通。每个服务都围绕着具体业务进行构建,并且能够独立部署到生产环境、类生产环境中。另外,应尽量避免统一的、集中的服务管理机制,对具体的服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。”
在这段话中,重要的关键词是多个微服务、独立的进程、轻量级的通信机制。
Netflix是微服务的先驱,其原本的应用架构是典型的巨石应用,虽然实现了应用层面的多活,但是仍然使用单一且巨大的代码库和数据库,如果数据库宕机,整个系统都将瘫痪。Netflix认为微服务必须具备以下能力。
·关注点分离:单一职责,一个微服务不能既处理用户信息,又处理订单信息。
·水平扩展:微服务可以快速水平扩展,流量实现负载均衡。
·虚拟化和弹性计算:微服务需要能够实现自动化运维,按需创建计算环境。
Netflix根据业务拆出了很多微服务,在AWS上拥有数万个虚拟机。Netflix同时为Spring Cloud社区贡献了大量优秀的开源软件,例如Eureka、Zuul、Turbine、Hystrix等。
引用《微服务:从设计到部署》里的案例,一个好的微服务架构依赖关系可以参考图1-6。
图1-6 微服务架构依赖关系图