记一次线上流量突增问题排查

一.问题

接流量告警出现获取 xx 信息接口调用次数同比往年大促活动猛涨.扩大至 10 倍之多.心里顿时咯噔一下.最近各种严打,顶风作案.某不是摸到电门了.一下子要把自己带走.从此走向求职之路.一时间脑子哇哇的思绪万千.

202x.5.20 大促开门红的调用.这个是往年活动的时候的调用量.不到 3k.

202x.5.20 大促开门红的调用.这个是出问题的时间的调用.可以看到每秒 近 2w.qps. 可以看到整体涨的还是比较厉害,要是我的工资也是这样突然就涨的我都不知道就好了.可惜并不是.好了,还是要回来看问题.

二.排查过程

2.1 查看总体流量入口

首先第一反应是不是整体的入口流量导致的就上涨的比较厉害.第一时间去看了入口的流量情况.

今年总量

看看去年的吧.

不看不知道,一看今年更拉.经济不行,买东西的也少了.实锤了.好了,回来从流量入口那基本是排除了因为入口流量上浮原因.

2.2 梳理业务核心链路

这一步就是回来看一下代码本身的现有逻辑,看看在代码链路上有哪些可能的场景会导致调用商家的服务流量上升.本身这个服务是用以渲染整车维度的店铺名称.做了两层的缓存处理用以保证整体的性能以及对于下游的冲击.链路还是比较长.具体看下调用图.

从整体的调用步骤

  • 第一步:从整车维度获取所有的店铺 Id.allIds
  • 第二步:过滤某些不需要调用的 店铺 Ids
  • 第三步:从本地缓存(缓存时间 60s)中获取存在缓存的店铺 Id
  • 第四步:从redis 中获取存在缓存(缓存时间 5 分钟)的店铺 Id
  • 第五步:将以上两个步骤中已经在缓存中存在的店铺 Id ,从 allIds 中剔除.得到剩余的 restIds
  • 第六步:通过服务调用获取剩余 restIds
  • 第七步:将获取的服务的 data 设置到 localCacheredis 中.

分析以上步骤.大概出问题的点可能是哪些.

第一步:单纯就是因为业务量增加了,店铺的业务数据也多了导致了 allIds 也多了.存在这种可能,可能性不大,因为从前面的流量的入口来看整体的流量已经出现萎缩.

第二步:有些店铺名称是固定的不需要进行调用.这一步需要进行过滤.这一步是在配置文件中配置的.极有可能.最终通过增加了打印日志那些不是去调用的店铺而没有在配置中间中的.找到了这个 id .通过配置加上后.马上流量整体就下降了.我草,这个点确实比较骚.

第三步:缓存集体失效,导致本地缓存为空.存在这种可能.但是有 redis 托底.不至于

第四步:redis 缓存失效.或者读取缓存超时加上本地缓存失效.两者叠加导致增加远程调用量激增.也有这种可能.巧合性高的话

回想最近的大促活动扩容操作,确实有一部分机器出现了很多 redis 读取超时告警.仔细排查了属于跨机房调用.这是属于这一部分原因.

第五步:不可能.逻辑运算

第六步:有可能.服务调用超时.导致无法获取数据.因为咱们的超时的时长都是定长设置.好在是有超时日志告警.但进一步看,没有发现.
排除了这个可能.

第七步:有可能.本地缓存设置失败的和 redis 操作失败都有日志告警.目前没有发现.也排除了这一项.

最近为了迎接大促活动了.做了一些扩容的事情.其中扩容了一部分机器.不看不知道,一看吓一跳.扩容的机器是 lf 机房的机器.调用还是 bj 的缓存集群.

三.改进&扩展

上面的整体流程属于一个比较后置的处理方式.那其实在实际的生产过程中面对这种流量突增的场景到底有哪些措施呢?

  • 日常还是活动(大促,整点抢购等)

