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

一.问题

接流量告警出现获取 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 资源支援
限流
内部优化(缓存,内部非核心链路降级,数据库优化)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

app: 和 android:的区别

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

Dynadot 2024年第一季度回顾

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

顶刊文献阅读及代码复现

前提:每个无人机都有 (i)自己的机载计算机,用于执行控制其自身动作所需的计算 (ii)自己的传感器系统,用于测量相对位置和速度, (iii)自己的通信设备,用于与相邻代理进行数据交换。 模型:短期的排斥力、中间范围的速度一致性和长距离的吸引力

昇思MindSpore学习入门-CELL与参数一

Cell作为神经网络构造的基础单元,与神经网络层(Layer)的概念相对应,对Tensor计算操作的抽象封装,能够更准确清晰地对神经网络结构进行表示。除了基础的Tensor计算流程定义外,神经网络层还包含了参数管理、状态管理等功能。而参数(…

【LLM大模型】如何在LlamaIndex中使用RAG?

如何在LlamaIndex中使用RAG 什么是 Llama-Index LlamaIndex 是一个数据框架,用于帮助基于 LLM 的应用程序摄取、构建结构和访问私有或特定领域的数据。 如何使用 Llama-Index ? 基本用法是一个五步流程,将我们从原始、非结构化数据导向基于该数据生成…

1Panel安装教程:使用Linux服务器安装1Panel面板全流程

使用阿里云服务器安装1Panel面板全流程,云服务器操作系统为CentOS 7.9,安装1Panel非常简单,先执行1Panel安装命令,然后在云服务器安全组中开通1Panel默认端口号、安全入口、用户名和密码等操作,阿里云百科整理详细安装…

国产热玛吉射频仪

最近看到国产热玛吉的射频模块。分享一下图片,看起来做工也是普普通通,对比进口的热玛吉射频板,技术水平相差甚远啊

django基于个人BMI的健康饮食食谱推荐系统-计算机毕业设计源码26624

目 录 1 绪论 1.1 研究背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.1.1技术可行性分析 2.1.2 操作可行性分析 2.1.3经济可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4系统流程分…

孟德尔随机化与痛风

写在前面 今天阅读的文献是多种暴露与某结局的孟德尔随机化,算是以量取胜了。 The effect of metabolism-related lifestyle and clinical risk factors on digestive system cancers in East Asian populations: a two-sample Mendelian randomization analysis …

诸葛亮的七星灯阵 - 单例模式

“运筹帷幄之中,决胜千里之外。一盏明灯,照亮万里江山。” 在蜀汉建兴五年,诸葛亮率军北伐,欲一举扫平魏国。然而,大军行至祁山,却遭遇了前所未有的困境。在这危急时刻,诸葛亮设下了一个神秘的…

初中生物知识点总结(人教版)

第一章 认识生物 一、 生物的特征: 1. 生物的生活需要营养 2. 生物能进行呼吸 3. 生物能排出身体内产生的废物 4. 生物能对外界的刺激做出反应 5. 生物能生长和繁殖 除病毒以外,生物都是由细胞构…

仿写SpringMVC

1.创建简单的注解 1.1 Controller package com.heaboy.annotation;import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) public interface Controller { } 1.2 RequestMapping package com.heaboy.annotation;import …

Qt QWizard新建向导实例

使用QWizard做新建向导,最简单的实例 class MyWizard : public QWizard { public: MyWizard(QWidget* parent nullptr); QWizardPage* createFirstPage(); QWizardPage* createSecondPage(); QWizardPage* createThirdPage(); }; MyWizard::MyWizard(QWidget* par…

Python编程:如何有效等待套接字的读取与关闭

背景介绍 网络编程是现代应用程序开发的重要组成部分,尤其是在大数据和实时通信的背景下。套接字(Socket)作为网络通信的核心技术,是开发网络应用程序的基础。在Python编程中,如何有效地等待套接字的读取与关闭事件是…

25届最近5年天津工业大学自动化考研院校分析

天津工业大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、初试大纲复试大纲 七、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目介绍 2、指定教…

AIGC:构筑创意新时代的神奇力量

在当今数字化浪潮中,AIGC(人工智能生成内容)正以其强大的创造力和应用价值,引领着一场前所未有的创意革命。从文本生成到音乐创作,从图像设计到电影制作,AIGC的触角已延伸至文化艺术的各个领域,…

FreeRTOS——任务通知

一、任务通知 1.1 任务通知简介 任务通知:用来通知任务的,任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值 (1)使用队列、信号量、事件标志组时都需另外 创建一个结构体 ,通过中间的结构体进行间接通信…

古代VS现代,太阳黑子的影响有什么变化?

公元前28年,我国汉朝人在人类历史上第一次记载下了“太阳黑子”。在《汉书五行志》里是这样记载:“汉成帝河平元年三月乙未,日出黄,有黑气,大如钱,居日中央”。在2052年前,人类对于太阳黑子的认…

社区6月月报 | Apache DolphinScheduler重要修复和优化记录

各位热爱Apache DolphinScheduler的小伙伴们,社区6月月报更新啦!这里将记录Apache DolphinScheduler社区每月的重要更新,欢迎关注。 月度Merge Stars 感谢以下小伙伴上个月为Apache DolphinScheduler所做的精彩贡献(排名不分先后…

跨境传输需要遵守哪些准则,如何做到有效管控?

在全球化的商业环境中,跨国企业面临着数据跨境传输的挑战。随着业务的扩展,企业需要在不同国家和地区之间高效、安全地传输大量数据。选择合适的跨境传输方案对于保障数据安全、提高业务效率、遵守法律法规至关重要。 跨境传输数据需要遵守的准则和规定主…