微服务概述

什么是微服务

微服务(microservices)源于martinfowler博文中的一个名词,博客地址: https://martinfowler.com/microservices/

到目前为止,微服务并没有一个统一的标准的定义。从martinfowler博文中的解释来看, 微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,每个服务有自己的数据模型和数据库,服务之间通过基于 REST或者gRPC 进行通信协作;
被拆分后的每一个小型服务都围绕着系统中的某一项业务功能进行构建, 并且每个服务都是一个独立的项目,可以进行独立的测试、开发和部署等;
由于各个独立的服务之间使用的是基于 HTTP 的 JSON 作为数据通信协作的基础,所以这些微服务可以使用不同的语言来开发。

一个微服务就像是一个黑匣子,你向他发送请求,他会输出一些结果,这些微服务之间协同工作,就可以完成以前在一个大型应用里能做的事情,所以多个微服务构成了一个大型应用。

一定要注意不要为了微服务而微服务,换句话说就是不是所有的场景都适用于微服务,通过下面的优缺点的对比,来思考你当前的业务场景是否适用于微服务。

微服务的优点和缺点

优点:

  1. 每个微服务可以进行独立地开发,开发者更容易理解一个微服务中的代码,由于一个微服务中的代码较小,在编译,打包时会更快。
  2. 每个服务是独立部署的,可以更准确地监控每个服务的资源消耗情况,很容易发现各个服务间的性能瓶颈所在,从而进行优化。
  3. 一个微服务出现了问题之后(比如内存溢出),其他微服务仍然可以正常的请求,具有更高的容错性。
  4. 各个微服务可以使用不同的编程语言进行开发,具备技术多样性。
  5. 某个微服务需要更换为其他技术的时候不会影响到其他微服务,更易落地新的技术

缺点

  1. 微服务增加了系统维护、部署的难度。
  2. 增加了集成测试的复杂度,想要测试的话,需要把多个相关的微服务跑起来才行。
  3. 数据的一致性问题,服务之间的通信成本等都凸显了出来。
  4. 各个微服务团队之间的沟通成本

所以在选择系统架构时要提醒自己,不要为了微服务而微服务。

微服务和SOA对比

微服务可以看做是SOA的提炼,两者有些类似,都是通过服务的方式将一个系统构建起来,不过两者还是有差异的。SOA善于集成大型,复杂的单体应用。微服务注重分而治之,是由更小的服务构成。

SOA 微服务
服务间的通信 ESB企业服务总线采用的较重的协议,如SOAP 使用REST或gRPC等轻量级协议
数据管理 共享数据库 每个微服务有自己的数据库
规模 较大的单体应用 较小的服务

微服务大小并不重要

微服务这个名字给人的感觉是微小的服务,容易使人误解为服务越小越好,实则不然,一个团队负责一个或多个微服务,但是这个微服务不一定是微小的。我们在设计微服务的时候要考虑如下几点:

  • 较短的服务交付周期
  • 是否能够由小团队开发
  • 减少各个微服务团队之间的协作