第一部分绪论
、聊呗红包随着业务规模的不断扩大,微信红包对后台系统架构的可用性要求也越来越高。为保证微信红包业务的体验,红包后台系统进行了一系列高可用性优化设计。
这篇文章介绍了在微信红包后台系统中高可用的实践经验,主要包括后台的选择化设计、异步化设计、订单异地存储设计、存储层的容灾设计和并行扩展等。观众可了解微信红包后台架构的设计细节,共同探讨高可用性设计实践中遇到的问题及解决方案。
附加说明:相应的演讲 PPT详见《微信红包系统可用性设计实践(PPT)[附件下载]》。
2.分享者
方乐明:目前担任微信支付应用产品系统的负责人,主要从事微信红包、微信转账、微信群收款等支付应用产品的系统设计,可用性提升,高性能解决方案的设计,已为多年来,负责微信红包系统的性能优化和稳定性提升,取得了良好的效果。
3.系列文章
❷系列文章目录:
社会红包技术解密(一):社会红包技术解密(三):社会红包技术解密(五):社会红包技术解密(三):社会红包技术解密(四):社会红包技术解密(三):社会红包技术解密(五):社会红包技术解密(五):社会红包技术解密(六):社会红包技术解密(六):社会红包技术解密(七):社会红包技术解密(八):社会红包技术解密(七):社会红包技术解密(八):社会红包技术解密(八):社会红包技术解密(八):社会红包技术解密(九):谈谈手 Q春节红包设计、容灾、运维、架构等技术解密):社会红包技术解密(十)社会红包技术解密(十一):社会红包技术解密(十二):社会红包技术解密(十三):社会红包技术解密):社会红包技术解密(十四):社会红包技术解密(十五):社会红包技术解密)。
❸其他相关文章:
科技过去:“QQ群”和“微信红包”怎么来的?" QQ18年:解密8亿月活的 QQ后台接口隔离技术""8.89亿月活的超级 IM微信如何进行 Android端的兼容性测试""开源 libco库:单机千万连接,支撑着微信8亿用户的后台框架基础[源码下载]""微信技术总监谈架构:微信—大道至简(视频+ PPT):微信技术总监:8亿月活、单机千万连接的后台解决方案——大道至简(PPT)""微信朋友圈海量技术之道 PPT (附件下载)"[有视频]"快速裂变:见证微信强大后台架构从0到1的演进历程"(一)"快速裂变:微信朋友圈海量技术之道 PPT [附件下载]"
微信红包简介介绍、聊呗红包
从2014年发展到现在,微信红包经历了几个年头。整个系统的可用性在这几年中带来了巨大的提升。2015年初,每天晚上九点,是微信红包业务的高峰期,系统经常出现性能问题。直到今天,即使在假日高峰时期,系统也没有问题。
它
礼盒给人的印象——产品形态(点击查看本图来源)
如上图所示,微信红包的业务包括包、发、抢、拆、查询等,发红包和收红包的次数是其中最关键的一步。
微信红包是用微信支付的商家,微信红包是卖钱的商家。用户在微信红包平台上用微信支付购买红包,将红包中的钱分给相应的微信群成员。用户在群中抢红包可以得到微信零钱。在此过程中,微信红包与微信支付的关系就是商家与第三方支付平台的关系。
与一般商家与微信支付的交互作用一样,微信红包与微信支付的交互作用也要经过六个步骤。当用户发红包时,进入微信红包的下一个订单,系统会记录用户发红包的次数、红包的金额、红包的数量以及要发送到的微信群。接着微信红包系统要求微信支付服务器下订单,用户通过微信支付完成付款。
付款成功后,微信后台支付系统将通知成功付款的微信红包信息发送到微信红包后台系统,成功付款的微信红包信息将被推送到微信群。群内用户就可以抢到红包了。微信红包与微信支付的关系也就是这个互动过程。
微信红包系统的体系结构
5.1微信红包的系统流程
图片来源:微信红包系统流程(点击此处查看原文)
以上就是微信红包系统方面的流程,主要的业务流程有包、发、抢、拆四个操作,每个操作都包含了几个关键步骤。
打包红包:系统给每个红包分配一个唯一的 ID,即红包,发送订单号,然后把用户的红包数目,红包数量写进存储,最后到微信付款下订单。
发送红包:用户通过微信支付完成支付,通过后台的微信红包系统收到了微信支付成功的通知。礼包系统将用户发送的礼包订单状态更新为已支付,并写下用户发送礼包的记录(用户发送礼包记录,就是在微信钱包里,查看到的用户每年发送和接收的礼包总数)。最终微信红包后台系统向微信群发送红包消息。
抢购:指微信群中的用户收到红包消息后,点击抢购的消息。在这一过程中,微信红包后台系统会检查红包是否已被抢走、是否过期、是否被抢走。
拆封红包的操作最为复杂,包括:
一是查询红包发单情况,判断用户是否可以拆包,然后计算出本次可以拆包的红包数量;二是写出抢红包记录。若将拆分红包过程,类比为一个秒杀活动的过程,相当于扣库存和写出秒杀记录的过程;3)更新库存对应更新红包发送订单,写出秒杀记录对应写出收到红包的记录;4)还需写出用户总体的红包领取记录;5)最后请求微信支付系统为拆分红包用户转帐零钱,成功更新拆分红包订单状态为已转账成功。
5.2微信红包总体架构
图片来源:图片来源于网络(图片来源于网络)
上面的例子,就是微信红包的体系结构。包含微信统一接入层,下面是一个 API的微信红包系统,包括发、抢、拆、查红包的详细信息,用户的查询列表。其次是封装微信红包关键业务的逻辑服务;最后是数据存储层,微信红包最主要的数据是订单数据,包括发红包订单和拆红包订单两部分。数据访问层在业务逻辑与存储服务器之间,其最重要的作用是封装数据库操作的域逻辑,使业务逻辑服务无需考虑 MySQL连接管理、性能、容灾等问题。
在微信红包数据访问热的今天,随着时间的流逝会急剧下降,即数据访问时间段非常集中,一般红包发三天后,99%的用户都不会去点开这个红包。所以微信红包系统采取按时间做冷热数据分离,在提高冷热数据存取性能的同时降低数据存储成本。
该数据平台用于分析计算红包数据,如朋友圈中的文章、统计某一年1月至2017年1月一位用户抢红包总数、全国排名情况、发红包次数最多的城市等。另一项功能是调节,红包订单和微信支付订单需要调节,以确保最终资金的一致性;订单数据和订单缓存需要调节,以保证数据的完整性;订单数据和用户收发记录需要调节,以保证用户列表的完整性。
第六,微信红包系统的实用性实践
6.1系统可用性影响因素
影响系统可用性的因素可以分为两类:
非计划的一种;非计划的一种。
外部因素很多,系统使用的任何东西都可能导致失败,都可能影响到系统的可用性。在这种情况下,可以说故障是不可避免的,系统的运行必然会产生故障,特别是服务器在数千台时。规划中的影响因素,主要有升级相关因素,运营相关操作,日常备份等。通过精心设计方案,这类影响因素可避免对可用性产生影响。
6.2微信红包系统的可用性设计方向
根据以上两种分析结果,可以总结出微信红包后台系统可用性设计的方向。即在无法避免意外失败的情况下,尽量减少意外失败对可用性的影响。而计划中的大多数日常维护则可通过设计方案而避免影响到平行扩展,这就是平行扩展在存储层中的含义。
以下就减少故障影响和微信红包系统的并行扩展两个方面进行分析。
第一是减少意外故障的影响,着重说明了订单 DB发生故障时订单存储层如何减少对红包系统可用性的影响。
6.业务逻辑层-部署方案设计
业务逻辑层的第一个部署方案。商业逻辑层是无状态的,微信红包系统的商业逻辑层,被部署在两个城市,也就是两地,每个城市至少部署三个园区,也就是三个 IDC。每项服务都需要保证三个 IDC均衡部署。此外,三个 IDC的总体服务能力需要冗余的三分之一,当一个 IDC失败时,服务能力仍然是足够的。因此达到 IDC故障是不会影响可用性的。
6.4业务逻辑层-异步设计
*业务逻辑层——异步化(点击此处查看出处)
二是异步设计;如上图所示,微信红包的某些步骤既没有实时完成,也不会影响用户使用红包的体验。例如拆分红包,一般业务流程都很长,但关键步骤只有订单相关的几个。对于转换零钱,写红包记录等操作不需要实时处理。使用者抢到红包后,一般不会实时去钱包查看微信零钱,而是在微信群里点开信息查看此次抢到的金额以及其他人抢到的金额。因此拆分红包时只需从 cache查询用户是否拆分了红包,然后写下拆分红包的订单记录,更新拆分红包订单,其他操作就可以异步化了。当然,并非每一个企业都可以进行异步设计,需要进行业务分析,判断非关键性步骤是否能够实现异步化,并通过异步调节来保证最终的一致性。
订购存储层——早期的架构(点击这里可以看到这个图表的来源)
其次,微信红包的订单存储设计。上面的模型显示了2014年微信红包的存储层。当业务逻辑层请求数据层操作时,通过订单号 hash路由到订单 SERVER。定单 SERVER连接到每个 MYSQL数据库组。
该系统在发送微信红包时会生成一个惟一标识,使用序列号服务生成惟一 ID,之后将拼接成三个微信红包订单分库表的标识。因此,总共可以划分100个逻辑库,每一个包含10个表格。100个逻辑库平均分布在10组物理数据库中,每组数据库存储10个逻辑库。
该体系结构的最大问题是,当一组数据库发生故障时,会影响其他数据库。2014年至2015年间,微信红包的增长速度特别快,规模的扩大也跟不上业务的增长速度。当数据处理速度减慢, MYSQL队列上的拆红包事务操作时,一组数据库的性能会出现瓶颈。因为所有的10台 DB机都连接到所有的订单 SERVER上,所以所有的订单 SERVER都会被拖走,从而影响红包的总体可用性。该体系结构的另一个问题是不方便扩展,稍后将讨论。
、聊呗红包是聊呗平台的红包游戏功能
为了解决数据库之间的相互作用,需要在数据库之间进行隔离
----------------------------------------------------------------------------------
《浅谈IM系统的架构设计》
《简述移动端IM开发的那些坑:架构设计、通信协议和客户端》
《一套海量在线用户的移动端IM架构设计实践分享(含详细图文)》
《一套原创分布式即时通讯(IM)系统理论架构方案》
《从零到卓越:京东客服即时通讯系统的技术架构演进历程》
《蘑菇街即时通讯/IM服务器开发之架构选择》
《腾讯QQ1.4亿在线用户的技术挑战和架构演进之路PPT》
《微信后台基于时间序的海量数据冷热分级架构设计实践》
《微信技术总监谈架构:微信之道——大道至简(演讲全文)》
《如何解读《微信技术总监谈架构:微信之道——大道至简》》
《快速裂变:见证微信强大后台架构从0到1的演进历程(一)》
《17年的实践:腾讯海量产品的技术方法论》
《移动端IM中大规模群消息的推送如何保证效率、实时性?》
《现代IM系统中聊天消息的同步和存储方案探讨》
《IM开发基础知识补课(二):如何设计大量图片文件的服务端存储架构?》
《IM开发基础知识补课(三):快速理解服务端数据库读写分离原理及实践建议》
《IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token》
《WhatsApp技术实践分享:32人工程团队创造的技术神话》
《微信朋友圈千亿访问量背后的技术挑战和实践总结》
《王者荣耀2亿用户量的背后:产品定位、技术架构、网络方案等》
《IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?》
《腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面》
《以微博类应用场景为例,总结海量社交系统的架构设计步骤》
《快速理解高性能HTTP服务端的负载均衡技术原理》
《子弹短信光鲜的背后:网易云信首席架构师分享亿级IM平台的技术实践》
《知乎技术分享:从单机到2000万QPS并发的Redis高性能缓存实践之路》
《IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列》
《微信技术分享:微信的海量IM聊天消息序列号生成实践(算法原理篇)》
《微信技术分享:微信的海量IM聊天消息序列号生成实践(容灾方案篇)》
《新手入门:零基础理解大型分布式架构的演进历史、技术原理、最佳实践》
《一套高可用、易伸缩、高并发的IM群聊架构方案设计实践》
《阿里技术分享:深度揭秘阿里数据库技术方案的10年变迁史》
《通俗易懂:如何设计能支撑百万并发的数据库架构?》
>> 更多同类文章 ……
附录2:大厂技术分享
《微信朋友圈千亿访问量背后的技术挑战和实践总结》
《腾讯技术分享:腾讯是如何大幅降低带宽和网络流量的(图片压缩篇)》
《腾讯技术分享:腾讯是如何大幅降低带宽和网络流量的(音视频技术篇)》
《微信团队分享:微信移动端的全文检索多音字问题解决方案》
《腾讯技术分享:Android版手机QQ的缓存监控与优化实践》
《微信团队分享:iOS版微信的高性能通用key-value组件技术实践》
《微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?》
《腾讯技术分享:Android手Q的线程死锁监控系统技术实践》
《微信团队原创分享:iOS版微信的内存监控系统技术实践》
《让互联网更快:新一代QUIC协议在腾讯的技术实践分享》
《iOS后台唤醒实战:微信收款到账语音提醒技术总结》
《腾讯技术分享:社交网络图片的带宽压缩技术演进之路》
《微信团队分享:视频图像的超分辨率技术原理和应用场景》
《微信团队分享:微信每日亿次实时音视频聊天背后的技术解密》
《QQ音乐团队分享:Android中的图片压缩技术详解(上篇)》
《QQ音乐团队分享:Android中的图片压缩技术详解(下篇)》
《腾讯团队分享:手机QQ中的人脸识别酷炫动画效果实现详解》
《腾讯团队分享 :一次手Q聊天界面中图片显示bug的追踪过程分享》
《微信团队分享:微信Android版小视频编码填过的那些坑》
《微信手机端的本地数据全文检索优化之路》
《企业微信客户端中组织架构数据的同步更新方案优化实战》
《微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉》
《QQ 18年:解密8亿月活的QQ后台服务接口隔离技术》
《月活8.89亿的超级IM微信是如何进行Android端兼容测试的》
《以手机QQ为例探讨移动端IM中的“轻应用”》
《一篇文章get微信开源移动端数据库组件WCDB的一切!》
《微信客户端团队负责人技术访谈:如何着手客户端性能监控和优化》
《微信后台基于时间序的海量数据冷热分级架构设计实践》
《微信团队原创分享:Android版微信的臃肿之困与模块化实践之路》
《微信后台团队:微信后台异步消息队列的优化升级实践分享》
《微信团队原创分享:微信客户端SQLite数据库损坏修复实践》
《腾讯原创分享(一):如何大幅提升移动网络下手机QQ的图片传输速度和成功率》
《腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(下篇)》
《腾讯原创分享(三):如何大幅压缩移动网络下APP的流量消耗(上篇)》
《微信Mars:微信内部正在使用的网络层封装库,即将开源》
《如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源》
《开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石 [源码下载]》
《微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解》
《微信团队原创分享:Android版微信后台保活实战分享(进程保活篇)》
《微信团队原创分享:Android版微信后台保活实战分享(网络保活篇)》
《Android版微信从300KB到30MB的技术演进(PPT讲稿) [附件下载]》
《微信团队原创分享:Android版微信从300KB到30MB的技术演进》
《微信技术总监谈架构:微信之道——大道至简(演讲全文)》
《微信技术总监谈架构:微信之道——大道至简(PPT讲稿) [附件下载]》
《如何解读《微信技术总监谈架构:微信之道——大道至简》》
《微信海量用户背后的后台系统存储架构(视频+PPT) [附件下载]》
《微信异步化改造实践:8亿月活、单机千万连接背后的后台解决方案》
《微信朋友圈海量技术之道PPT [附件下载]》
《微信对网络影响的技术试验及分析(论文全文)》
《一份微信后台技术架构的总结性笔记》
《架构之道:3个程序员成就微信朋友圈日均10亿发布量[有视频]》
《快速裂变:见证微信强大后台架构从0到1的演进历程(一)》
《快速裂变:见证微信强大后台架构从0到1的演进历程(二)》
《微信团队原创分享:Android内存泄漏监控和优化技巧总结》
《全面总结iOS版微信升级iOS9遇到的各种“坑”》
《微信团队原创资源混淆工具:让你的APK立减1M》
《微信团队原创Android资源混淆工具:AndResGuard [有源码]》
《Android版微信安装包“减肥”实战记录》
《iOS版微信安装包“减肥”实战记录》
《移动端IM实践:iOS版微信界面卡顿监测方案》
《微信“红包照片”背后的技术难题》
《移动端IM实践:iOS版微信小视频功能技术方案实录》
《移动端IM实践:Android版微信如何大幅提升交互性能(一)》
《移动端IM实践:Android版微信如何大幅提升交互性能(二)》
《移动端IM实践:实现Android版微信的智能心跳机制》
《移动端IM实践:WhatsApp、Line、微信的心跳策略分析》
《移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)》
《移动端IM实践:iOS版微信的多设备字体适配方案探讨》
《信鸽团队原创:一起走过 iOS10 上消息推送(APNS)的坑》
《腾讯信鸽技术分享:百亿级实时消息推送的实战经验》
《IPv6技术详解:基本概念、应用现状、技术实践(上篇)》
《IPv6技术详解:基本概念、应用现状、技术实践(下篇)》
《腾讯TEG团队原创:基于MySQL的分布式数据库TDSQL十年锻造经验分享》
《微信多媒体团队访谈:音视频开发的学习、微信的音视频技术和挑战等》
《了解iOS消息推送一文就够:史上最全iOS Push技术详解》
《腾讯技术分享:微信小程序音视频技术背后的故事》
《腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面》
《微信多媒体团队梁俊斌访谈:聊一聊我所了解的音视频技术》
《腾讯音视频实验室:使用AI黑科技实现超低码率的高清实时视频聊天》
《腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践》
《手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)》
《微信技术分享:微信的海量IM聊天消息序列号生成实践(算法原理篇)》
《微信技术分享:微信的海量IM聊天消息序列号生成实践(容灾方案篇)》
《腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践》
>> 更多同类文章 ……
原创互联网未来世界企业政府通讯APP办公节约成本类似马云思维-哇谷IM
公有云和私有云之间有什么区别?类似融云、环信云、网易云、哇谷云?
IM云系统即时通讯公有云、私有云、企业云、海外云-哇谷IM团队
im即时通讯社交软件APP红包技术分析(五):微信红包、聊呗红包、诚信红包、高并发技术
im即时通讯-微信红包、支付宝红包、聊呗红包、诚信红包、谈功能逻辑、容灾、运维、架构等。Q红包
更多文章
.
企业即时通讯服务 | 商用红包功能构架 | 哇谷IM首页 | JM沟通IM下载 | IM功能与价格 | 即时通讯动态 | 热门动态 | 关于哇谷 |联系我们
本文原创出自哇谷IM团队机器人,如有任何问题,请联系哇谷官方客服www.wagukeji.com www.juemigoutong.com