为什么要有这个区分?在日常的流量过程中应对的策略基本是以保护系统为唯一需要的考量.当然活动的时候这个也是首先要考虑的点.但是还是需要去考虑另外一个点.尽可能去挽留一些正常流量.对于电商场景的话有更多的用户流量肯定是来者不拒的.在日常期间,一般通过限流的来保证日常系统的稳定.

  • 服务调用方还是服务提供方

如果是服务方的流量发起方.在确认流量入口无误的场景下.可以提前报备流量预期.保证正常流量可以进来.如果流量比较大且处于一些非核心链路,可以通过主动降级的形式来减少对于服务提供方的调用.具体降级也是可以通过分批的降级的思路,提供一些漏桶的比例.可以在 0-1 的区间做到控制.还有通过增加缓存(本地,分布式)的形式来减少服务提供方的调用.

对于服务调用方,基本是两个方向.

降级
缓存

如果是服务提供方.面对突增的流量.首先保证系统稳定的角度.通过限流(单机,集群)的措施来保证系统平稳运行.如果流量确认正常.并且系统一直有一些 standby 的资源,也可以通过支援的方式来进行线上扩容.支持线上流量.

对于服务提供方

standby 资源支援
限流
内部优化(缓存,内部非核心链路降级,数据库优化)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Odoo 16 中生成 CSV 报告

