系统的请求量突然增大数倍怎么办

一般的业务服务系统大体上就是通过网络远程对DB进行读写。如果流量突然飙大,总有一个资源会遇到瓶颈。按照经验大概出问题地方是DB磁盘io、CPU、带宽、连接数、内存其中的一个或几个。

处理方法:

  1. 缓存,就是用内存来顶替一部分DB的查询+数据的处理。业务上可以把缓存分为三类:浏览器缓存,CDN和服务器业务缓存。业务缓存根据实现的结构可以分多个层级,可以用in-memory cache ,或者是分布式共享Cache(如Redis)。
  2. 服务降级:是指通过降低服务质量的方法,达到节省资源的目的。
  3. 限流:限制用户的请求流量

预先准备:

  1. 流量估算
  2. 降级方案
  3. 限流方案

相关问题:

  1. 雪崩效应:如果一个服务已经证明快挂了,就别再调用了,直接fallback。(nginx里的upstream控制有max_fails和fail_timeout处理这个问题。)
  2. 无效的服务响应:在高压下,可以简单将等待处理的服务看作是在排队,队首的请求被处理。但被最终“见”到处理逻辑的请求从队尾排到队首时可能已经过了比较长的时间,而客户端那边可能早就超时了。如果队列系统做得好,比如要处理前先猜一次是不是处理完了会超时,如果是就忽略扔掉。
  3. 大量的TIME_WAIT:如果业务服务器的压力造成服务端大量主动关闭连接,就会产生大量的TIME_WAIT状态的TCP链接。这些链接会在数分钟内像僵尸一样堆在那里,榨干所有的连接数。这种问题尤其以自研业务服务框架容易出现。
  4. 一致性:为了服务降级,可能会把用户请求放内存里缓一缓,再批量进DB。那么一旦系统出现故障,就意味着比如下单数据不一致,支付状态不一致等问题。有时,这些问题在业务上极大的影响用户的使用体验。当系统降级时,尽量保证,要不就告诉用户现在不能给你服务,要服务了结果就明确。
  5. 系统可能会临时stop the world

服务器带宽突然暴涨

问题分析:

  1. IDC带宽被占满:
  • 真实遭受DDOS攻击
  • 内部服务器中毒,大量外发流量
  • 网站元素被盗链,在门户页面被推广导致大量流量产生
  • 合作公司来抓数据
  • 购买了CDN业务,CDN猛抓源站
  1. CDN带宽异常,源站没异常:这类问题基本都是缓存在CDN的数据被频繁访问引起的
  2. CDN带宽异常,源站也异常:可能原因如公司做推广,大量数据访问,热点数据cache里不全。或CDN问题导致数据回源。影响就是带宽高,后端静态服务器及图片及存储压力大