00:00
今天下午跟大家分享的主题是微信团队是如何从0~1实现有把握的微信春晚摇一摇红包系统的,回忆一下春晚的活动有什么样的活动形式呢?张文瑞,微信高级工程师,微信接入系统负责人,一直从事后台系统设计开发,早期涉足传统行业软件,后投身互联网,作为微信最早的后台开发之一,见证了微信从零开始到逐渐发展壮大的过程。
01:00
V0.1原型系统如上图所示,摇那个手机的时候,会通过客户端发出一个请求,接入服务器,然后摇一摇服务,进行等级判断,判断以后把结果给到后端,可能摇到拜年或红包。假设摇到红包上面有logo和背景图,客户端把这个logo和背景图拉回去,用户及时拆开红包,拆的请求会来到红包系统,红包系统进行处理之后会到支付系统,到财付通的转账系统,最终用户拿到红包,我们面临怎样的挑战,当时预估。
02:00
一下当时峰值达到1000万每秒,通过图对比一下原型系统有哪些问题呢?我们是如何解决这些问题的?这里有个数据,2月9号到2月18号下发资源65个,累计流量3.7PB,峰值流量ETBS通过这种方式解决了下载资源的问题。再就是外网接入质量,在上海跟深圳两地建立了18个接入集群,每个城市有三网的介入,总共部署了638台接入服务器,可以支持同时14.6亿的在线。但是在我们内部怎么把请求转给摇一摇服务,摇一摇处理完还要转到后端,怎么解决呢?
03:00
先看红包如何发放,再就是怎么样保证红包不被多领或恶意领取。每个客户领三个红包,这是要做限制的,但这是有代价的,就是存储的代价。怎样跟春晚现场保持互动,需要解决的问题有两个,一是要迅速,不能拖太长时间,比如现在是刘德华唱歌,如果给出的明星摇一摇还是上一个节目不太合适,要求我们配置变更需要迅速。二是可靠,通过这种方式可以迅速的在1000台服务器成功,是不是能够达到配置一定能够用。
04:00
不一定,春晚现场是不可控的,万一指令没有发出怎么办?如果六个配置服务都挂了怎么办?从上一个节目切到下一个节目的时候,发生这种问题不是太大,但是主持人在10:30的时候,如果摇红包一摇啥都没有,这就怒了,口播出不来也就挂了,怎么做的呢?主持人肯定有口播,口播的时间点我们大致知道,虽然不知道精确的时间点,比如彩排的时候告诉我们一个时间,后来变了,我们大致知道时间范围,可以做倒计时的配置,比如10点半,不管你有没有口播,我们都要发红包了。前面讲了怎么在系统解决流量的问题,请求量的问题,最重要的一点是我们预估是1000万每秒,但如果春晚现场出来的是2000万、3000万或4000万怎么办?是不是整个系统就挂掉了?
05:00
进一步优化V0.5测试版,一、核心体验是什么?二、如何确保拆分享红包的用户体验?我们称之为铁三角的东西,拆分享红包等于用户操作加后台业务逻辑,这是我们能做到的最高程度了,还能做的更极致吗?我们又做了一次异步,分两部分,一、1个是业务逻辑校验,这个红包是不是这个用户的?二、还有一个透传队列,把这个数据再丢到后边。其实可以相信本机的处理一般是可以成功的,只要做好性能测试,基本上是靠谱的。
06:00
继续打磨V0.8预览版技术复盘包括两部分,一,有问题的时候可以把异常问题看出来,二,2是很正常,好的时候是不是跟想象的一样,需要对正常情况下的数据做预估的,重新评估,看看是不是符合预期。我们进行了两次预热,一、一次是摇了3.1亿次,峰值5000万亿分钟,100万每秒,跟我们估算的1000万每秒差很远,当时只是针对iPhone用户放开一个小红点,你看到的时候可以抢发放红包,5万每秒,春晚当晚也是5万每秒。二、后面又发了一次,针对前面几个问题再做一次正式交付,V1.0正式版,当年2月18号跑出来的结果。
07:00
果是这样的,当时摇了1亿次,峰值是亿每分钟,1万每秒。
我来说两句