接口测试 关于双十二崩盘的一些思考

乙醇 · 2018年12月14日 · 最后由 zyanycall 回复于 2018年12月21日 · 1621 次阅读

原文发布于:https://mp.weixin.qq.com/s/LJMi_2svfiTHyuKRZ9YH9g

双十二的时候我们的一个重要业务崩盘了。

原因其实很简单,就一句话,流量太大导致某个中间件接入层的 HA proxy 满载,中间件不可用,整个业务基本瘫痪。

从测试的角度去总结一下,大概以后可以有如下的改进。

技术方案评审时就考虑高并发问题

我们这次的事故是因为比较乐观,可能技术方案评审的时候就开始盲目乐观了。

其实流量增长的速度有可能是我们难以去精确预估的,所以技术架构设计的时候我们就要提前准备。

对于测试同学来说,大家可以简单记住下面一些要点。

  • 降级。在大流量的情况下,是否能通过一些机制让服务降级,从而保护整个系统的稳定性。举个例子,可能一般情况下,用户购买商品下一个订单就可以马上看到订单的详情,但是在秒杀场景中,用户可能在下单很长时间之后才能看到订单,这就是一种服务降级的表现。

  • 削峰。把流量的高峰削平,不让突如其来的大流量对系统产生破坏性的影响。举个例子,12306 抢票的时间点是分散的,大概每个小时抢一次,这就防止了一次性放出所有票导致所有用户同时抢票带来的流量高峰,这是一种业务上的削峰。

  • 限流。这个很好理解。一些第三方 api 会限制每分钟调用的次数就是这个道理。

  • 熔断。高并发时,如果一些 api 无法访问后,能不能自动不去访问这些有故障的 api,从而保证主流程的顺畅和稳定。

  • 故障摘除。一些容器如果被击垮,能不能动态去摘除这些节点,从而保证整个系统可用。

了解架构

事故之前,我们其实对整个架构能支撑的容量做了计算,结论是在当前架构下是可以撑住双 12 的峰值的。但是千算万算却没想到中间件在接入层之前有 HA 做负载均衡。这个 ha 实际上是单点,容量有限,如果提前了解该架构,并且进行扩容的话,事故大概也不会发生。

测试同学在看架构的时候可以先无脑关注单点问题。某个服务或中间件是不是单点?如果是,那么单点挂掉之后对整个系统可用性会不会造成影响?搞清楚这个问题的答案对系统高可用非常关键。

提前做好紧急预案

问题总会有可能发生的,因此提前准备好预案非常重要。

这次事故发生之前,我们并没有准备应急预案,因此,当临时发现了无法动态扩容的 HA 单点时,我们基本上只能眼睁睁的看着系统挂掉,什么事情都做不了。

不要迷信动态扩容

动态扩容属于亡羊补牢,在问题发生时候的那几秒,扩容往往是无法迅速完成的,因此提前计算好容量才是关键。

最后,下次的活动是在明年的双十一,嗯,这个锅要背一年了。

惭愧,惭愧。

共收到 14 条回复 时间 点赞

目前能想到的一个比较好的办法是,先买个关公,活动之前大家一起拜一拜。以及活动之前大家朋友圈转锦鲤。

一般都是两台或更多 HAProxy 服务配合 keepalived 一起分发,keepalived 负责 High Availability,HAProxy 负责 Loadbalance,但是实际工作的 HAProxy 服务只有一台,的确是单点,需要带宽和性能非常高

所以,最后的解决方案是啥?HAProxy 服务硬件扩容?HAProxy 服务前面加请求队列管理?

更主动有效的解决方法:线上全链路性能测试

测试环境只能评估出业务系统的容量,只有线上全链路才能暴露出中间件的问题。这次是 HA 中间件的问题,可能其他中间件的问题还没暴露出来哦

眼睁睁的绝望

乙醇 回复

没毛病,我们都是这么干的,23333

_ooOoo_
o8888888o
88" . "88
(| -_- |)
 O\ = /O
___/`---'\____
.   ' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
         .............................................
          佛祖保佑       永不宕机     永无BUG 

还是老问题,出了事故,开发和测试会怎么分锅?

johngao 回复

好吧,我倒把运维给忘了。
不过他这个帖子上的情况,好像跟运维没多大关系的吧。

秦川风 回复

我这个思维得改改,哈哈。
出了问题第一时间不能想着甩锅分锅😅 应该想着怎么解决。
还是要树立起合作的主题思维的😂

看一下 Sentinel,应该直接满足你上面这些。(https://mp.weixin.qq.com/s/yCRPr_U0XlBMoVLTXNFj4Q)

另外广告一下,多谢:
https://www.jianshu.com/p/cd6388627f64 一个测试同学的,互帮互助。

秦川风 回复

说具体问题具体分析吧 ,为什么不是运维的锅,哈哈

血的教训~

单点!!!好绝望。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册