浅谈服务的治理

版权声明:本文为EnweiTech原创文章,未经博主允许不得转载。 https://blog.csdn.net/English0523/article/details/83269497

关键词:“服务化”、“服务治理”、“服务治理框架”。

        在分布式系统的构建之中,服务治理是类似血液一样的存在,一个好的服务治理平台可以大大降低协作开发的成本和整体的版本迭代效率。在服务治理之前,简单粗暴的RPC调用使用的点对点方式,完全通过人为进行配置操作决定,运维成本高(每次布置1套新的环境需要改一堆配置文件的IP),还容易出错,且整个系统运行期间的服务稳定性也无法很好的感知。

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

这里写图片描述

  • 单一应用架构 
    • 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
    • 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
  • 垂直应用架构 
    • 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
    • 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
  • 分布式服务架构 
    • 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
    • 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
  • 流动计算架构 
    • 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
    • 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。实际上这样是一种云架构,实现了服务的动态扩展,在高并发情况下,服务端可以快速部署机器,而对于应用端没有任何其他影响

常见的服务治理:

服务降级、服务流控、服务动态扩展、超时控制、优先级调度、负载均衡策略调整、分组调整等

服务治理是什么

       服务治理(SOA governance),按照Anne Thomas Manes的定义是:企业为了确保事情顺利完成而实施的过程,包括最佳实践、架构原则、治理规程、规律以及其他决定性的因素。服务治理指的是用来管理SOA的采用和实现的过程。

分布式服务治理框架和平台

Dubbo、HSF、JSF、Tars、Motan和RestCloud

服务治理针对的问题

服务治理中一些典型的问题是:

    1.交付价值到利益相关者,这是投入与回报的问题

    2.对标准和规则的遵从(这是和审计相关的)

    3.变更管理:变更一个服务通常会引起不可预见的后果,因为服务的消费者对服务的提供者来说是不可知的。

    4.服务质量的保证:弹性添加新服务需要对这些服务给予额外的关注。

服务治理包括的行为

服务治理的一些关键活动包括:

    1.对开发新服务和升级现有服务的计划

    2.管理服务的生命周期:确保升级服务不会影响目前的服务消费者制定方针来限制服务行为:

    3.制定所有服务都要遵从的规则,确保服务的一致性

    4.监控服务的性能:由于服务组合,服务停机和性能低下的后果是严重的。通过监控服务的性能和可用性,当问题出现的时候能马上采取应对措施。

    5.管理由谁来调用服务、怎样调用服务

其实服务治理这个东西都创业公司到成熟的大公司都在用,只是做到的程度不同。

  先说说服务治理的边界。本质上任何能提升服务可用性,性能,让服务更稳定等等,只要是能让服务运行的更好,都属于服务治理的范畴。服务治理比较常见的话题:服务发现,服务变更管理,服务监控,服务扩容缩容,服务自我保护,服务降级,服务授权防攻击,服务上线验证和灰度发布,服务问题定位和跟踪,服务负载,服务实例的调度等等。

        说服务治理就要先聊聊服务。从业务角度而言,服务是一个可重复的任务。我是个做业务的,业务可以被粗粒度的划分为一系列粗粒度的服务和流程。这本质上符合SOA架构的风格,而现在比较流行的微服务出现实际上应当归功于SOA原则的成功。而微服务将服务划分的更细,更多,会导致出问题的概率变大。这时候,服务治理的手段没有进步的话,实际上服务的压力是变大了。所以大家在选择架构的时候,需要按照自己的业务发展现状和趋势合理的辩证的做决断。就好像我在上篇文章里举的例子:如果要建一间房子,可能随便建个土房子或者茅草房子就能用几十年,但是随着规模的扩大,建成四合院就要讲究格局,建成一个小区,建成一座城市,就需要运用各种工程学的知识更加统筹的规划。

服务治理的历史变迁:

第一代:以IBM为首的SOA解决方案提供商退出的针对企业IT系统的服务治理框架,主要聚焦在对企业IT系统中异构服务的质量管理、服务发布审批流程和服务建模、开发测试以及运行生命全周期的管理。(服务治理源于SOA的成功)

第二代:以阿里为首的基于同一分布式框架的全新服务治理理念诞生,聚焦于对内部同构服务的线上治理,保障线上服务的运行质量

微服务架构+云端服务治理2013年至今,随着云计算和微服务架构的发展,以AWS为首的基于微服务架构+云服务化的云端服务治理体系诞生

