当前位置: 首页 > news >正文

线上服务质量的问题该如何去处理?你有什么思路?

线上服务质量的问题该如何去处理?你有什么思路?

目录:导读

发现线上故障

处理线上故障

修复线上故障

运营线上质量


就是前几天有个同学问了我一个问题:目前业内高可用部署主要采用方案?

看到这个问题,我的第一反应是问题太宽泛,不够明确。我反问了她一个问题:“你需要什么高可用?业务高可用?服务高可用?数据库高可用?还是其他?”

针对问题我也给出了我的理解和方案,大致内容如下:

高可用类型

简单理解

高可用方案

业务高可用

用户的操作都可以正常被处理

冗余设计+故障预案+监控告警+良好的服务发布体系

服务高可用

service可持续处理请求,但不对业务的正确性负责

分布式集群+限流熔断方案+
多可用区多机房

上述的内容只是一个引子,因为高可用和线上服务的稳定性有密切的关系。而软件测试或者说质量保障的工作范畴,不仅仅在测试环境,线上环境的服务质量保障,也是我们需要关注的重点。

这其实也是我在以前的文章中提到的一点:交付(线上)质量持续运营。见下图:

那么如何做好线上的服务质量保障工作,达到持续运营的理想状态呢?这是我本篇文章要聊的话题。

发现线上故障

业内程序员面试时候据说有个三高的说法,即:高并发、高性能、高可用。

分布式架构中有CAP理论,即:Consistency(数据一致性)、Availability(服务可用性)、Partition tolerance(分区容错性)。

这些点对软件系统提出了很高的要求,既要能扛得住高并发流量冲击,又要具备很好的性能来处理请求,还要达到服务和业务的高可用,并且要保证业务数据的一致性,最后还要对异常场景有一定的冗余处理能力,简直是难上加难。

而线上服务(或者说生产环境),我们最担心也最常见的就是出现线上故障。故障的种类很多,什么服务挂了、支付失败、无法加载商品图片等等不一而足。

要保障线上服务质量,避免出现线上故障的前提,除了在测试阶段做好测试,上线发布前仔细验证之外,还需要具备在故障发生时及时发现故障的能力。

目前最常见的发现故障的手段有两种,分别是:日志分析和监控告警

当然,很多的监控告警系统也是通过埋点数据和日志采集,对采集的数据进行过滤,解析成一定的结构数据,然后进行存储以及可视化展示来做的。

比如很经典的ELK(Elasticsearch+Logstash+Kibana),如下图:

通过日志分析和监控告警,我们可以快速的发现线上故障,及时的进行处理。

处理线上故障

发现线上出现故障后,第一优先级永远是快速恢复线上业务的可用性,然后再考虑其他。

写到这里突然想起之前就职的某家企业交易团队负责人的话:优先业务止血,再考虑问题定位分析和优化

以我的工作经历来说,一般发现线上故障后的处理流程如下:

一般来说,线上故障处理,主要会涉及到如下四种角色:

NOC:一般指专门的线上服务巡检和监控值班人员,出现故障时作为信息收集和信息分发中心;

运维/研发:线上故障由对应业务域/服务的研发和运维进行处理(研发对代码最熟,运维有服务配置发布和变更权限);

测试/产品:故障恢复后测试进行观察验证,如果影响范围较大,还需要通知产品甚至市场运营进行对应的配合处理;

高层领导:如果故障比较严重,需要上升到更高级别的负责人,并且某些重要操作需要高层决策和授权;

修复线上故障

一般来说,对于线上出现故障,快速恢复服务可用业务可用,降低故障带来的损失是首要的,修复bug反而是其次。

所以在线上出现故障时,一般都会采用一些临时方案来达到快速止血的目的。常见的临时方案有:

  • 服务重启;
  • 部署回滚;
  • 限流降级;

有临时方案就有后续的优化方案,一般在线上故障恢复后,会进行如下几个步骤:

  • 利用日志和故障现场保留的dump文件等进行根因分析;
  • 修复故障后在测试环境进行验证,确认没问题后再发布到生产环境;
  • 记录故障从发生到彻底修复的全过程,进行线上故障复盘,提出后续改进方案并跟进落地;

