系统的请求量突然增大数倍怎么办
一般的业务服务系统大体上就是通过网络远程对DB进行读写。如果流量突然飙大,总有一个资源会遇到瓶颈。按照经验大概出问题地方是DB磁盘io、CPU、带宽、连接数、内存其中的一个或几个。
处理方法:
- 缓存,就是用内存来顶替一部分DB的查询+数据的处理。业务上可以把缓存分为三类:浏览器缓存,CDN和服务器业务缓存。业务缓存根据实现的结构可以分多个层级,可以用in-memory cache ,或者是分布式共享Cache(如Redis)。
- 服务降级:是指通过降低服务质量的方法,达到节省资源的目的。
- 限流:限制用户的请求流量
预先准备:
- 流量估算
- 降级方案
- 限流方案
相关问题:
- 雪崩效应:如果一个服务已经证明快挂了,就别再调用了,直接fallback。(nginx里的upstream控制有max_fails和fail_timeout处理这个问题。)
- 无效的服务响应:在高压下,可以简单将等待处理的服务看作是在排队,队首的请求被处理。但被最终“见”到处理逻辑的请求从队尾排到队首时可能已经过了比较长的时间,而客户端那边可能早就超时了。如果队列系统做得好,比如要处理前先猜一次是不是处理完了会超时,如果是就忽略扔掉。
- 大量的TIME_WAIT:如果业务服务器的压力造成服务端大量主动关闭连接,就会产生大量的TIME_WAIT状态的TCP链接。这些链接会在数分钟内像僵尸一样堆在那里,榨干所有的连接数。这种问题尤其以自研业务服务框架容易出现。
- 一致性:为了服务降级,可能会把用户请求放内存里缓一缓,再批量进DB。那么一旦系统出现故障,就意味着比如下单数据不一致,支付状态不一致等问题。有时,这些问题在业务上极大的影响用户的使用体验。当系统降级时,尽量保证,要不就告诉用户现在不能给你服务,要服务了结果就明确。
- 系统可能会临时stop the world
服务器带宽突然暴涨
问题分析:
- IDC带宽被占满:
- 真实遭受DDOS攻击
- 内部服务器中毒,大量外发流量
- 网站元素被盗链,在门户页面被推广导致大量流量产生
- 合作公司来抓数据
- 购买了CDN业务,CDN猛抓源站
- CDN带宽异常,源站没异常:这类问题基本都是缓存在CDN的数据被频繁访问引起的
- CDN带宽异常,源站也异常:可能原因如公司做推广,大量数据访问,热点数据cache里不全。或CDN问题导致数据回源。影响就是带宽高,后端静态服务器及图片及存储压力大