数十万QPS,百度热点大事件搜索的稳定性保障实践

在这里插入图片描述

作者 | 文燕

导读

在互联网行业里,业务迭代很快,系统变更频繁,尤其长青业务随着时间会积累越来越多历史包袱。阿拉丁作为百度搜索垂直化的产品,业务历经多年更迭,历史包袱很多,在应对大事件比如高考、东京奥运会、北京冬奥会的大流量时业务集群面临很大挑战。以高考来说,从2013年开始百度做高考,经过11年的坚持和沉淀,如今高考阿拉丁直接承接用户搜索高考相关内容的数十亿pv的流量,积累多年的系统因其复杂度而面临巨大的稳定性风险。为了应对高考等大事件的巨大流量,联合多方快速建立了保障机制,本文结合实践做了归纳和总结。

全文3087字,预计阅读时间8分钟。

01 保障思路

大事件的流量很大且有很强时效性,在保障时尤其要注意系统瞬时扛压能力。像每年高考的作文题,总是社会舆论热点,每个省份的高考查分、分数线公布的时间点都是瞬时热度极高。而奥运会这类体育赛事的热点事件难以预料,有时候是乒乓球半决赛焦灼,有时候是弱势项目突然夺冠,关注事件的用户不仅仅是平时活跃的几百万运动爱好群体,也有热点爆发后大量新增关注的用户,也就导致瞬时流量峰值难以预料,用户对我们赛事数据的时效性要求也很高,最好的体验是赛事数据实时更新,这些方方面面汇聚到一起,使得大事件保障比寻常保障工作难度大。常规思路包含3个方面:

图片

02 故障发现

常规做法首先是详细梳理业务模型、依赖的上下游、依赖强弱程度、数据链路,同时做好隐患排查和修复、日志的规范这些方面。在大事件保障时,需要针对不同的热点事件单独梳理其独特的依赖链路:

(1)上下游负责人,提前通告热点时间和影响范围、做好紧急预案。

(2)依赖的功能点,明确热点事件里用户关注的哪些功能点用了哪个业务方或架构提供的哪个能力,在热点发生前就密切关注流量走势。

(3)预估不同热点事件的峰值QPS,根据依赖程度和功能点评估上下游的峰值QPS,提前做好扩容和准备降级方案,预留紧急扩容的资源。

(4)排查不同热点事件对应的核心功能点的代码是否足够健壮,梳理上下游瓶颈点,做好风险预案、降级预案。

(5)为快速定位热点事件的业务、数据链路故障点,规划日志打点,方便构建针对性的业务监控和报警。

图片

常规保障的第二方面是构建多维度多视角地监控体系,如上图所示的功能、业务等监控。大事件不仅要做到及时发现故障,更需要快速感知用户体验问题,同时能实时关注与官方数据的差异。所以,我们围绕热点事件及其核心功能包含的数据时效来设定监控的内容、频率。从数据源头开始设定尽可能短的更新时间,在数据处理过程的各个环节做好异常的实时报警和应对预案,实时监控多地域多机房在端到端效果上的差异,实现了整个数据链路的时效感应和保障。

03 故障管控

在做到及时发现故障的同时,还需要做到能有效控制故障影响范围,也就是故障管控。常规的管控措施包括故障隔离、性能优化、问题预案、故障演练。大事件时期,各方面都围绕热点事件展开。

(1)故障隔离

在大事件过程中,围绕热点事件相关核心模块做故障隔离,包含业务的隔离、还有依赖的各服务的隔离、存储层的隔离。除了常规的存储和业务隔离,还针对性地补强了核心模块。

图片

比如奥运会的核心模块预估qps达到数十万qps,这个流量超出NBA最热门赛事峰值、对部分服务来说超出2019年百度APP红包活动的流量,服务集群乃至相关架构都很难直接承接这么大的流量,而且核心服务的下游还有流量被放大的特性。为此,我们做了全链路多级缓存,在核心服务里利用redis来直接承接流量。考虑到redis在单集群模式下承担的流量达不到预估峰值,所以依据业务特点、流量分布、现有redis集群性能上限,为奥运搭建了多地多redis集群来一起承接奥运总体流量。

(2)性能优化

当前服务集群能否支撑大事件峰值流量,依赖的上下游又能否支撑峰值流量?我们要确保这些方面不存在问题,就需要将前面梳理的内容运用起来,通过预估大事件不同热点事件的峰值流量,评估各服务状态怎么支撑预估的流量,对服务链路的瓶颈做性能优化。

首先基于历史数据、运营活动安排、梳理热点事件等评估搜索链路的各模块流量峰值。比如我们预估东京奥运会流量时,发现2016年奥运的数据太久远、参考性不高,做预估时就参考了2021年NBA等热点赛事的流量,同时针对奥运业务框架和产品特点分别对各种搜索场景、前端页面做了细致的流量预估。

确定预估的峰值之后,就开始评估服务链路上各模块是否需要扩容、需要扩多少,然后在大事件之前做好扩容。扩容的范围不只是当前服务链路,还有各业务协同方的服务集群。

图片