当然,除了上述的一些手段,还可以通过如下几种方式来降低线上出现故障的影响和损失:

  • 组织线上故障演练,培养技术同学的临时反应和处理问题能力;
  • 通过灰度发布或者发布beta版本,让用户成为帮助我们发现问题;
  • 做专项的混沌工程,在不断的攻防演练中提升线上服务的质量和稳定性;

运营线上质量

聊了这么多,那测试同学如何针对线上故障,做好质量持续运营呢?可以从上面的几张配图来切入。

线上服务巡检:NOC并不是一个岗位,而是一种职责,测试同学对于业务和自己负责的项目相对更熟悉,要做到最快速度发现和处理线上故障,就是要让最正确的人第一时间响应和介入处理。

而测试同学可以达到监控巡检和信息分发以及快速验证的作用。当然,这种机制需要一定的时间建立,还需要一定的基础技术服务设施支撑。

组织故障复盘:流程和规范可以将好的实践标准化流程化自动化,让技术团队共享经验,而组织故障复盘并且跟进后续的优化落地效果,就是一个测试同学可以很好胜任的事情。

故障处理手册:有了日常线上巡检,组织了故障复盘,可以沉淀很多的最佳实践,可以将这些实践抽取共性,沉淀输出为一份故障处理手册,并在团队内做宣讲和落地。

这样既可以让其他同学在面对故障时能更快的响应处理,也能让新同学入职后快速的熟悉团队的技术栈,加快融入速度。

写在最后

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

看到这篇文章的人有觉得我的理解有误的地方,也欢迎评论和探讨~

你也可以加入下方的的群聊去和同行大神交流切磋

 

相关文章:

线上服务质量的问题该如何去处理?你有什么思路?

线上服务质量的问题该如何去处理?你有什么思路? 目录:导读 发现线上故障 处理线上故障 修复线上故障 运营线上质量 就是前几天有个同学问了我一个问题:目前业内高可用部署主要采用方案? 看到这个问题&#xff0c…...

IOC 配置,依赖注入的三种方式

xml 配置 顾名思义,就是将bean的信息配置.xml文件里,通过Spring加载文件为我们创建bean。这种方式出现很多早前的SSM项目中,将第三方类库或者一些配置工具类都以这种方式进行配置,主要原因是由于第三方类不支持Spring注解。 优点…...

自动机,即有限状态机

文章目录一、问题来源二、题目描述三、题解中的自动机四、自动机学习五、有限状态机的使用场景一、问题来源 今天做力克题目的时候看到了字符串转换整数的一道算法题,其中又看到了题解中有自动机的概念,所以在这里对自动机做个笔记。题目链接 二、题目描…...

第一部分:简单句——第一章:简单句的核心——二、简单句的核心变化(主语/宾语/表语的变化)

二、简单句的核心变化 简单句的核心变化其实就是 一主一谓(n. v.) 表达一件事情,谓语动词是其中最重要的部分,谓语动词的变化主要有四种:三态加一否(时态、语态、情态、否定),其中…...

VSCode Markdown写作引入符合规范的参考文献

Markdown可以用来写论文,写论文的时候无一例外要用到参考文献,今天来谈谈怎么自动生成参考文献。之前讲了怎么导出的pdf,文章在这里 VSCode vscode-pandoc插件将中文Markdown转换为好看的pdf文档(使用eisvogel模板) …...

电子学会2022年12月青少年软件编程(图形化)等级考试试卷(四级)答案解析

目录 一、单选题(共15题,共30分) 二、判断题(共10题,共20分) 三、编程题(共3题,共50分) 青少年软件编程(图形化)等级考试试卷(四级) 一、单选题(共15题,共30分) 1. 运行下列程序…...

JUC并发编程学习笔记(一)——知识补充(Threadlocal和引用类型)

强引用、弱引用、软引用、虚引用 Java执行 GC(垃圾回收)判断对象是否存活有两种方式,分别是引用计数法和引用链法(可达性分析法)。 **引用计数:**Java堆中给每个对象都有一个引用计数器,每当某个对象在其它地方被引用时,该对象的…...

