场景再现

你正在午休,正梦见中了彩票,突然收到电话告警,说服务对外接口 95 分位延迟突增,惊出一身冷汗,睡意全无,抓紧打开监控系统,查看服务的 SLI 指标,发现确实有问题,已经持续 1 分钟,这服务我刚接手没多久,怎么办?怎么办??对了,告警详情里有 SOP 预案手册,赶紧打开看看。

SOP 预案手册里写着:

  • 1.研发运维群里确认是否有人刚有上线,如果有该服务的变更,及时回滚
  • 2.该服务没有多活架构,无法切流,需要找到详细原因再针对性处理
  • 3.登录 s 链接,可以查看该服务的 SLI(Service Level Indicator,反应服务健康状况的最重要的几个黄金指标)
  • 4.登录 x 系统,找到 a 索引,可以查看本服务的日志
  • 5.打开 y 链接,可以打开仪表盘,展示该服务所在机器的各项性能指标

于是,你急吼吼的在群里询问大家是否有变更,同时,抓紧查看服务的 SLI 指标和日志,日志里有个很关键的线索:

请求某个依赖的下游服务(假设其名字是 a),发现超时了,打印了超时日志,但是无法区分是网络的问题导致的,还是就是 a 服务返回的慢了。此时,你肯定很想知道 a 服务当前是否健康,a 服务的各项 SLI 是否正常,如果 a 服务的 SLI 都正常,可能就是网络链路问题,如果 a 服务的 SLI 也不正常,那很可能就是 a 服务的问题了。

但是,TMD,我不知道去哪里看 a 服务的 SLI 啊…我甚至都不知道 a 服务是否对外暴露了 SLI 指标!!!

这个问题很常见,很多公司都建设了 Zabbix、Prometheus、Nightingale 等监控系统,但是却没有一个统一的地方查看各个服务的 SLI,其实,服务的 SLI 指标远比机器的 CPU、内存等指标来得重要。最佳实践是什么?

SLI 最佳实践

之前我翻译过一篇文章,介绍 Facebook 的 SLICK:《Facebook 基于 SLO 的可靠性保障实践》。SLICK 其实就是一个公司级全局的服务 SLI 汇聚之地,工程师可以在这里查看依赖的其他服务的健康状况,这对于故障的快速定位起到了关键作用。

SLICK 虽然已经很大程度上解决了一些问题,但也有两个典型问题:

  • 你必须知道你依赖的其他服务叫什么,如果你是个新手,可能未必知道
  • 所有服务的所有 SLI 都在这里平铺,没有层级组织,信息过载,对于关注全局的人来讲,一下子看不过来

故而,我们希望这些服务之间有横向依赖关系,通常可以从 tracing 系统自动获取,如果没有 tracing 系统,也可以用 eBPF 或手工建立这个关系,手工建立其实也不麻烦,你对你的服务熟悉,你只需要配置你自己的服务即可,全公司可能 500 个微服务,最终是由 200 多个人分别去建立,每个人配置一两个微服务,也不是很难。除了横向依赖关系,还希望建立纵向层级关系,比如建立一个 系统-子系统-服务 的三层关系,底层服务如果出问题,问题上浮,在最终的系统层面画个红 x 之类的,首页只展示各个系统的健康状况,系统的数量通常不会特别多,就可以做到一目了然。这个纵向层级关系,是没法从某个数据自动生成的,通常都是需要手工配置,假设你是某个微服务的维护人员,相当于你要配置一下自己这个微服务的分组关系,应该归属到哪个系统或者哪个子系统。

有些朋友听到需要手工配置可能就望而却步了,大可不必,让微服务负责人配置自己的服务,分布式分担这个工作,每个人就比较轻松了。而且这个信息改动极少,一般只有新服务上线或者服务下线才会改动,不会频繁改动。另外,这属于稳定性治理层面的工作,数据经过治理才能更有价值,才能更好的服务于故障发现和定位,才能更好的反向驱动各个微服务建立这些关键数据,让整体稳定性提升。治理工作是工程工作的放大器和矫正器。