在 Odoo 中,我们需要生成多种类型的文件以用于不同的目的。CSV 报告允许用户从 Odoo 数据库导出结构化数据。CSV 格式受到各种应用程序和工具的广泛支持,因此可以轻松地与外部系统(如电子表格(例如 Microsoft Excel、Google Sheet…

谷歌云 | Gemini 大模型赋能 BigQuery 情感分析:解码客户评论,洞悉市场风向

情感分析是企业洞察客户需求和改进产品服务的重要工具。近年来,随着自然语言处理 (NLP) 技术的飞速发展,情感分析变得更加精准高效。Google 推出的 Gemini 模型,作为大型语言模型 (LLM) 的代表,拥有强大的文本处理能力&#xff0c…

生成图质量评价

1. RichHF-18K 论文地址 解决问题: 如何对生成图质量进行算法评价,以优化图片质量,提升模型生成能力 解决思路: 参考多模态模型,构建评价模型,从7个维度分三个分支对生成图进行测评: Tips&…

如何将overleaf的latex格式转换为word

安装pandoc https://pandoc.org/installing.html 下载安装后,打开windows shell,测试是否安装成功: pandoc -v使用代码转换 进入你防止latex的文件夹,运行以下命令: pandoc -o output.docx -t docx .\main.tex其中…

录制微课的软件有哪些?这些软件你不能错过!

随着在线教育的蓬勃发展,微课已成为一种广受欢迎的教学形式。微课录制软件的选择对于教师而言至关重要,它不仅要具备简单易用的特点,还要能够满足高质量录制的需求。而对于教师来说,录制微课的软件有哪些呢?本文将介绍…

【日常记录】【插件】js 获取浏览器信息、操作系统等相关信息

文章目录 1. 原生方式2. 插件的方式2.1 Bowser 的基本使用2.2 UAParser2.3 Platform.js 参考链接 1. 原生方式 原生方式可以通过 navigator.userAgent 来获取 需要写一个正则来匹配,获取相关的信息 2. 插件的方式 获取浏览器版本相关信息的库主要有以下几个 Bowser&…

高德API接入安卓相关问题说明

高德API接入安卓相关问题说明 我们都在怀念过去,失去后我们才懂得珍惜,有些人或事早已经远去,可是还是会想起曾经拥有的岁月,会是一种喜悦,会是一种遗憾…… 目前Android开发已经普遍使用Android Studio,开…

人工智能算法工程师(中级)课程1-Opencv视觉处理之基本操作

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程1-Opencv视觉处理之基本操作。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它提供了各种视觉处理函数,并…

红酒与电影经典:那些银幕上的醉人瞬间

在光影交织的银幕世界里,红酒不仅是品味生活的象征,更是情感与故事的催化剂。每当夜幕降临,一杯色泽深邃的红酒,便能带我们走进那些令人陶醉的影片瞬间,感受不同的人生百态。今天,就让我们一起回味那些银幕…

告别付费 API!使用 Ollama 和 MATLAB 玩转本地大模型

在“当MATLAB遇见ChatGPT?”一文中介绍了名为MatGPT的插件,该插件通过调用ChatGPT的API,实现了在MATLAB中与Chat GPT对话的功能。 虽然Open AI的GPT3.5和GPT4o可以免费使用,但调用API却需要收费,因此使用MatGPT这类插件…

mybatis 延迟加载

MyBatis的延迟加载(Lazy Loading)是一种优化技术,用于在需要时才加载关联对象或集合,从而提高性能和效率。以下是对MyBatis延迟加载的详细介绍: 延迟加载的基本概念 延迟加载是指在第一次访问对象的属性时才加载该对象…

阿一课代表随堂分享:红队反向代理之使用frp搭建反向代理

frp反向代理 frp简介 frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。 frp 是一个可用于内网穿透的高性能的反向代理应用,分为服务端frps和客户端frpc,支持 tcp, udp, http, https 协议。详…

修改服务器挂载目录

由于我们的项目通常需要挂载一个大容量的数据盘来存储文件数据,所以我们每台服务器都需要一个默认的挂载目录来存放这些数据,但是由于我们的误操作,导致挂载目录名字建错了,这时候后端就读不到挂载目录了,那我们我们的…

Java面经知识点汇总版

Java面经知识点汇总版 算法 14. 最长公共前缀(写出来即可) Java 计算机基础 数据库 基础 SQL SELECT first_name, last_name, salary FROM employees WHERE department Sales AND salary > (SELECT AVG(salary)FROM employeesWHERE department Sal…

德语中含“Augen”的惯用语表达-柯桥小语种学习德语考级

在我们的德语学习过程中,除了词汇的记忆,另一项重要的记忆任务就是惯用语的背诵啦。要知道,德语中有大量的Redewendung,他们以其言简意赅的表达,在日常用语中备受青睐。上一期我们已经学习了部分含有“Hand”的惯用语&…

去中心化时代的到来:区块链如何重新定义权力和控制

随着区块链技术的迅猛发展,我们正逐步进入一个去中心化的新时代。区块链不仅仅是一种技术,更是一种理念,它通过去除中心化的权威和控制节点,重新定义了数据管理、交易验证和权力分配的方式。本文将深入探讨区块链如何在去中心化时…

成都欣丰洪泰文化传媒有限公司电商服务领航者

在当今数字化浪潮中,电商行业正以前所未有的速度蓬勃发展。作为这片蓝海中的佼佼者,成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务能力和对市场的敏锐洞察力,成为众多品牌信赖的合作伙伴。今天,就让我们一起走进成都欣丰洪泰…

CC5利用链分析

分析版本 Commons Collections 3.2.1 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 CC6是在CC1 LazyMap利用链(引用)的基础上。 CC5和CC6相似都是CC1 LazyMap利用链(引用)的基础上,改变了到LazyMap的入口类。 CC6是用TiedMapEntry的hashCode方…

Pinia 实战指南:轻松驾驭前端状态管理

前言 本文讲解一下在前端开发中经常使用的一个状态管理工具Pinia Pinia 是 Vue 的专属状态管理库,很值得我们深入去学习一下 Pinia是什么? Pinia是专门为Vue.js应用程序设计的一个状态管理库 主要特点: 简单性: Pinia的设计目标是提高开发效率和用户体验,因此…

gen_circle_contour_xld 创建XLD轮廓对应于圆或圆弧。

gen_circle_contour_xld (Operator)创建XLD轮廓对应于圆或圆弧。 Signature 签名 gen_circle_contour_xld( : ContCircle : Row, Column, Radius, StartPhi, EndPhi, PointOrder, Resolution : ) Description 描述 Gen_circle_contour_xld创建一个或多个圆弧或闭合的圆。圆…