服务器过载保护(上篇)——过载介绍
本文由腾讯WeTest团队提供,更多资讯可直接戳链接查看:http://wetest.qq.com/lab/
微信号:TencentWeTest
1 何为过载
“过载”一词,在海量服务的后台开发中,基本都会遇到。何为过载,即当前负载已经超过了系统的最大处理能力。例如,系统每秒能够处理的请求是100个,但实际每秒的请求量却是1000个,就可以判定系统出现了过载。
过载的定义看似简单,但却是处理过载问题的关键。对于任何其他问题,同样得抓住问题的本质,方可不偏离问题核心,万变而不离其宗。
2 过载后果
“过载”的出现,会导致部分服务不可用,如果处置不当,极有可能引起服务完全不可用,乃至雪崩。
我们的系统中,由于是单线程状态机的处理模式,顺序处理所有链接的缓冲区消息,当出现处理能力的下降或者请求量大幅增加,导致处理能力小于请求量的情况下,消息就会在系统缓冲区中堆积,造成消息处理的延迟会持续增加,在正式环境中,链接数目较多,系统缓冲区较大,最终会导致消息处理延迟大到不可接受的程度,最终会导致处理的都是无效消息,造成服务不可用。
当然具体的业务需要具体的分析,把握住问题的影响,才能够做到一切尽在掌握,根据“墨菲定律”,通常对后果的判断不应过于乐观,谨慎行事、考虑充分才能够做到胸有成竹。
3 过载原因
“过载”的出现,不同系统模型的具体原因都会有所不同,例如CPU跑满,频繁读写导致IO瓶颈,内存耗尽,请求量突增等等。但究其根本原因,可以归结为两点:
1、处理能力的下降;
2、请求量的上升。
只有对自身系统的有更深层和透彻的了解,才能更好地考虑如何处置问题。“头疼医头,脚疼医脚”的处理问题方式,只能解决一时之需,对症下药,才是解决问题的根本之道。
任何问题的保护行为可以依据事件发生的阶段分为:
1、 发生前,预防;
2、 发生时,处置;
3、 发生后,恢复。
但在保护的措施中,都和业务的模型有着相关性,没有完全统一的方案,适合自己的才是最好的。
4 过载预防
在过载发生前的预防,就需在系统设计之初,依据具体的业务模型可以考虑预防过载的措施:
1、 优化服务处理流程,降低处理资源消耗,提升自身处理能力;例如CPU消耗型服务,是否可以考虑优化算法,提升处理能力。
2、 分离处理模块;将负载分担到不同的模块或者服务器;例如IO是瓶颈的服务,考虑是否可以将IO模块进行分离。
3、 负载均衡;将请求量分流,降低单服请求量。
4、 轻重模块分离;重要模块单独部署和处理,防止模块之间的互相影响。
5、 前端防御;在前端控制请求频率,缓解后端压力;例如客户端可以做保护措施,控制聊天频率,点击操作失败,可以延时一段时间,才允许用户继续点击;前端服务发现后端出现过载问题,可选择性拒绝服务,降低后端压力。
6、 使用缓冲区;缓冲区的使用,可以帮我们抵挡请求量的抖动,但缓冲区的使用同样也有很多技巧,并非越大越好。首先需要考虑内存,cpu等资源的开销,业务的模型是否需要这么大的缓冲区。例如缓冲区过大,处理完整个缓冲区,都需要几十秒,而前端等待超时则为几秒,那么每次处理缓冲区的内容,都是旧的,前端认为都是超时,服务完全不可用。另外是后端却又处理成功,会导致系统信息不对称,从而导致更为严重的问题,例如,在游戏中购买道具的场景,前端扣用户的钱,认为超时失败而不给用户发对应的物品,后端却又执行成功了,严重运营问题就此产生。
7、 做好监控,及时告警;例如当CPU达到80%时,当处理请求超出一定阈值时,及时告警,做好扩容,优化等其他准备。
当然依据业务模型的不同,还有很多预防的措施,依然是前述做到知底,才能够找出适合自身的方法。
5 过载保护
处理过载的方法有许多,适用于不同的业务场景,并无绝对的最优方案,合适的才是最好的,但能匹配上“合适”一词,是对系统整体和经验的一个考验。下面介绍一些常用的处理方案以及我们是如何做的:
Ø 请求量阈值控制
在系统部署上线之前,预估好系统的处理能力,限定最大同时能够处理的请求量、流量或者链接数。当请求量快接近于最大处理能力时,则告警,超过范围,则触发拒绝请求机制。由此可见对于阈值的设置是一个很关键的环节,阈值过高,依然可能导致过载,阈值过低,则又导致负载上不去。阈值的设置也会是一个不断调优的过程。该方法的优点和缺陷都很明显。
优点:识别和处理简单;
缺点:阈值的设定需要一定的经验,会有一定的难度,同时如果处理能力发生变化时,阈值就很难动态发生变化。
Ø 监控系统资源
服务器监控CPU,内存等资源的使用情况,设定阈值,超出阈值,则可以认为过载,从而触发拒绝请求机制。
优点:使用动态的资源数据,从相对根本的原因上识别过载,而无需过多关心具体的业务处理;
缺点:一是处理相对复杂;二是在某些场景下,资源数据的耗尽并不意味着出现过载的情况。例如服务开了较大的内存池,看起来内存资源耗尽了,实际上负载是足够的,又如现在都是多核服务器跑着多进程或者多线程的服务,单一的CPU耗尽也不能够代表服务就出现过载,但又可能产生过载,这就和具体业务有关;三是在某些场景下,出现过载的情况,也不一定会耗尽资源,例如当前所有的服务都在等待之中(可能是后端的回复或者其他),同样也不会对CPU、内存、io、网络等资源造成影响,但依然进入了过载。总体来说该方式适合的场景相对会简单点。
Ø 检测请求到达时间
依据请求处理的时延来判断是否过载。记录请求到达的时间戳,和处理请求结束的时间戳,得到请求到达自身服务器处理的时延,超出阈值,则可判定为超时失效,可以直接丢弃。使用独立模块读取系统缓冲区中数据,打上时间戳,存入消息缓冲区,在处理时,超过一定时延的请求,则拒绝处理,因为可以认为即使处理了也是无用的。从中可以看出时间戳很关键(为啥会单独提出这个问题,因为在后续的方案设计中,时间戳依然是解决过载问题的关键点,此处先卖个关子)。
A、 时间戳如果使用本地读取时刻调用系统的时间函数获取,就没有考虑消息包到达系统缓冲区的时间,因此是万万不能这样做。
B、 到可以通过ioctl调用SIOCGSTAMP的接口,获得时间戳,但这会加大系统开销,原因是每次recv完,都需要重新设置一下ioctl一次。并且不是线程安全的。
C、 使用socket选项SO_TIMESTAMP,通过带外数据获取到数据到达系统缓冲区的时间。
其处理方式如下图所示:
通过这种方式已经能够很好地解决负载问题,通过如此,并不需要设置过于繁琐的配置或者去识别过载的问题,目前此方法在SPP的框架中在使用。个人觉得可能存在的一些问题在于:
1、 完全使用时间戳过期的方式来判断,并不一定适合所有场景,假设处理耗时过长,而在缓冲区中也呆了较长时间,但请求量并不大,服务器未过载,在处理一些需要强写入的情况下,单靠该机制也会稍许欠妥。但如果加入一些协议上层机制,告诉该消息务必执行,也是可避免的。
2、 在出现过载的情况之下,很可能会导致整体的服务都会产生一个固定的延时,因为每次抛弃到可执行的范围内,至少会有一个超时时间范围内的延时,如果是较长的服务链的话,最前面的等待服务很可能会出现超时,因此其延时的设置相对也很困难,过小就太过灵敏,过大就会出现刚所述的问题。
3、 该方式只是管理了到达本服务器缓冲区之后的问题,并没有考虑整条服务链上的延时,很可能到达本服务器缓冲区时,就已经过期了,并且有可能这些数据在对端缓冲区已经产生了堆积,但到本端,并不会判断其过期。
4、 剩下还有一些内容可以做更多优化:另外SO_TIMESTAMP使用的是系统时间,会受系统时间修改的影响,但这个问题也不大,因为即使修改了,影响的只是本次系统缓冲区的数据。其他可以考虑业务的轻重程度,做按服务来丢弃。
本文由腾讯WeTest团队提供,更多资讯可直接戳链接查看: http://wetest.qq.com/lab/
微信号:TencentWeTest
服务器过载保护(上篇)——过载介绍相关推荐
- 网站服务器过载,服务器过载保护
服务器过载保护 内容精选 换一换 在不影响业务的情况下,通过容灾演练,模拟真实故障恢复场景,制定应急恢复预案,检验容灾方案的适用性.有效性.当真实故障发生时,通过预案快速恢复,提高业务连续性.存储容灾 ...
- 我的世界linux服务器怎么加种子,我的世界怎么获得服务器种子?服务器种子获得方法介绍...
我的世界是一款可玩性极高的沙盘类游戏,粉丝可是非常多的,很多玩家玩游戏只关心自己的号怎么样,不关心其他的,就连自己地图的种子号都不知道,也不会查找,所以小编今天就向大家介绍一下获得服务器种子教程,希望 ...
- 阿里云服务器购买该如何选择?阿里云服务器购买步骤流程介绍...
很多第一次购买阿里云服务器,不知该如何选择适合自已的服务器.其实购买阿里云服务器,主要是根据自已网站的流量来决定的. 如果网站流量不大,一天只有几百ip,一般选择1核cpu,1G内存,1MB带宽就可以 ...
- 服务器性能测试典型工具介绍
服务器性能测试典型工具介绍 众所周知,服务器是整个网络系统和计算平台的核心,许多重要的数据都保存在服务器上,很多网络服务都在服务器上运行,因此服务器性能的好坏决定了整个应用系统的性能. 现在市面上不同 ...
- 华为rh5885服务器oid_华为RH5885HV3服务器,故障面板指示灯介绍
介绍RH5885H V3的基本功能特点. 随着技术与应用的发展,对服务器的可靠性.性能.可维护性.成本等方面都提出了更高的要求,糟糕的可靠性.落后的性能.极低的利用率.高昂的管理成本都成为用户业务开展 ...
- 服务器迁移域名和证书要改什么用,服务器数据迁移方案介绍 怎样更换网站域名?...
服务器数据迁移方案介绍 怎样更换网站域名? 分类:云服务资讯 编辑: 浏览量:100 2021-07-12 08:32:44 由于企业在不断发展,现有的网站可能无法满足企业的需求,此时就需要对网站的硬 ...
- 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍
C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...
- 美国Linux服务器系统内核的详细介绍
美国Linux服务器的系统是能够处理复杂应用程序的稳定操作系统之一,适用于创建复杂架构,其系统有一个内核,被称为美国Linux服务器系统的核心,是操作系统的主要部分,可以完全控制系统中的所有内容,同时 ...
- dota自走棋寻找不到服务器,《DOTA自走棋》服务器不对怎么办 服务器不对解决方法介绍...
导 读 DOTA自走棋玩家们在游戏的时候,对于服务器无法定位怎么办,很多的用户都不太了解,下面DOTA自走棋服务器不对解决方法介绍就为你们带来了相关内容,想了解的小伙伴就一起来了解一下吧. 服务器不对 ...
最新文章
- 噪声dba是什么单位_在职DBA : 工作多年为什么还是选择报读工商管理博士
- uboot的常用命令详解
- 计算机系统与环境,COMPUTERS ENVIRONMENT AND URBAN SYSTEMS《计算机、环境与城市系统》SSCI论文投稿_万维书刊网...
- WPF编游戏系列 之六 动画效果(1)
- 浅析Linux Kernel 哈希路由表实现(一)
- 神器 Nginx 的学习手册 ( 建议收藏 )
- python按行读取excel文件_python3读取excel文件只提取某些行某些列的值方法
- 怎么样成为一个高手--有悟
- 面试机试之求解字符串熵值
- Spring中各个jar包的作用
- java Socket 编程实例
- React 混合中英文计算字符长度
- 用python帮别人写了个文字识别程序
- 关于音频EQ、DRC、等响度、3D环绕音、虚拟低音、变音、AEC、AGC、ANS等解释
- 单侧置信上限matlab,单侧置信限.PPT
- 流氓与骗子的斗嘴(转)
- MVC模式已死?何不试试MOVE
- 计算机内存容量影响游戏的吗,内存容量对整机游戏性能影响有多大?看完秒懂...
- Lepus安装与配置
- 电脑配置单3(自用勿删)
热门文章
- linux vi 替换
- Qt高质量的开源项目合集
- 鸿蒙定时重启软件,谁有自动定时关机开机的软件!求助!
- java计算机毕业设计html5健身房信息管理系统源码+数据库+系统+lw文档
- python量化策略——改进的美林时钟轮动策略(三)
- 毕索大学计算机科学怎么样,毕索大学计算机硕士介绍
- Java—sql关于不同条件下合并结果
- [渝粤教育] 中国地质大学 工业通风及除尘 复习题 (2)
- amcharts php,AMCHARTS+MYSQL+PHP的使用实例
- murmur3 php,murmur: 更快更好的哈希函数