依据这个思路,我们创业建立了一个叫做灭火图的产品,来帮助公司建立这种全局 SLI 的治理。当然,灭火图除了建立上面讲到的这个能力,还可以串联 metrics、logs、traces、events 等各类可观测性数据,作为一个数据的全局入口,可以有效提升故障发现和定位的效率。如果您有兴趣,欢迎联系我们交流,联系我们的邮箱即可:contact-us@flashcat.cloud ,或者到下面的网址提交一个申请,我同事会联系您约时间交流:

关于快猫星云

快猫星云是一家云原生智能运维科技公司,由知名开源项目“夜莺(Nightingale)”的核心开发团队组成,创始团队均来⾃阿⾥、百度、滴滴等互联⽹公司。夜莺是一款开源云原生监控工具,是中国计算机学会接受捐赠并托管的第一个开源项目,在GitHub上有超过8000颗星,迭代发布了超过100多个版本,上百位社区贡献者,是国内领先的开源可观测性解决方案。

快猫星云以开源夜莺为内核打造的“Flashcat平台”,是国内顶级互联⽹公司可观测性实践的产品化落地,致力于让可观测性技术更好的服务企业,保障服务稳定性。Flashcat 平台具有以下特点:

  • 统一采集:采用插件化思路,内置集成上百种采集插件,服务器、网络设备、中间件、数据库、应用、业务,均可监控,开箱即用。
  • 统一告警:支持几十种数据源对接,收集各类监控系统的告警事件,进行统一的告警收敛、降噪、排班、认领、升级、协同,大幅提升告警处理效率。
  • 统一观测:将 Metrics、Logs、Traces、Events、Profiling 等多种可观测性数据融会贯通,并预置行业最佳实践,既提供全局业务视角、技术视角的驾驶舱,也提供层层下钻的故障定位能力,有效缩短故障发现和定位时间。

快猫星云,让可观测性数据更有价值!
https://flashcat.cloud/

老张,你的服务是不是挂了?论全局 SLI 的重要性的更多相关文章

  1. 梦里寻她千百度,Bug却在隔壁老张处

    程序员与 Bug 是一对矛盾的存在,程序员既要在解决 Bug 中获得成就感,同时也讨厌 Bug 本身的存在.“程序不息,Bug 不止”,程序员在与 Bug 的斗争中,也有很多有趣的事情发生,我们整理了 ...

  2. 用hugo建博客的记录 · 老张不服老

    前后累计折腾近6个小时,总算把搭建hugo静态博客的整个过程搞清楚了.为什么用了这么久?主要还是想偷懒,不喜欢读英文说明.那就用中文记录一下过程吧.还是中文顺眼啊. 某日发现自己有展示些东西给外网的需 ...

  3. 服务端挂了,客户端的 TCP 连接还在吗?

    作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. 如果「服务端挂掉」指的是「服务端进程崩溃」,服务端的进程在发生崩溃的时候,内核会发送 ...

  4. [跨数据库、微服务] FreeSql 分布式事务 TCC/Saga 编排重要性

    前言 FreeSql 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAcc ...

  5. python并发编程-多线程实现服务端并发-GIL全局解释器锁-验证python多线程是否有用-死锁-递归锁-信号量-Event事件-线程结合队列-03

    目录 结合多线程实现服务端并发(不用socketserver模块) 服务端代码 客户端代码 CIL全局解释器锁****** 可能被问到的两个判断 与普通互斥锁的区别 验证python的多线程是否有用需 ...

  6. Spring Cloud 之 全局配置

    在微服务架构中,全局配置的重要性不言而喻.SpringCloud的全局配置存储主要基于 Git 来实现,即配置信息存储在Git服务器,以统一的方式对外提供访问.在使用上分为 ConfigServer和 ...

  7. dubbo集群服务下一台服务挂了对服务调用的影响

    一.问题描述:项目中2台dubbo服务给移动端提供查询接口,移动端反应说查询时而很快(秒刷),时而很慢(4-5秒). 二.问题分析: 1.问题猜想:网络不稳定原因导致,但是切换公司wifi和手机4G, ...

  8. 卧槽,sql注入竟然把我们的系统搞挂了

    前言 最近我在整理安全漏洞相关问题,准备在公司做一次分享.恰好,这段时间团队发现了一个sql注入漏洞:在一个公共的分页功能中,排序字段作为入参,前端页面可以自定义.在分页sql的mybatis map ...

  9. 从壹开始微服务 [ DDD ] 之十一 ║ 基于源码分析,命令分发的过程(二)

    缘起 哈喽小伙伴周三好,老张又来啦,DDD领域驱动设计的第二个D也快说完了,下一个系列我也在考虑之中,是 Id4 还是 Dockers 还没有想好,甚至昨天我还想,下一步是不是可以写一个简单的Angu ...

  10. Spring Cloud 微服务

    https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247486301&idx=2&sn=f6d45860269b61 ...

