微服务概念详解(微服务架构20讲学习手记)
微服务概念详解
本文主要是王波老师微服务架构20讲的学习心得
1.微服务与单体架构
假设有一个用户信息管理系统,包含了注册、登录、信息维护、授权四个核心功能,如上图所示,使用单体架构时,所有的功能会被放在一起,而使用微服务架构时,它们可以被拆分成四个独立的服务
2.微服务定义
讲到为服务的定义,不得不提到两个人
2.1Adrian对微服务的定义
Adrian是Netflix前架构总监,经历了Netflix从单体架构到微服务架构的演变,这里给出了他对微服务的定义,比较重要的有三个地方
-
Loosely Coupled(松散耦合,不能强依赖,如果有个团队对其他团队的依赖很强,那么就不能称之为微服务)
-
Service Oriented architecture(服务面向的架构,他认为微服务本质上还是SOA,只不过是细化的SOA,更落地)
-
Bounded Context(有界上下文,术语是局部状态,这一点比较重要。就是说服务之间有边界,每个团队维护自己的数据源,无集中式的数据管理,所以每个团队可独立维护,可独立演化)
2.2Martin Flower提出的关于微服务特点
第二个人是Martin Flower,他在2014年的一篇文章中讲到微服务应当具有的6个特点
- 一组小的服务
单块架构把所有的应用打包到一个单块的应用之中,微服务主张拆出来,成一个个微服务,小没定义,可以让人员容易理解即可。在划分微服务时,我们需要避免一味追求小而将微服务划分得过细,因为这样会提高系统维护成本 - 运行在独立的进程中
例如JAVA开发的单体架构系统,所有业务功能包含在一个WAR包里,部署在相同的容器中,业务功能之间共享进程。而微服务之间是独立的,他们可以部署在一个容器里,也可以分开部署,最重要的是它们之间不会共享进程。这样做有利于灵活的分配资源,各个服务之间也不会互相干扰。 - 使用轻量级通信协议
单体架构下,不同系统间的交互常常会使用重量级的协议,例如SOAP。微服务由于拆分得更细,服务间调用更加频繁,因此更倾向使用轻量级的协议,例如Http、RPC。 - 基于业务能力构建
划分微服务的原则不是看它有多小,而是看单一的业务能力是否被划分到一个服务中,例如前面的用户信息管理系统,我们是按业务能力划分了四个微服务,而不是按功能划分出前端服务、接入服务、逻辑服务、数据库服务 - 独立部署
独立部署的特性,使得微服务架构系统能够以更快的速度迭代,而这也是互联网软件非常重要的一个特性。