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

news2024/9/27 8:04:11

一.问题

接流量告警出现获取 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.coloradmin.cn/o/1909675.html

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

相关文章

01-引论-操作系统的目标和作用

操作系统的目标 1.方便性 2.有效性 3.可扩充性 4.开放性 操作系统的目标与应用环境有关 在不同的应用环境下,操作系统的重点和功能可能会有所不同。例如,对于桌面操作系统,用户界面的友好性和多媒体功能可能是重点;对于服务…

Qt/C++项目积累: 2.主机监控器 - 2.1 项目介绍

修改记录 序号日期说明对应软件版本号120240709对预期功能和已完成功能进行新增无 一:项目主体编写背景 在观察程序的运行状态时,其对系统的CPU,内存,硬盘占用无疑是几项重要参考指标,而现有的监控软件,搜…

2024-07-08 base SAS programming学习笔记10(read data)

1.读入SAS 数据集 格式如下: data sas-data-set; set sas-data-set; run; sas-data-set 是数据集名称,可以是libname.filename的形式 举例如下: 2.在DATA步使用BY 语句 BY variable语句使用方法: a.必须在PROC SORT里面进行排序…

国产芯片四大流派,你最看好哪一条?

曾经,我们以为“地球村”是大势所趋,大家取长补短,合作共赢。 然而,2018年开始的那一场断供,让芯片自主从一个产业的隐忧变成了我国的一个“明伤”。近几年“卡脖子”事件屡屡上演,“缺芯”、“芯痛”成为…

Redis连接Resp图形化工具和springboot

Redis连接Resp图形化工具和springboot 1.redis配置1.1 备份、修改conf文件1.2 Redis的其它常见配置:1.3 启动Redis:1.4 停止服务:1.5 开机自启: 2. resp的安装、配置和连接:2.1 GitHub上下载2.2 开始连接redis ![在这里…

【Dison夏令营 Day 13】使用 Python 创建扫雷游戏

在本文中,我们将介绍如何使用 Python 语言创建自己的基于终端的扫雷程序。 关于游戏 1992年4月6日,扫雷和纸牌、空当接龙等小游戏搭载在Windows 3.1系统中与用户见面,主要目的是让用户训练使用鼠标。扫雷是一款单人游戏,这个游戏…

单例模式(大话设计模式)C/C++版本

单例模式 C 饿汉 /* HM hungry man 饿汉 */ #include <iostream> using namespace std; class Singleton { private:Singleton() { cout << "单例对象创建&#xff01;" << endl; };Singleton(const Singleton &);Singleton &operator(c…

app: 和 android:的区别

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

如何切换手机的ip地址

在数字时代的浪潮中&#xff0c;智能手机已成为我们日常生活中不可或缺的一部分。然而&#xff0c;随着网络安全问题的日益凸显&#xff0c;保护个人隐私和数据安全变得尤为重要。其中&#xff0c;IP地址作为网络身份的重要标识&#xff0c;其安全性与隐私性备受关注。本文将详…

百度旋转验证码

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi a…

OpenWrt入门 (1) - 登录及ssh命令接入wifi

本文参考自: [OpenWrt 维基]在 OpenWrt 上启用 Wi-Fi 接入点 --- [OpenWrt Wiki] Enabling a Wi-Fi access point on OpenWrt 需要详细了解的小伙伴请看原文 基本概念 OpenWrt是适用于嵌入式设备的一个Linux发行版。 相对原厂固件而言&#xff0c;OpenWrt不是一个单一、静态…

手写简单实现IOC

这个小demo是利用反射从最基础一步一步模拟实现了IOC的功能,所有的代码基本都给出了注释,方便大家阅读. 目录结构&#xff1a; 这里需要导入一下junit依赖 <!-- junit测试 --><dependency><groupId>junit</groupId><artifactId>junit</artif…

string类(STL开始)

相信大家都知道STL在C中的重要性&#xff0c;作为其模板库中的一部分&#xff0c;包含了常见的数据结构和算法&#xff0c;是C的标准库 而我们今天要讲的String类&#xff08;String底层是一个字符顺序数组的顺序表对象&#xff0c;可以归类为容器&#xff09;&#xff0c;其实…

JavaWeb系列二十二: 线程数据共享和安全(ThreadLocal)

韩顺平-线程数据共享和安全ThreadLocal 什么是ThreadLocal?ThreadLocal环境搭建ThreadLocal快速入门ThreadLocal源码阅读threadLocal.set()源码threadLocal.get()源码 什么是ThreadLocal? ThreadLocal的作用: 可以实现在同一个线程数据共享, 从而解决多线程数据安全问题.Thr…

一.6 存储设备形成层次结构

在处理器和一个较大的较慢的设备&#xff08;例如主存&#xff09;之间插入一个更小更快的存储设备&#xff08;例如高速缓存&#xff09;的想法已经成为一个普遍的概念。实际上&#xff0c;每个计算机系统重的存储设备都被组织成了一个存储器层次结构&#xff0c;如图1-9所示。…

楼梯导航案例

楼梯导航 <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>滚动到展示区</title><link re…

Python 中将字典内容保存到 Excel 文件使用详解

概要 在数据处理和分析的过程中,经常需要将字典等数据结构保存到Excel文件中,以便于数据的存储、共享和进一步分析。Python提供了丰富的库来实现这一功能,其中最常用的是pandas和openpyxl。本文将详细介绍如何使用这些库将字典内容保存到Excel文件中,并包含具体的示例代码…

NodeJS小饰品销售管理系统-计算机毕业设计源码21597

摘 要 在当今的数字化时代&#xff0c;电子商务已经成为了商业领域中不可或缺的一部分。随着消费者对于购物体验的要求越来越高&#xff0c;一个高效、便捷、用户友好的小饰品销售管理系统显得尤为重要。 本系统旨在利用 JavaScript 技术&#xff0c;设计并实现一个功能强大的小…

Python实现动态银河系:模拟旋转的银河动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义星系类主循环 完整代码 引言 银河系的旋转动画是一个迷人且富有挑战性的项目。通过模拟星系的旋转&#xff0c;我们可以更好地理解天文学现象&#xff0c;并创造出视觉上令人惊叹的效果。在这篇博客…

计算机网络 - 万字长文

计算机网络 二、计算机网络2.1 七层模型表格2.2 通俗讲解七层模型2.3 TCP与UDP对比2.4 TCP 三次握手过程==为什么握手是三次,而不是两次或者四次?====三次握手可以携带数据吗?====TCP三次握手失败,服务端会如何处理?====什么是半连接队列?全连接====ISN(Initial Sequence…