监控在稳定性建设起到很重要的作用,在Google SRE中有一个描述系统可靠性基础和高层次需求,金字塔那张图的底层就是监控,这个是一个系统对问题稳定性最基础的要求,缺少监控的系统,如同蒙上眼睛狂奔的野马,无从谈及可控性,更遑论稳定性,其中可见可观测性包括服务可见性、变更可见性、系统可观测性,如何利用可见可观测性来全方位的观测我们的系统呢,下面让我们一起学习。
服务可见性
服务可见性顾名思义是将我们暴露的服务通过某种形式就展现出来可视化,例如 服务本身元数据,服务所有权、服务SLA、服务所有权,服务注册与发现等等,总之通过可视化的形式对服务提供全方位的可见性,一方面将服务信息透明化、另外一方面是便于服务治理,防止其腐化。
演化史
回顾以往服务演化史,在SOA(面向服务架构)时期,SOA的代表是Web Service 其中 Web Service的三要素分别是SOAP(简单对象访问协议)、WSDL(服务描述语言)、UDDI( 统一描述、发现和整合规范),其他规范统称为 WS-* 体系结构,用于定义 Web 服务发现、事件、附件、安全性、可靠的消息传送、事务和管理方面的功能。再到现如今的注册中心,如(zookeeper、etcd、eureka、Nacos)将业务或功能被模块化并作为服务呈现给业务方或者客户端,实现其松耦合的特性;通过上述能够看到在不论在那个时期,目标都是不变的,通过各种形式将服务暴露给外部业务方,变的是暴露的形式及暴露的内容,也就是服务描述信息。服务描述信息有很多这块也没有标准答案,适合就是最好的。
服务描述信息
一般情况下,服务描述信息可参考如下:
- 服务描述:简要描述服务提供的基本能力,服务的适用场景等,供潜在服务使用者参考,必要时可以加上服务的详细描述信息wiki,以及服务对应的邮件组和沟通群。
- 服务所有权:服务当前所属部门、服务当前的owner等。
- 服务对外接口:服务接口定义,使用说明和注意事项等。
- 服务SLA:服务对外的SL A承诺。
- 服务的上下游拓扑:服务商城中维护了每个服务的上下游依赖,基于上下游依赖,不仅可以查询上下游服务的使用方式和使用情况,同时也可以进行服务重大变更时的上下游服务通知。
- 服务变更:服务商城中维护服务每个重要变更的变更日志,重要变更时会通过相应机制知会上下游依赖,上 下游会评估是否需要适配升级等,这样服务使用者可以从变更历史中了解到服务的整个发展脉络。
- 服务接入和资源配额管理:服务如何接入,资源配额如何申请等。
- 服务线上部署和线下测试环境信息:描述了服务线上和线下的部署信息。
- 服务通信协议:RPC、HTTP通信协议
- 状态码含义:服务内部定义的公共状态码含义
好处
服务可见性的好处可以从两个维度来讲,分别是效率&稳定性、服务治理,如下:
- 效率&稳定性:通过将服务描述信息平台化,透明化,能够清楚了解服务描述信息,提升业务方调用的效率,能够快速的对服务进行了解;另外能够清楚知道的服务的上下游依赖,业务方或调用方,这样在服务变更前能够及时通知到各个依赖方,并评估变更的影响。
- 服务治理:服务治理通过对当前服务描述信息进行梳理、观测各项指标是否正常,包括服务职责,上下游依赖依赖是否合理,服务信息维护状态等等,防止慢慢的随着时间,逐渐的腐化。
小结
罗马并非一天建成,服务可见性也是如此,我们需要有这方面的意识,逐步建设、更新和维护的,生命周期是和项目是同步的,也是需要我们持续更新和维护,稳定性建设重要的一环就是服务治理,能够清楚的各个服务描述信息,可视化平台建设只是提升我们效率,前期可人工建设,总结人工建设的路径、关键点、及问题点,最终将人工建设的路径演化为工具化、再逐步演化成平台化。