传统的SOA主要包括:

1)服务建模:验证功能需求和业务需求,发现和评估当前服务,服务建模和性能需求,开发治理规划

2)服务组装:创建服务更新计划,创建和修改服务以满足业务需求,按照一定策略评估服务,批准组装完成

3)服务部署:确保服务的质量,措施包括性能测试,功能测试和满足度测试,批准服务部署

4)服务治理:早整个生命周期内管理和监控服务,跟踪服务注册表中的服务,根据服务治理等级协议(SLA)上报服务的性能KPI数据进行服务质量管理

缺点:

1)分布式服务框架的发展,内部服务框架需要统一,服务治理也需要适应新的架构,能够由表及里对服务进行细粒度的控制

2)微服务架构的发展和业务规模的扩大,导致服务规模量变引起质变,服务治理的特点和难度也随之发生变化

3)缺少服务运行时动态治理的能力,面对突发的流量高峰和业务冲击,传统的服务治理在响应速度,恢复故障等方面存在不足,无法敏捷的应对业务需求

分布式服务框架的服务治理:

是面对互联网业务的服务治理,聚焦在对内部采用统一服务框架进行服务化的业务运行太、细粒度的敏捷治理体系

治理对象:基于分布式服务框架开发的业务服务,与协议本身无关,治理的可以是SOA服务,也可以是基于内部服务框架私有协议开发的各种服务

治理策略:针对互联网业务的特点,eg 突发的流量高峰、网络延时、机房故障等,重点针对大规模跨机房的海量服务进行运行态治理,保障线上服务的高SLA,满足用户的体验,常用的策略包括限流降级、服务嵌入迁出、服务动态路由和灰度发布等

AWS云端微服务治理:AWS作为全球最大的云计算解决方案提供商,在微服务云化开发和治理方面提供了非常多的经验,eg:

1)全公司统一服务开发环境,统一简化服务框架(Coral Service),统一运行平台,快速高效开发

2)服务后端应用服务化,系统由多想服务化组件构成

3)服务共享、原子化、重用

4)服务由小研发团队负责服务开发测试部署和治理,运维整个生命周期支撑

5)高度自动化和Dev&Ops支持,一键部署和回退

6)超大规模支持:后台几十万个服务,成千上万个开发者同时使用,平均每秒有1~2个服务治理

7)尝试基于Docker的容器部署微服务

8)服务治理的核心是:服务性能KPI统计、告警、服务健康管理、灵活的弹性伸缩策略、故障自动迁移、服务限流和服务降级等多种治理手段,保障服务高质量运行

应用服务化之后面临的挑战:

1)跨团队协作问题:服务变多之后一般会分小组开发,涉及跨团队联调,如何快速找到开发者 ? 当前系统提供了那些服务,服务接口定义和参数是什么?服务使用示例,注意事项和约束是什么?开发完成之后调试,消费者A和服务提供者S进行联调会存在2个问题:a. 提供者S分布式部署,存在多个服务实例,路由动态分发,没办法确定会路由到哪一台服务器  b.若打断点,其它的消费者可能也正在使用,调试会被干扰,需要通知所有的开发者不要调用服务S,有点儿不太现实

2)服务的上下线管控:由于服务的发布很简单,上线会越来越随意,导致有时候架构师都不知道上线了什么服务,甚至出现重复服务,而服务下线比上线还要困难,因为业务调整,需要 结束某些服务的生命周期,服务提供者有时会直接将服务下线,导致依赖该服务的应用不能正常工作,应该是先将该服务标识为过时,然后通知调用方尽快修改调用,通过性能KPI接口和调用链分析,确认没有消费者再停用服务

服务安全:针对内部应用,服务框架常采用长连接管理客户端连接,针对非信任的第三方应用,或者而已消费者,需要具备黑白名单访问机制,防止客户端非法链路过多,占用大量的句柄,线程和缓存资源,影响服务提供者的质量

服务高SLA保障:业务高峰期,系统资源会成为瓶颈,需要对非核心服务 eg 用户评论、粉丝管理、积分管理等服务做限制,保障核心服务的正常运行,服务框架需要考虑如何关停非核心服务又不影响其它的合设服务

快速定位故障:服务化之后一个业务流程底层可能涉及成千上百的服务调用,任何一个服务发生故障都可能导致业务不可用,由于分布式部署,部署在成千上百台机器上,若仍使用原来的故障定位手段效率会非常低,服务化带来的价值也会大打折扣