为了验证扩容后能支撑预估流量,我们根据预估qps做了分阶段的多轮压测,模拟真实流量来进一步排查服务中的风险点,发掘性能瓶颈点。发现瓶颈点后,做核心业务算法或业务逻辑优化、清除冗余代码、业务逻辑瘦身、数据拆分、分级缓存等,结合搜索架构的优化一起提升性能。

(3)问题预案

通过前面的工作,汇总出不同热点事件相关服务全链路的问题预案,应对系统的各个风险。问题预案包含服务、风险、降级、干预这4个方面,从数据到功能、服务都有针对性的应对措施。

图片

(4)故障演练

梳理完问题预案后,围绕热点事件的核心功能做故障注入、故障修复演练,验证预案有效性和生效速度。

04 故障处理

在做到及时发现故障、有效故障管控后,在大事件过程中还要做到故障处理有效得当。首先要成立大事件快速响应值班群,与服务链路各方负责人、协同方负责人提前沟通热点事件前后的故障响应预案。然后与运维部门合作做好服务集群运维、故障实例自动下线,在热点流量突增时随时根据各方面监控情况做切流、限流甚至是部分功能降级。大事件期间会收到各方面包括用户的反馈,遇到反馈功能出问题等在前面已经做好了人工干预预案的方面,就可通过干预快速解决。一些人工干预覆盖不了的问题、一些紧要产品迭代仍然需要开发后上线,这时候快速拉齐协同团队配合上线。

图片

除了上面提到的常规故障处理,我们还要考虑大事件的核心功能特性而制定对应方案。在高考、奥运会、冬奥这些大事件中,数据时效性是用户最关注的方面,也是产品竞争力的核心体现。除了前面提到的监控和预案,我们准备了主备两条数据资源方、快速切换并混合使用各自时效性最高的内容,同时搭建3种离线处理平台、故障时快速切换。我们建立了实时人工干预平台,根据产品效果监控、用户反馈、服务监控等各方面指标判断是否人工干预,最大程度保障产品效果和数据准确。

05 总结与思考

通过上面的举措,高考、东京奥运会、北京冬奥会期间,搜索阿拉丁相关服务的稳定性保持在99.99%+,数据更新速度与官方数据几乎同步,不仅仅保障了大事件的稳定性,还确保了我们的产品有很好的用户体验。

搜索阿拉丁涉及很多服务,面对大事件时需要考虑和准备的方面也很多,本文从故障发现、故障管控、故障处理三方面阐述了如何做稳定性保障。大事件各有特点,核心业务服务链路也有不同程度的技术负债和改造难点,如果平时业务迭代时就注重稳定性建设,能减少应对大事件的峰值流量而改造的难度。

目前『搜索产品研发工程师』岗位正在热招,主要为搜索产研后端,AI生态与架构方向工作。

欢迎有兴趣的同学投递简历至 yangye01@baidu.com

——END——

推荐阅读

百度搜索万亿规模特征计算系统实践

通过Python脚本支持OC代码重构实践(三):数据项使用模块接入数据通路的适配

百度搜索智能化算力调控分配方法

UBC SDK日志级别重复率优化实践

百度搜索深度学习模型业务及优化实践

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

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

相关文章

【PyQt】QPixmap与numpy.array互转

这里给出QPixmap→numpy.ndarray的两条转换(一个是使用PIL.Image而另一个不用), 以及numpy.ndarray→QPixmap两条转换(同样也是用不用PIL.Image的区别)。 代码运行结果: from PyQt5.QtCore import QPoint,QRect,Qt from PyQt5.QtWidgets import QLabel …

【UE5】五大基类及其使用

