微博红包在春节也是一个比较热门的词汇,常常涌如今各种事宜流之中,但是微博红包面临的场景比较分外,比如面临亿级用户的大规模场景,它背后的技能架构和技能构造是怎么样的呢?来自微博红包团队的技能卖力人柯立志在云栖社区2017在线技能峰会红包技能分会现场分享了微博红包背后的技能实践。
红包业务场景今年的场景新增了传送门和粉丝红包。传送门紧张是通过用户下拉feed流得到红包,可以连续抢,得到奖品。粉丝红包有口令红包和普通红包,红包的业务规模如下图所示。
红包面临的寻衅包括:单个红包数额大;亿级别用户参与,覆盖全微博用户;红包种类多,业务繁芜;整点定时抢,高并发访问量、瞬间峰值高;互动韶光短,同步更新红包状态;多机房数据同等性担保。

红包系统的整体架构包括运用层、做事层、资源层。运用层紧张是用户的入口,任何一个用户进来之后都须要对其状态进行验证,以是须要进行用户状态验证。做事层包括各个做事模块,资源层则用到了数据库、Redis、MC、行列步队等。
红包塞钱
红包塞钱实现过程是:用户通过向客户端塞钱进红包,然后利用微博支付,经由行列步队后进行拆经办事,其他用户可以进红包进行抽取。在用户进红包之前,微博已经在行列步队中做了一些拆包的做事。
红包抽奖
如上图所示,个中更新的红包状态包括用户的状态和红包剩余金额等。在红包的抽取过程中大量利用了异步处理,这样担保了用户前真个可用性。
红包拆包模型
微博拆包的金额在0.5-200元之间。最初采取了通用模型设计,担保了大额的、100旁边的金额,导致了0.5的比较多。之后,采取了基于正态分布的模型,对红包进行插值使得全体红包的金额分配更趋于合理。处理大额拆包时,做到了10万以下金额秒级可以拆。对付10万以上金额先拆分成10万以下金额再进行拆分。
特定场景选定得当实现办法
最初的实现是通过Nginx后端PHP做事以及存储资源实现的。经由调研后,采取了Nginx的高并发可用性,基于lua脚本措辞实现运用层的做事。这样能够让单台做事器的并发数量能有数量级的提升。其缺陷是对付快速业务耗费的人力本钱和调试本钱更高。
数据同等性担保
在红包分发期间,微博用到的设备包括微博自有机房、阿里云包月机房、阿里云动态扩容(根据峰值实时动态扩容)。同时,各个机房之间MC的缓存须要同步,并且同步机制须要达到毫秒级才能担保所有用户看到的红包状态均同等。缓存资源的实现通过行列步队实现,若行列步队创造缓存积压的资源比较多,可以通过实时的删写来减少(条件是三个支配都存在,如果动态扩容则删写,如果动态扩容收容则不删写)。阿里云的机器都是实时分配的,以是我们须要有快速相应的机制来更快的进行扩容和对MC缓存资源的写。
预热
春晚当天,微博红包当晚从20点开始每个整点的推送。为了减少对应接口的用户信息,提前预热了一批MAU用户,减少可能由于峰值带来用户做事系统压力,在当天预热了MAU用户数据,这样做可以担保在每个整点韶光到来之前的红包数据为热数据。
异步化
异步化便是用行列步队来处理一些类似于用户韶光比较长或者须要花费大量资源的处理。比如抽奖,在抽奖的核心逻辑里,运营可配置、用户信息、红包状态的判断均用到了异步化来验证当前的用户是否中现金、卡券或者其他奖品。用户中奖后,奖品将进入行列步队,进行现金兑账、现金进钱包、发私信,这样就给前端用户的抽奖节省了大量的韶光,使得前真个接口相应韶光非常快。
红包保障体系监控
系统保障的条件是监控,监控紧张通过五个层面来进行的。网络监控紧张是监控专线带宽,微博在春节期间大量利用阿里云的机器,对付专线的监控是有必要的。做事监控紧张是自有做事的监控,类似监控feed接口、客户端拆和抽、传送门等做事的相应韶光以及做事接口返回的状态。设备监控紧张是前端机、做事器的监控,包括CPU、内存、网卡等的监控。资源监控涉及到缓存资源、存储资源,资源也是通过网络协议进行调用的,以是网络层面的问题会导致资源的可用性降落、相应韶光变长。以是在运用层或者底层架构上都对资源所涉及的干系端口做了一些监控,比如每一次连接的相应韶光、操作的相应韶光、每一种相应韶光的占比。接口监控紧张依赖于其他接口,类似于用户信息的接口、微博钱包支付接口、卡券接口。
预案和干预手段
预案紧张做了两类,一类是能够快速扩容,由于在每一个推广的韶光段都申请了部分冗余的做事器,如果负载非常则会实时支配上去;一类是快速切换,通过切层的切换快速应对突发情形。
做事降级紧张在做事非常或者负载过高时对非核心链路进行降级。
系统性能优化性能
红包是由各个模块组成的,以是要对各个模块进行性能检测。性能检测的条件是制订性能指标,指标紧张通过相应韶光、接口输出大小制订。然后进行模块性能压测,剖析模块详细花费(韶光及输出大小),根据详细点进行模块优化,直到模块性能达到标准才停滞循环。
容量评估
根据目前运用处景用户的DAU和MAU去预估在某个韶光点最大的QPS。根据最大的QPS以及单机所承载的QPS预估运用做事器的数量。根据接口依赖程度、接口访问量占比预估每个接口输出的带宽,预算出整体的带宽占用来进行带宽方面的扩容以及预演。资源占用的评估紧张根据最大的QPS以及后端端口资源须要利用的数量来评估,担保在涌现预估范围内QPS时系统做事的稳定。