服务治理非目标:

1)防止业务架构腐化:通过服务注册中心对服务强弱依赖进行分析,结合运行时服务调用链条分析,梳理不合理的依赖和调用路径,优化服务架构,防止代码腐化

2)快速故障定界:通过Flume等分布式日志采集框架,实时收集调用链日志,服务性能KPI数据,服务接口日志,运行日志等,实时汇总和在线分析,集中存储和展示,实现故障的自动发现,自动分析和在线条件检索,方便运维和开发人员进行快速问题定位

3)服务微管控:较细粒度的进行运行期服务治理,包括限流降级,服务迁入迁出、服务超时控制、智能路由,  统一配置、优先级调度和流量迁移等,提供方法级治理和动态生效功能,通过一系列的细粒度的治理策略,在故障发生时可以多管齐下,在线调整,快速回复业务

4)服务生命周期管理:包括服务的上线审批、下线通知,服务的在线升级以及上下线的服务文档库的建设。
 

成熟的解决方案

  查阅的一些资料,目前的业界一些比较成熟的解决方案如下:

名称 所属公司 是否开源 资料文档 备注
Dubbo 阿里巴巴  
HSF 阿里巴巴 目前已作为阿里云产品EDAS其中的套件开放使用
Tars 腾讯 已作为腾讯云应用框架对外提供使用
JSF 京东  
Linkerd CNCF 原型是Twitter所构建的一个基于scala的可扩展RPC系统Finagle
Motan 新浪微博  
istio 谷歌、IBM、Lyft  

引入服务治理是为了对整体的RPC调用进行集中化管理。对我们来说其核心价值在于,减少重复劳动、避免手动配置物理文件产生的问题、降低开发人员的技术运用成本。下面针对其中的功能点进行分别讲解。

服务的自动注册:

  这是一个服务治理框架的基础功能。大家运用WCF的时候应该感受更加明显,我们要配置一个WCF服务端的时候需要在config文件中做很多配置,甚至大部分公司其实配置都是一模一样的到处复制黏贴,整个这个过程其实是价值较低的重复性劳动。

  解决这个问题需要通过动态的感知到服务端的地址信息,然后针对该地址信息进行自动化配置或者模板化配置,让其快速可用。那么这些额外的信息保存在哪,就需要引入一个注册中心的概念来进行集中化管理。

客户端的自动发现:

  当我们在config文件中指定具体的IP和端口来定义远程服务的地址,或者直接在程序里硬编码远程服务地址时,本身就是一个端到端的访问方式。无法灵活的在程序运行过程中去增加或减少后端的服务节点。

  解决这个问题需要和服务注册的实现方式配套。还可以针对于不同类型的应用制定一些负载均衡的策略进行切换。

变更下发:

  客户端的自动发现就依赖于此下发的数据,需要及时把提供服务的节点信息变化下发到各个客户端。它面向的场景如:当我们进行一个发布的时候,先将需要发布的节点从负载均衡列表中移除,然后再进行更新,最后再添加到负载均衡列表中。这个时候避免了访问到正在发布中的程序。

  当然这点也可以基于状态检测模块去做,这样可以对服务节点的健康状态感知能力得到更好的加强。

            微服务设计——架构——平台——框架——部署与实现——运维和运营——优化

                                                     从技术集成项业务服务的转变

【参考案例】

1、服务治理深入浅出- 服务治理出现的必要性探索(京东为例) - https://segmentfault.com/a/1190000010224335

2、服务治理框架 - (美团点评) HackerVirus - https://www.cnblogs.com/Leo_wl/p/7513531.html

3、分布式系统中的服务治理(各大公司)  https://www.cnblogs.com/Zachary-Fan/p/service_manage_discovery.html

4、分布式服务治理框架Dubbo-学海无涯 心境无限- http://blog.51cto.com/zhangfengzhe/1931170

5、服务治理与Dubbo架构 -  https://blog.csdn.net/qq418517226/article/details/51784825

6、微服务架构打造别具一格的服务治理体验(宜信技术)https://blog.csdn.net/linlzk/article/details/65444487

7、浅谈服务治理与微服务 - Heaven Wang 的专栏  https://blog.csdn.net/suifeng3051/article/details/53992560(推荐阅读)

8、RestCloud国产微服务治理及开发平台 - RestCloud微服务治理及快速开发平台 https://blog.csdn.net/kezi/article/details/78319072

猜你喜欢

转载自blog.csdn.net/English0523/article/details/83269497