UObject UObject表示对象,准确来说,虚幻引擎中的对象基础类为UObject UObject提供了以下功能: 垃圾收集(Garbage collection)引用自动更新(Reference updating)反射(Reflection&am…

SQLite3 数据库学习(六):Qt 嵌入式 Web 服务器详解

参考引用 SQLite 权威指南(第二版)SQLite3 入门 1. Apache 搭建 cgi 环境 1.1 什么是 Apache Apache 是世界使用排名第一的 Web 服务器软件 它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用 1.2 具体搭建流程…

2020年12月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 关于广播消息,以下说法正确的是? A:只有角色,可以通过“广播消息”积木,向其他角色或是背景发送消息 B:只有背景,可以通过“广播消息”积木,向其他角色或是背景发送消息 C:背…

Shopee本土号封号几率大吗?如何避免封号?被封号了怎么办?

Shopee是近几年热门的电商平台之一,即使越来越多的跨境电商涌现,他的地位在东南亚市场依然占据一席之地,也依旧吸引着需要跨境商家入局。尤其在2023年,在TikTok Shop在印尼被关停之后,留下了大片空白,Shope…

千梦网创:创业,一场游戏一场梦

创业这件事就好比一场养成类游戏,而我们自己就是游戏主角。 这个游戏有一个特殊之处在于:SSS级装备有穿戴等级设定,就算你氪重金买到了一把神器,自身阅历不够也根本无法发挥它的强大威力而只能当个装饰。 这就要求我们真正沉浸在…

shell(函数和数组)

目录 一、函数 1.函数的由来 2.函数的作用 3.函数的使用方法 4.函数的定义 5.查看函数 6.删除函数 7.函数返回值 8.函数的传参数 9.函数递归 二、数组 1.数组的相关介绍 2.声明数组 3.定义数组的格式 4.冒泡排序 总结:本章主要介绍了函数和数组相关知…

gRPC之gRPC负载均衡(客户端负载均衡)(etcd)

1、gRPC负载均衡(客户端负载均衡)(etcd) 本篇将基于etcd的服务发现前提下,介绍如何实现gRPC客户端负载均衡。 1.1 gRPC负载均衡 gRPC官方文档提供了关于gRPC负载均衡方案Load Balancing in gRPC https://github.com/grpc/grpc/blob/master/doc/load-balancing.m…

【操作系统】Bochs安装和配置

Bochs是使用C编写的高度可移植开源IA-32(X86)PC模拟器,能在大多数流行的平台上运行。它包括模拟Intel x86 CPU、常见I/O设备和自定义BIOS。Bochs可以被编译以模拟许多不同的x86 CPU,从386早期到最新的x86-64英特尔和AMD处理器甚至…

【UE】用样条线实现测距功能(下)

目录 效果 步骤 一、实现多次测距功能 二、通过控件蓝图来进行测距 在上一篇(【UE】用样条线实现测距功能(上))文章基础上继续实现多次测距和清除功能。 效果 步骤 一、实现多次测距功能 打开蓝图“BP_Spline”&#xff0c…

RTOS的任务触发底层逻辑

(定时器用于计时和触发事件,任务则由调度器进行调度和执行:每当时钟节拍到达时,系统会触发一个称为 tick 中断的事件。当 tick 中断发生时,操作系统会在中断服务例程中执行一定的处理,其中包括更新任务的运…

MySQL的Redo Log跟Binlog

文章目录 概要Redo Log日志Redo Log的作用Redo Log的写入机制 Binlog日志Binlog的作用Binlog写入机制 两段提交 概要 Redo Log和Binlog是MySQL日志系统中非常重要的两种机制,也有很多相似之处,本文主要介绍两者细节和区别。 Redo Log日志 Redo Log的作…

JMeter压测常见面试问题

1、JMeter可以模拟哪些类型的负载? JMeter可以模拟各种类型的负载,包括但不限于Web应用程序、API、数据库、FTP、SMTP、JMS、SOAP / RESTful Web服务等。这使得JMeter成为一个功能强大且灵活的压力测试工具。 2、如何配置JMeter来进行分布式压力测试&a…

保护你的APP!快速了解如何进行APP安全性测试!

通常我们队APP所进行的安全性测试包含以下几个模块:安装包安全性、数据安全性、软键盘劫持、账户安全性、通信安全性、备份检查等。下面针对每个模块我们详细说明具体的测试方法。 安装包安全性 1、反编译 目的是为了保护公司的知识产权和安全方面的考虑等&#x…

Appium 全新 2.0 全新跨平台生态,版本特性抢鲜体验!

关于Appium V2 Appium V2 beta版本在2021年发布,从2022年1月1号开始,Appium核心团队不会再维护Appium 1.x版本了,所有近期官方发布的平台驱动(如Android平台的UIAutomator,IOS平台的XCUITest)不再兼容Appi…

相比其他关系型数据库,AntDB JDBC驱动特性有哪些不同之处

摘要:使用Java语言进行各类应用程序的快速开发成为目前比较主要且流行的开发方式。JDBC是 Java 语言中用来连接和操作关系型数据库的 API,在业务程序与关系型数据库通信时,必然会使用JDBC驱动。 本文将通过国产关系型数据库AntDB中的JDBC为大…

在PCL视图器中使用随机生成的颜色来可视化一组匹配的点对

std::vector<Eigen::Vector2d> centroids_unknown_motion_underk; std::vector<Eigen::Vector2d> centroids_unknown_motion_k; // 进行数字填充 pcl::visualization::PCLVisualizer viewer("Centroid Visualization");int id 0;// 添加 XY 坐标系doub…

中国人总爱乱吃药,这些家庭常见药我劝你别乱吃!

你可能在各种抖音快手上都看到过博主推荐生活小窍门—— 比如巧用二甲双胍减肥&#xff0c;六味地黄丸包治百病&#xff0c;阿司匹林巧治高血压…… 世上本没有神药&#xff0c;用得多了&#xff0c;也就变成神药了。 ——这句话鲁迅没说&#xff0c;也没有任何道理可言。 说…

uni-app开发小程序,利用scroll-view实现自动滚动至对应数据

uniapp scroll-view 官网 vue文件内容&#xff1a;dom: <scroll-view scroll-y :scroll-into-view"seqToView"><view class"pop-scroll"><viewv-for"(item,index) in seqList":id"seq- item":key"index"cl…

ubuntu20.04安装多版本cuda,切换版本

1. 安装cuda toolkit: 下载网站 https://developer.nvidia.com/cuda-11.3.0-download-archive 选择版本&#xff0c;这里选择11.3 wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run给cuda权限: chmod x…
最新文章