过载保护

简介:

某个线上系统平时非常稳定,当大量更新数据时,系统的服务就会严重超时。问题存在了一段时间,基本猜测系统超时和大量写入数据有关,但却无法给出确切的解释。为此已经写了2篇文章:

linux性能监控
linux的IO调度算法和回写机制

问题解释

问题的解释很简单:系统过载。由于系统定期更新大量数据,更新期间磁盘读IO性能很差,导致每个服务的时延极大增加,整个系统的吞吐量大幅降低。该系统没有采用合理的过载保护策略,导致后续的包全部超时!!!

什么情况会导致系统过载?系统处理能力 < 请求量 = 系统过载。设计系统时都需要系统的处理能力,比如每秒的处理能力、请求峰值、平均处理时延等。这3个指标可很好地估计系统最大处理能力、需要多少机器提供服务、是否需要扩容等。但评估容易只关注 请求量峰值,而忽略系统处理能力的变化。从公式上看,系统处理能力降低同样会造成过载。

过载成因基本就2种:超过硬件系统极限能力、超出软件系统的极限能力。超出硬件能力比较少见,重点关注软件系统:操作系统和应用软件。操作系统负责统一调配和管理硬件资源,应用系统通过系统调用使用机器的硬件资源,当对资源的使用超过操作系统所能承受的上限,将导致整体处理能力急剧下降。应用系统一般包括下列四种类型的瓶颈,某些应用系统可能同时包含2个及2个以上的瓶颈因素:

CPU(计算密集型)
MEMORY(内存消耗型)
LOAD(大并发型)
IO(包括两类,磁盘IO密集型如DISK、DB;网络IO密集型:流量、连接数等)

系统瓶颈理论上是系统中最慢的系统资源,比如上述诸多资源中的一种,在突破瓶颈阀值时系统出现拐点,性能会急剧下降(底层原因比如进程调度频繁、网络拥塞、随机磁盘IO导致文件系统cache命中率下降及磁盘物理IO频繁---机械臂移动、SWAP换入换出频繁等等),因此识别系统各环节处理能力及其瓶颈至关重要。

问题的解决

解决该问题大概有以下几种思路:

1)分散写;
2)写时不提供服务;
3)过载保护:丢弃超时的请求。

一种简单的过载保护

linux的网络包带有时间戳,可通过ioctl获取网络包的时间戳。该时间戳表示网络包接收时的时间戳(本机)。因此比较当前时间和网络包的时间戳即可判断请求是否超时,若超时,直接丢弃。这个办法可快速清空超时的请求,避免由于处理超时请求,导致后续的请求无法被正常响应。

 示例代码:

复制代码
int GetPkgTime(int sockfd, struct timeval *pkgTv)
{
    struct timeval tv;
    int iRet;
    
    iRet = ioctl(sockfd, SIOCGSTAMP, &tv);
    if(iRet < 0)
    {
        return -1;
    }   
    
    *pkgTv = tv;

    return 0;
}

int IsPkgTimeout(int sockfd, int ms )
{
    struct timeval tv;
    if( GetPkgTime( sockfd, &tv) != 0){
        return -1;
    }

    long pastTime = PostTime(&tv);
    if( pastTime >= ms * 1000){
        return 1;
    }

    return 0;
}
复制代码
本文转自 zhenjing 博客园博客,原文链接:  http://www.cnblogs.com/zhenjing/archive/2012/06/26/overload.html   ,如需转载请自行联系原作者
相关文章
|
SQL 监控 关系型数据库
Binlog详解
Mysql binlog是二进制日志文件,用于记录mysql的数据更新或者潜在更新(比如DELETE语句执行删除而实际并没有符合条件的数据),在mysql主从复制中就是依靠的binlog。
2893 0
|
算法 Linux 编译器
【C++ 泛型编程 进阶篇】 C++ 模版元编程 类型转换 std::decay 全面教程
【C++ 泛型编程 进阶篇】 C++ 模版元编程 类型转换 std::decay 全面教程
675 0
|
JavaScript Java 大数据
转行程序员4年半,被裁了
转行程序员4年半,被裁了
265 2
|
消息中间件 Java 关系型数据库
线上远程京东技术三面+HR面,五月中旬成功就职京东,月薪30K
由于今年的疫情影响,很多互联网大厂公司都采用线上远程面试的方法来挑选人才,很多幸运的小伙伴也是已经拿到大厂的offer了,今天给大家分享的是我之前公司同事拿到京东offer的朋友的面试经历,疫情虽然已经好转,但是还有很多朋友是在线上办公的,然后我去问到了我这个朋友京东面试的一些真题,以及我整理的一些真题分享给大家,希望可以还在找工作的伙伴提供到帮助,同时也祝大家都能收获自己的心仪 “offer” 吧!
|
人工智能 程序员 区块链
程序员转行能做啥?
程序员转行能做啥?
1030 0
|
存储 缓存 负载均衡
从DynamoDB 2022 Paper回看Lindorm的一些设计
一向低调的AWS终于在2022年发了一篇关于DynamoDB的论文——《 Amazon DynamoDB: A Scalable, Predictably Performant, and Fully Managed NoSQL Database Service》。
从DynamoDB 2022 Paper回看Lindorm的一些设计
黄金比例做logo设计
全世界通用的万能设计法则:黄金比例分割。 黄金分割是古希腊人发明的几何学公式。黄金比例是人眼视觉最协调最美观的一种构图方式,是国际通行的美学法则。
黄金比例做logo设计
BXA
|
消息中间件 弹性计算 Kubernetes
扩展你的Kubernetes集群:理解水平扩展与垂直扩展
Kubernetes是一个用于管理容器化应用程序的开源平台。它提供了自动化部署、扩展和操作应用程序所需的资源,并对容器的运行状态进行监控和修复。Kubernetes 能够节省大量时间和精力,让开发人员能够专注于应用程序的开发和部署。
BXA
818 0
|
设计模式 Java 关系型数据库
【Java设计模式 经典设计原则】 八 经典设计原则小结
【Java设计模式 经典设计原则】 八 经典设计原则小结
493 0
|
消息中间件 JavaScript 小程序
聊聊大厂都在用的 JavaAgent 上
聊聊大厂都在用的 JavaAgent 上