关于微信红包的分享和感悟

    微信红包在2014年的春节可谓大放异彩,创下了新业务上线的流量奇迹,然而喜人的战绩背后是夜以继日的方案优化、容灾部署,新年之际的通宵守候,24小时紧急预案。短短一个半月时间,一个6亿用户的平台上诞生了一个每分钟482万人流量的业务,每分钟收发的红包在2.5万个以上,数据异常率仅为0.1%,如此短的开发时间,如此高的量级,又牵涉到资金的数据一致性,还要兼顾用户体验,微信红包是互联网时代敏捷开发当之无愧的精品。其产品理念、系统设计原则、容灾部署等多个方面都有许多值得互联网从业者值得借鉴的地方。也值得在项目上线之际花点时间去听听分享。

    关于产品理念。研发的负责人说:“红包的原则是在满足核心刚性需求的前提下提供有损服务,部分需求甚至很大一部分需求可以柔性实现。”这是在紧张的开发时间和有限的资源双重约束下,深入分析用户心理和需求,按照功能的优先级设定实现级别,确保在提供用户最核心的功能前提下,又能支撑大业务量的平稳运行。例如春节期间抢到或者收到的红包是不会实时进入零钱账户的,用户拆开红包以后会看到稍后入账的提示。之所以不能实时入账是因为抢红包的频率太高,每分钟高达2.5万次,如果每一笔都实时入账,那么后台的账务系统不出几分钟就会崩溃,客户端在拆红包时也会出现频繁的长时间的等待延迟,用户体验骤降。而用户的核心诉求是能够快速、无误的抢红包,并不会时时刻刻紧盯着自己的零钱账户是不是多了刚刚抢到的红包钱,所以后台业务系统(和业务逻辑有关,区别于账务系统,账务系统和资金操作有关)的做法是当客户端提交一个拆红包的请求时,接口层只是将请求数据存入一个公共的异步入账队列,然后直接返回客户端抢红包成功,但此时红包钱并没有进入用户的账户,而是由后台脚本系统的批处理脚本从异步入账队列中拉取入账请求数据,按照账务系统能够承受的频率发起入账请求,所以从用户拆红包到零钱账户余额增加有一定的延迟,但是这并不影响用户使用红包的核心功能。另外一个例子是春节期间的红包记录只能拉取两页,服务器不会吐出更多的数据给客户端,因为大量的记录查询会给数据库带来巨大的压力,如果数据库频繁服务于查询业务,那么势必会影响红包的收发业务,而用户查看红包记录只能看到前两页并不会影响用户的正常使用,后来的统计情况是实际上大部分用户并不关心红包记录列表,有那时间不如多抢点。分享人说的有损服务让我感触颇大,以前做产品时总是想得太大,想高举高打,结果大多失败。究其原因就是因为没有抓住用户的核心诉求,如果你去做用户调研,用户一定会告诉你他希望看到记录列表,希望红包实时到账,因为用户只关心业务功能,而不是系统是否能够平稳的运行。但是我们设计和开发时必须考虑系统的高可用性、可靠性和可维护性,如果有取舍地为用户提供核心功能,部分业务功能体验会差一点,但是能保证核心功能的正常体验、系统的稳定运行;如果为用户提供全部功能,很可能一开始反响很好,几个小时之后,请求量短时间内迅速达到峰值,所有的功能都无法正常使用,甚至数据都会发生灾难性丢失,产品和团队可以直接拜拜了。

    关于系统设计原则。大的原则是能做异步的绝不做同步,因为同步没有办法保证快速响应客户端,而用户对于抢红包这件事情是绝对不能等的,如果拆个红包要好几秒,那估计连汤都不剩了。其次是保证数据的最终一致性,而不是实时一致性,这个和上面的异步入账的例子一样,某个时刻用户红包记录里显示抢到了一定金额的红包,但是零钱账户里金额没有增加,这个是某一时刻的数据不一致,但是我们保证,在稍后的某个时刻,批处理脚本一定会将用户拆红包时的请求数据入账,最终数据会一致,这个也是基于系统资源有限,用户的侧重点来设计的。其次是在每一个模块的接口层做流量限制,不允许一定时间内超过最大限制次数的模块调用,以免将庞大的流量传递到数据库层,造成数据库服务宕机,给容灾带来压力,如果容灾方案稍微考虑不当,可能就不仅仅是压力的问题,而是数据丢失、服务停止的故障。

    关于容灾部署。微信红包在上海和深圳两个地区四个数据中心都部署有服务,可以支持一键切换流量入口,就是随时可以把本来应该发到上海机房的请求转到深圳机房,这个得益于公司统一接入平台的成熟。另外每台数据库机器都会有对应的两个备份机器,每一次更新数据库的时候,都会先更新两台备份机器,然后更新实时线上机器,三台机器的更新作为一个数据库事物提交,如果某一台机器更新不成功,那么本次更新操作全部回滚,三台机器的数据都恢复到更新前的状态,这样是为了保证当实时线上机器宕机的时候可以马上将一台备份机器升级为线上机器继续服务,所以备份机器也必须保存和线上机器一样的业务数据。另外一个牵涉到物理布线的就是同一模块的服务不能全部部署在同一个机架的机器上,以防机架出现问题导致某个模块服务没有可用的机器。

    本次胡说八道就到这里了,希望对丫头在电信的云计算业务运营工作以及后续可能的运维工作甚至长远的产品工作有点借鉴作用,欲知后事如何,请微信回复一个大写的赞!

转载于:https://www.cnblogs.com/zengyulin/p/7271614.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值