2022级上岸浙理工MBA的复试经验提炼和备考建议

在等待联考成绩出来的那段时间,虽然内心很忐忑,但还是为复试在积极的做准备,虽然也进行了估分大概有201分,但成绩和分数线没下来之前,只能尽量多做些一些准备把。因为笔试报了达立易考的辅导班,对于浙江理工…...

人大金仓数据库索引的应用与日常运维

索引的应用 一、常见索引及适应场景 BTREE索引 是KES默认索引,采用B树实现。 适用场景 范围查询和优化排序操作。 不支持特别长的字段。 HASH索引 先对索引列计算一个散列值(类似md5、sha1、crc32),然后对这个散列值以顺序…...

20230211英语学习

Six Lifestyle Choices to Slow Memory Decline 研究发现,生活方式真能帮助记忆“抗衰”? A combination of healthy lifestyle choices such as eating well, regularly exercising, playing cards and socialising at least twice a week may help sl…...

5G图书推荐

无线通信专业书籍推荐 1.无线通信原理:基于MATLAB的实践,作者:李珊,出版社:清华大学出版社 2.无线通信系统:原理、设计与应用,作者:肖宇,出版社:电子工业出版…...

【Linux下代码调试工具】gdb 的基本使用

gdb的基本使用前言准备gdb工具调试须知gdb的基本指令进入调试退出调试显示代码及函数内容运行程序给程序打断点查看断点位置断点使能取消断点逐过程调试逐语句调试运行到下一个断点查看变量的值变量值常显示取消变量值常显示前言 在主页前面的几篇文章已经介绍了Vim编辑器及Ma…...

UART和RS232、RS485的联系和区别、以及对软件编程的影响

1、串口、UART、RS232、RS485概念的理解 (1)狭义上的串口:指的是串口协议,就是时序图、数据收发先后顺序等,是抽象出来的协议; (2)广义上的串口:指的是符合串口协议的接口,UART、RS232、RS485在实际工作中都…...

ajax是什么?咋实现的

创建交互式网页应用的网页开发技术 再不重新加载整个网页的前提下,与服务器交换数据并且更新部分内容 简单来说就是无页面刷新的数据交互 通过创建xmlhttprequest对象向服务器异步发送请求从而获取数据,然后操作dom更新内容 1,创建xmlhttpr…...

AI推理计算框架中的内存优化

背景 内存管理是AI计算中非常重要的一部分。我们希望模型计算时占用内存尽可能小,这样我们训练或推理时就可以用更大的batch size使其尽快收敛,或者提高吞吐率。又或者让我们可以使用参数更多、或更复杂的模型从而达到更好的准确率。由于现代深度学习模…...

C语言学习小结(1)——初认识C语言

一、C语言概念 C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着…...

30分钟吃掉wandb可视化自动调参

wandb.sweep: 低代码,可视化,分布式 自动调参工具。使用wandb 的 sweep 进行超参调优,具有以下优点。(1)低代码:只需配置一个sweep.yaml配置文件,或者定义一个配置dict,几乎不用编写调参相关代码。(2)可视化…...

【8】AMBA_SOC项目自学IC验证项目-仿真平台脚本使用讲解

仿真平台文件介绍和脚本使用说明 1、项目路径:2、文件夹说明:3、仿真运行命令:第一步:进入项目路径第二步:设置环境第三步:运行仿真第四步:查看波形1、项目路径: 位置:/tool/project/axi 2、文件夹说明: a、env就是放的我们uvm环境相关的env文件; b、out就是我们…...

智慧水务未来技术发展方向预测探讨

随着科技的不断发展和城市化的加速,智慧水务作为一种新的水务模式,逐渐受到广泛关注。未来,智慧水务将会面临更多的技术挑战和商机。本博客将对智慧水务的未来技术发展方向进行预测,以探讨智慧水务未来可能的技术重点。 1. 人工…...

数据结构 | 栈与队列

🔥Go for it!🔥 📝个人主页:按键难防 📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 📖系列专栏:数据结构与算法 &#x1f52…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...