随机推荐

  1. 牛客网-SQL专项训练14

    ①通过子查询的方式从衬衫表SHIRTABLE中选取出销售单价shirt_price高于全部衬衫的平均价格的衬衫名字:B 解析: 题目要求需要用到子查询,故排除AC选项,而D选项在where子句中使用了 ...

  2. 地址标准化服务AI深度学习模型推理优化实践

    简介: 深度学习已在面向自然语言处理等领域的实际业务场景中广泛落地,对它的推理性能优化成为了部署环节中重要的一环.推理性能的提升:一方面,可以充分发挥部署硬件的能力,降低用户响应时间,同时节省成本:另 ...

  3. Schedulerx2.0支持应用级别资源管理和任务优先级

    1. 前言 Schedulerx2.0是一套分布式的任务调度+计算框架.作为一套分布式计算引擎,用户经常需要资源管理的需求,当前schedulerx仅仅支持单个任务实例的管控(比如单机子任务并发数.拉 ...

  4. 媒体智能-淘宝直播流媒体互动实践 | D2 分享视频+文章

    背景:今天给大家带来的分享主题是<媒体智能-淘宝直播流媒体互动实践>,内容分为5个部分,首先看看在淘宝直播的直播间里主播可以怎样给用户拜年:然后具体讲如何制作一个手势拜年的特效:接着介绍我 ...

  5. 如何快速开发 Serverless Devs Package ?

    ​简介:目前,开发者开发 Serverless Package 的流程相对来说是比较简单的.因为在 Serverless Devs 开发者工具中,已经提供了相对完整的脚手架能力,一文了解详情~ ​ 作 ...

  6. ARM 反汇编速成

    1.跳转指令 B   无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 BLX   带链接和状态切换的无条件跳转 B  loc_地址 BNE, BEQ 2.存储器与寄存器交互数据指令 ...

  7. dotnet C# 获取当前设备可移动磁盘

    本文告诉大家如何获取当前设备的可移动磁盘 在我的 WPF 应用里面,期望获取到 U 盘的所在盘进行一些有趣的逻辑.可以通过 DriveInfo 类的 GetDrives 获取当前所有的驱动器磁盘 再通 ...

  8. dotnet C# 如何正确获取藏文的字数

    在咱国内有很多有趣的文字,其中藏文属于有趣的文字里面特别有趣的一项,特别是对于做文本库的同学,大概都知道什么叫合写字吧.合写字的含义就是多个字符一起组成一个字.但是多个字符在内存中,本身就是多个字符对 ...

  9. pnpm的基本原理及快速使用

    基本原理 前置知识:软件链接与硬链接 软链接(符号链接Symbolic link):是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用.在window快捷方式上和其 ...

  10. Solution Set - Splay

    A[洛谷P3369]维护集合,支持插入,删除,查询\(x\)的排名,查询排名\(x\)的数,查询前驱,查询后继. B[洛谷P3391]维护一个序列,支持区间翻转. C[洛谷P3380]维护数列,支持单 ...