2 服务治理
上一篇介绍了微服务架构相关内容,微服务架构虽然拥有诸多的优势,但也面临着诸多的困难和挑战,其中服务治理是一个永恒的难题,也是下一代微服务架构所要解决的问题。
2.1 服务治理是一门技术架构领域
服务治理是一门技术架构领域,它与技术架构本身息息相关,在架构演进的过程中,始终保持着对服务治理的要求,如2-1图架构演进:
图2-1架构演进
单体架构:通俗的讲,单体架构就是一个应用程中包含了一个系统所有的功能,其特点有功能集中、代码和数据中心化、一个发布包、部署后运行在同一进程中;而其缺点也非常严重,如耦合性高、技术债务、扩展能力有限、维护困难、无法快速创新。
垂直架构:典型的是MVC模型架构,也称分层架构,它解决了界面层、控制逻辑层和业务层、前后端分层问题,但其仍是一个应用工程,即全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。
分布式服务架构(RPC):RPC解决了模块之间跨进程通信的问题,该架构主要用于屏蔽底层通信框架和序列化框架的实现。
面向服务架构(SOA):随着垂直应用越来越多,应用与应用之间交互不可避免,将核心业务抽取出来,把业务逻辑抽象成可复用、可组装的独立服务,逐渐形成稳定的服务中心,从而实现业务逻辑的快速复用,使前端应用能更快速的响应多变的市场需求。可以看出SOA架构具有分布式、可重用、扩展灵活、松耦合特点,其优点包括抽取公共的功能作为服务,可提高开发效率;对不同的服务进行集群化部署解决系统压力;基于服务总线ESB模式减少系统耦合。缺点是过度依赖服务总线,服务提供方与调用方有一定的耦合。
微服务架构:在上节中重点介绍了微服务架构模式,此处不在介绍。
2.2 为什么需要服务治理
从架构演进的角度上看,我认为架构主要围绕“分”、“管”、“控”三个方面进行相关设计,也是一直以来我们所面对的问题和挑战。以下对这三个方面进行简述:
分:服务设计与拆分;以微服务架构为例,如何对微服务拆分和设计非常关键,拆分的方面包括:业务拆分、服务拆分、数据拆分、代码拆分;拆分粒度大小如何定夺,拆分的原则如何定义等等。
管:多服务运维管理;随着业务的快速发展,微服务拆分,服务的规模也越来越大,此时带来的运维成本也越来越高,单服务流量激增时扩容,调用链条变长,调用关系更加复杂,故障点增多等。
控:不稳定的网络环境;分布式系统的复杂性,也影响了服务的稳定性,系统运行过程中难免存在网络超时的情况,可能会造成网络请求积压,继而导致整个服务线崩塌。
2.3 什么是服务治理
服务治理,按照Anne Thomas Manes的定义是:企业为了确保事情顺利完成而实施的过程。从服务治理的广义层面,服务治理包括四个方面:业务、组织、系统、技术,即业务决定组织,组织的价值是为业务赋能;组织决定了系统的目标,系统是对业务和组织效能的重要体现;技术是实现业务系统的手段,决定了系统的成败。如图2-2服务治理的四象限。
图2-2 服务治理四象限
2.4 如何进行服务治理
(1)服务调用:管理由谁来调用服务、怎样调用服务。
(2)流量管理:根据流量的特征,控制服务分发;
(3)服务生命周期管控:确保升级服务不会影响目前的服务;
(4)服务规范:所有服务都要遵从一定的规则,确保服务的一致性;
(5)服务监控:监控服务的性能和可用性,当问题出现的时能马上采取应对措施;
2.5 服务治理达到什么样的目的
(1)实现服务高度自治和可运营;
(2)执行和控制分离,;
(3)虚拟化、标准化、产品化,定义规范。
2.6 服务治理的实现
目前主流的服务治理框架有Spring Cloud框架、Dubbo框架及Service Mesh框架,本系列文章以Spring Cloud框架为基础,从服务网关的角度研究与实现服务治理。
服务网关除了提供服务认证鉴权及安全过滤核心功能外,并能通过服务网关整合服务治理、服务编排,结合服务熔断机制优化系统。服务治理主要解决服务之间的依赖性,降低耦合性,隔离内部和外部服务,统一对外提供接口,禁止直接访问内部数据,增加系统安全性。服务治理的功能主要包括路由管理、路由转换、访问控制、黑白名单、API管理、流量限额、服务埋点、服务熔断等功能,通过服务治理为整个业务系统的统一入口提供可靠保护。