服务治理的技术点

服务治理都要治理些什么?读了这篇文章,结合spring cloud的各种技术,感觉有所收获,有些明白了。以下是原文( 转自:https://www.jianshu.com/p/104b27d1e943)

一、服务治理-思路

2014年我们自我感觉技术挺好了,当我们梳理全平台依赖状况的时候出现了这样一个状况:我们的平台存在各种各样的依赖关系,没有人能理清楚这样繁杂的依赖关系,我们面临着一个新的挑战:服务治理。

我们现在的服务数量达到200+,服务实例数量600+,接口数超过3000,链路数400+,日调度数超过25亿,机房5个,各种抖动、服务之间的调度会导致我们每天出现超过10万次的调度失败。这种情况下出现了很多问题:

1、服务资源配置困难。一个业务依赖很多其他服务,运维要花很多的资源来服务配置。

2、授权密钥配置更困难,业务上线依赖着哪个系统就要去运维那边申请,运维分配一个密钥,服务访问者需要配置该密钥进行签名,服务提供方也需要新增该caller的密钥,所以密钥配置是一个非常痛苦的经历。

3、强依赖F5/或者DNS。F5做一些结点切换的时候没办法做到实时修改,比如域名,涉及DNS的过期问题;内部DNS更明显,遇到DNS过期的问题,不能实时处理一些由于链路导致的具体问题,而且很多抖动问题都是瞬间发生,但很快又恢复,根本没有时间让运维去识别故障并做节点移除。

4、级联故障,故障识别成本高。我们的那些链条过于复杂,有些四级、五级的链条,一旦哪个环节的一「点」出了问题,会出现一「片」的症状,这是比较痛苦的。

5、接口沟通成本高。HTTP协议+JSON的协议和签名方式,接口沟通成本高。

我们的解决方式是搭建服务中心,服务中心就是服务治理的总体解决思路,由服务中心解决服务发现、服务调度、服务资源、服务质量、服务监控。

二、服务治理-设计

我们的设计非常简单:

1、厘清三个节点:服务的消费者、生产者、服务中心。服务消费者和生产者之间没有任何生产节点,我们的调用还是通过原生调用,服务中心只负责后面的一些资源管理和服务的配置推送,这期间运维是相对清闲的,因为所有的接入实例都会自动注册到服务中心,无论是消费者,还是生产者都会实时接收到相关的配置变动。另外,服务消费者和服务生产者之间是没有中间节点的,自动接入的服务都是以内网IP的方式进行通信。

2、服务调度框架HTTPSF,包括权重负载均衡、自动降权、自动恢复,调度链染色,后续我们基于HTTPSF实现了RPC框架。

3、内部/外部服务,内部服务是无需资源管理的,服务实例启动时就会自动接入服务中心,同时,我们有很多的外部服务依赖,要访问各种外部渠道平台的接口,一个重点是把外部服务纳入到我们的服务框架,在外部出现问题的时候,我们能够自动做一个降权跟恢复处理,外部服务的服务信息没办法自动注册,由运维做人工录入到服务中心。

三、服务治理-协议

为什么用HTTP协议?在着手进行服务治理时,整个平台实际在线上已经有100+的服务,而且是用HTTP协议JSON的序列化方式,这造成我们没办法对现有的服务做一个彻底的改造,所以我们没办法使用现成的服务框架,例如淘宝的HSF服务框架来做服务化的改造,同时我们是个完全业务驱动的平台,我们也没法投入这样的成本停下业务进行服务化改造,因此我们的框架是完全兼容现有的服务在上面做的HTTPSF,基于HTTP协议做的一个调度框架,我们几乎没有投入任何的接入成本就完成了服务化,后面我们做了一个HTTPSF-RPC框架,JWS框架中也集成了RPC的服务容器,新业务组件为了更高的开发效率会优先使用RPC框架。

四、服务治理-去中心依赖

因为加入了服务中心,平台变成了一套非常复杂的分布式系统,服务中心变得非常重要,同时去中心化也就非常必要了。在服务中心出问题的时候,怎么去处理,这边会有两级容灾:第一级很简单,就是服务中心集群部署,它保证内部不出问题,目前一直保证着5个9的可用性;另外一个层面就是万一服务中心出问题了怎么办?每个服务接入都会有一个Backup文件,所有跟服务中心的交互、配置都会在本地同步一个Backup文件,一旦服务器出问题,没法做接入的时候,会读取最近一次的Backup文件,按照之前的配置结点启动程序,这是去中心依赖的设计。

五、服务治理-负载均衡

这是我们的后台页面,实际上是运维同学用的最多的页面,但其实要做的事情并不多,只要知道我们服务都接入了哪些实例,权重如何,是否开启等等,内部服务接入之后会有一个已接入状态,内网IP就会自动发布,上面account_server是我们九游的帐号服务,就可以通过内网IP来做访问。uop是UC的帐号系统,就是UC的账户开放平台提供了整个UC的帐号体系,uop相对我们平台而言就是一个外部服务。这里运维启用了4条链路,都是在做多级容灾。正常情况下绝大部分访问量都会到我们运维希望最快的链路上面去了,一旦出现了问题,他会自动切换到移动或者电信或者汕头机房的集群。这就实现了多链路容灾处理

六、服务治理-调度依赖管理

我们在服务的依赖管理方面可以拿到很多数据,所有对外依赖的系统和接口,各个负责人都可以看到自己系统的依赖情况,我们还可以看到实时访问量的曲线波动情况,可以对系统做一些依赖管理。

我们每周会发布依赖质量情况:比如这个系统对外依赖的情况,它依赖了这么多对外系统,其实都是我们内部的系统;它的访问量占比代表依赖情况;接着就是性能情况,以及可用性情况,每周可用性是增加还是降低的,都是可以看到的;访问量有没有增大,都可以做分析。负责人可以根据这个情况来判断对外依赖的情况是否需要改善或者做一些系统优化。

七、服务治理-故障拓扑

现在我们有整个的故障拓扑,这张图是我们线上的真实情况,服务量不是很多,因为我们做了一个服务的分级处理,运维只关心核心服务,核心服务涉及到的调度都在这里。运维只关心不同级别的服务的可用性,这是比较关键的,像上图中核心服务实际上是要求可用性能够确保达到4个9,这是最真实的可用性,因为不是通过采样得到的数据,而是所有的调度数据都会进行实时的统计

我们九游服务管理人的角色,你进去之后可以看到所有依赖你的服务跟你对外依赖的服务组成的网状故障拓扑,基于这个拓扑,我们可以做一些报警或者一些质量分析。

八、服务治理-流程审批

在服务治理方面有流程审批,为了使整个运维工作更加便捷。我们所有的上线会变得非常简单,只需要在后台就可以完成,因为用户注册、申请权限、然后上线申请、服务调度授权申请,都是由各个业务负责人去提交流程。这也是在打造我们的运维生态,让运维工作可以更简单,变得规范化、降低成本,毕竟维护200多个独立系统,没有规范的流程,一定会出现疏漏的问题。

我们尽量把所有涉及到的服务管理、服务治理的问题处理好,尽量让运维不需要人工操作,包括看到的各种系统展示,运维没有任何的操作概念在里面,他只要管控、处理好监控、处理好报警阀值,这是他的一些具体工作。同时,服务中心系统让运维人员更关注一些应用上的数据,包括服务的依赖,容量,和质量,运维不再局限于只是做部署,从而把运维上升到一个应用运维层面,做的这些事情都是在帮助运维打造这样一个生态。

打造运维生态

要做好服务治理,尤其是有运维产品的服务治理,要做的事情挺多、也挺专业的。可以看到我们有这么多内容,包括服务发现、服务调度、服务资源、服务质量,包括后面我们一直在打造的运维生态。我可能实现了一个协议,我们做了一个调度,实现了服务的交互,这些就是服务治理吗?不是的,我们要做很多事情来维护所有服务,比如确保服务注册、服务发现、接口发布都是实时感知的。

服务调度,一旦出现波动问题都是做自动降权或者自动恢复,以应对运维来不及处理异常的情况。之前很多级别的问题都是数据突然间抖动或者网络突然间抖动,但抖动的时间不长,可能是几十秒,造成依赖方阻塞,这种情况下通过服务调度做自动降权,确保不会被你依赖,保证自身的稳定;当然服务方的服务容器这块我们有统一请求队列关联和过载保护机制,共同确保我们整个平台的可用性。

服务资源包括服务、实例、接口、接口黑白名单、RPC元数据、RPC容器、调度授权、调度策略、集群管理。

还有服务质量,包括调度监控、调度链监控、依赖监控、故障拓扑、故障时间分布、质量报告、服务分级、集群监控、报警系统。我们各种调度的监控,刚才列出来的只是很少一部分,我们还有各种各样的依赖、调度链,包括故障分布时间,服务分级的一些监控、质量报告、集群监控等等。

我们做了很多工作来确保整个平台的稳定性,所做的工作基于打造运维生态,确保我们的运维能够尽量减少人工操作,尽量可以让系统自动识别、自动处理,运维从全局把控住整个依赖关系的具体情况,保证系统全局处于稳定的情况。

原文地址:https://www.cnblogs.com/flying607/p/8340867.html

时间: 2024-10-23 17:02:15

服务治理的技术点的相关文章

应用量化时代 | 微服务架构的服务治理之路

技术随业务而生,业务载技术而行. 近些年来,伴随数字经济的发展,在众多企业的数字化转型之路上,云原生.DevOps.微服务.服务治理等成为行业内不断被探讨的新话题.人们在理解和接受这些新型概念的同时,也不断地思考其可能的落地形态.需求是创造发生的原动力,于是一批代表性的开源技术或者框架涌现而出:Kubernetes,Spring Cloud,Service Mesh,Serverless-- 它们炙手可热,大放异彩.然而在具体落地过程中却步履维艰,磕磕绊绊. 本文试图结合企业业务的核心诉求,以应

S++的服务治理与服务颗粒度

最近经常与人探讨服务颗粒度的问题,大家总是觉得这个问题难以捉摸,各种各样的方法论.模型让人困惑.那么从S++的方法来看,服务的颗粒度是怎么确定的呢? 让我们先从服务治理开始,从几个典型的例子来看如何梳理服务. 服务治理的目标是建立理想的业务模型,其方法就是通过理解业务.划分业务.定义业务最终完成业务模型的建立.在治理之前,你可以对业务有所了解,也可以完全不懂,但治理之后你一定是个业务专家. S++治理的实施方法论 S++提出服务的抽象过程是业务与技术分离的过程,其推论是抽象后的服务具有时空不变性

架构设计:系统间通信(17)——服务治理与Dubbo 中篇(分析)

(接上文) 2-5.设计模式:代理模式和JAVA对代理模式的支持 2-5-1.典型的代理模式 下面这个类图说明了"代理模式"的典型设计设计结构: 典型的代理模式可用一句话进行概括:外部系统/外部模块要调用某个具体业务的实现A,不能直接进行实调用,而要通过一个代理对象进行间接的调用.典型的dialing模式中有四个角色: Subject:业务接口定义.这个业务接口定义相关实现类的行为.事件等特性. RealSubject:您可以看业务定义的真实实现.设计的原则是:无论何种情况下它并不知道

简述我的SOA服务治理

SOA服务治理 1.解决业务部门服务冲突和纠纷2.版本定义与版本管理3.服务备案与服务管理4.业务监督与服务监控 SOA的战略目的 一.业务价值胜过技术策略 二.战略目标胜过具体项目的效益 三.内置的互操作胜过定制的集成 四.共享服务胜过特定目标的实现 五.灵活性胜过优化 六.不断演进地提炼胜过在最开始追求完美 SOA管理 服务定义(服务的范围.接口和边界)服务部署生命周期(各个生命周期阶段)服务版本治理(包括兼容性)服务变更(启用和退役)服务注册中心(依赖关系)服务监视(进行问题确定)服务所有

1 Spring Cloud Eureka服务治理

注:此随笔为读书笔记.<Spring Cloud微服务实战> 什么是微服务? 微服务是将一个原本独立的系统拆分成若干个小型服务(一般按照功能模块拆分),这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通信协作.每个微服务维护自身的数据存储.业务开发.自动化测试案例以及独立部署机制.维护自身的数据存储称为数据管理的去中心化.由于数据管理的去中心化,各个微服务的数据一致性成为一个难题,因此,需要强调的是各个服务之间进行无"事务"的调用.

架构设计:系统间通信(16)——服务治理与Dubbo 中篇(预热)

1.前序 上篇文章中(<架构设计:系统间通信(15)--服务治理与Dubbo 上篇>),我们以示例的方式讲解了阿里DUBBO服务治理框架基本使用.从这节开始我们将对DUBBO的主要模块的设计原理进行讲解,从而帮助读者理解DUBBO是如何工作的.(由于这个章节的内容比较多,包括了知识准备.DUBBO框架概述.DUBBO各模块分析,所以我将把内容切割成多篇文章) 2.基础知识准备 为了让读者更好理解下文讲解的内容,在开始讲解DUBBO框架主要模块前,我们先要介绍一些基础知识.这些基础知识将帮助读者

第三章 服务治理:Spring Cloud Eureka

Spring Cloud Eureka是Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能.Spring Cloud 通过为Eureka增加了Spring Boot风格的自动化配置,我们只需通过引入依赖和注解配置就能让Spring Boot构建的微服务应用轻松的与Eureka服务治理体系进行整合. 服务治理: 服务治理可以说是微服务架构中最为核心和基础的模块,主要用来实现各个微服务实例的自动化注册

从抖音关闭评论,看服务治理的重要性

每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 4月10日,广电总局责令今日头条永久关停「内涵段子」等低俗视听产品. 该消息传出后,大量内涵段子用户涌入抖音,以统一头像和内涵段子风格的评论迅速占领抖音热门视频评论区. 而就在昨晚 23 点 40 左右,抖音关闭了评论的所有功能.虽然页面显示有几千条评论,但是当点开评论的时候却发现没有评论内容. 之后抖音发布官方声明,表示服务器维护停止直播和评论功能,等待升级完成之后再重新开放.而在

公共平台服务治理与鉴权

问题 解决问题 鉴权 注册 管理 总结 聊一聊最近了解的公司服务治理平台,主要是思想,理念,而不是一种技术或框架.整个平台设计,融入了OAUTH2认证,融入了微服务思想,帮助公司各系统在复杂的IT架构下,实现一种便捷统一的调用方案,同时完成调用的管理(监控.注册.鉴权等). 问题 一种思想或理念的出现,是否有价值,我认为主要在于它实际解决了哪些问题.基于这个价值观,我们先看看,当一个公司有成百上千个系统时,会有哪些问题? pi如: 接口访问有没有鉴权?如何鉴权?这个话题很大,归根揭底就是,要让提