社交软件红包解密技术(2):支付宝、微信、聊呗、诚信红包解密技术从0到1 搭建自带抢红包神器的聊天软件平台、实现超级红包群,发随机红包数字金额

时间:2020-10-20

语音会议

一、开场白谢谢!我是腾讯WXG技术架构部的张。今天下午我和大家分享的主题是:支付宝、微信、聊呗、诚信团队是如何实现“确定”的支付宝、微信、聊呗、诚信春晚从0到1的红包系统的  回忆一下春节晚会的活动。有什么样的活动?当时,我们直接重用客户来摇动入口,并专门为春节晚会定制了一个页面,可以摇动出“压岁钱”和“红包”  下面的红包肯定是大家感兴趣的,也是今天下午介绍的主要内容  精彩的活动背后一定有一个独特设计的系统。支付宝、微信、聊呗、诚信春节晚会红包系统就是这种情况  二、分享者张:支付宝、微信、聊呗、诚信高级工程师,支付宝、微信、聊呗、诚信接入系统负责人  一直从事后台系统的设计和开发,早期涉足传统行业软件,然后加入互联网  作为支付宝、微信、聊呗、诚信最早的发展背景之一,它见证了支付宝、微信、聊呗、诚信从无到有、逐渐成长和发展的过程  张也在支付宝、微信、聊呗、诚信上分享了其他技术文章。您可能还会感兴趣:“快速裂变:见证支付宝、微信、聊呗、诚信强大后端架构从0到1的演变(1)”“快速裂变:见证支付宝、微信、聊呗、诚信强大后端架构从0到1的演变(2)”“社交软件红包技术解密(3):支付宝、微信、聊呗、诚信撼动红包雨背后的技术细节”三。系列文章目录:“社交软件红包技术解密(1):QQ红包解密”技术实现等。“社交软件红包解密技术(2):支付宝、微信、聊呗、诚信红包解密技术从0到1的演进”(*本文)“社交软件红包解密技术(3):支付宝、微信、聊呗、诚信红包雨背后的技术细节”“社交软件红包解密技术(4):支付宝、微信、聊呗、诚信红包系统如何应对高并发”“社交软件红包解密技术(5)”支付宝、微信、聊呗、诚信红包系统如何实现高可用性?社交软件红包解密技术(6):支付宝、微信、聊呗、诚信红包系统存储层架构的演进实践?社交软件红包解密技术(7):支付宝红包的海量高并发技术实践?社交软件红包解密技术(八):微博红包综合解密技术方案?社交软件红包解密技术(9):手q春节红包架构的设计、容灾和运维等。“社交软件红包解密技术(十):2020年春节红包Q客户端技术实践”其他相关文章:“技术过去:QQ群和支付宝、微信、聊呗、诚信红包是怎么来的?”QQ 18年:每月解密8亿QQ后台服务界面隔离技术" "每月活动8.89亿的超级即时通讯支付宝、微信、聊呗、诚信如何进行安卓兼容性测试" "开源libco库:单机连接,支持支付宝、微信、聊呗、诚信8亿用户后台框架基石[源代码下载]""支付宝、微信、聊呗、诚信技术总监谈架构:支付宝、微信、聊呗、诚信道——大道至简(全文演讲)、 “支付宝、微信、聊呗、诚信技术总监谈架构:支付宝、微信、聊呗、诚信道——大道到简(PPT讲座)[附件下载]”“如何解读”支付宝、微信、聊呗、诚信技术总监谈架构:支付宝、微信、聊呗、诚信道——大道到简”“支付宝、微信、聊呗、诚信背后大用户后台系统存储架构(视频+PPT)[附件下载]”“支付宝、微信、聊呗、诚信异步转型实践:8亿个月上线, 单机连接背后的后端解决方案“支付宝、微信、聊呗、诚信朋友圈大规模技术PPT[附件下载]”架构:3名程序员实现支付宝、微信、聊呗、诚信朋友圈,日均发布量10亿条(含视频) “快速裂变:见证支付宝、微信、聊呗、诚信强大后端架构从0到1的演变(1)”“快速裂变:见证支付宝、微信、聊呗、诚信强大后端架构从0到1的演变(2)”“支付宝、微信、聊呗、诚信背后的技术问题”红包照片““支付宝、微信、聊呗、诚信技术共享:支付宝、微信、聊呗、诚信海量即时通信聊天消息序列号生成实践(算法原理)”“支付宝、微信、聊呗、诚信技术共享:支付宝、微信、聊呗、诚信海量即时通信聊天消息序列号生成实践(荣蓉)”从理论到实现:0.1原型系统4.1。 概述让我们来看看这个系统。当时,我们做了一个原型系统,相对简单,已经实现了所有的功能  如上图所示,当摇动手机时,它将通过客户端发送请求,访问服务器,然后摇动服务,并判断等级。经过判断,结果将被发送到后端。它可能被摇至新年或红包,假设它被摇至红包。上面有一个LOGO和背景图片。客户把这个LOGO和背景图片拉回来,用户及时打开红包。拆除的请求将提交到红包系统。经过红包系统处理后,将进入财运通的支付系统和转账系统。最后,  拿到钱后,它只是其中的一份,而且还有几份可以分享。我们称之为“分裂的红包”,并通过信息系统转发给朋友或团体。团体中的朋友和人可以再玩一轮  整个过程分为以下几类:资源流、信息流、业务流和资金流。今天,我们主要讨论资源流和信息流  原始系统看起来很简单。你能修改它并在春节晚会上得到它吗?绝对不是。  它有什么问题,为什么我们不能用它?在回答这个问题之前,我想请大家看看我们面临的挑战  4.2。我们面临哪些挑战?第一个挑战很容易想到。用户请求的数量非常大。当时,预计会有7亿观众,支付宝、微信、聊呗、诚信用户相当多。当时,估计峰值达到每秒1000万次。将其与图片进行比较(见下图)。左边是春节门票,一秒钟内要求的峰值是120,000。二是支付宝、微信、聊呗、诚信系统。支付宝、微信、聊呗、诚信系统会发送一条带有小峰的信息。当时,峰值是每秒330,000次,较高的是估计值。  这项活动与春晚有着密切的互动关系,存在着许多不确定的因素,具体体现在几个方面:1)在发展过程中,我们的活动如何与春晚配合还没有确定,可能会持续到春晚开始。显然,我们的客户和系统在那之前不会被释放。这时,我们的发展会遇到更多的问题;2)在春晚的过程中,由于春晚是直播节目,节目可能会变,持续时间会变,顺序会变,活动过程会与春晚紧密联系在一起,这也是一个具有挑战性的不确定因素;3)然后我们的系统被定制,特别为春节晚会定制。它只能运行一次。这是一个巨大的挑战。运行一次的系统不能长时间通过。很难检查其中的任何问题。之后,它要么成功,要么失败;4)因为春节晚会有大量的观众,全国人民都在观看并密切关注它。我们必须确保成功。如果我们搞砸了,我们会在全国人民面前搞砸  如此大规模的活动在行业中是罕见的,缺乏经验和借鉴  我们还需要做什么样的准备来确保万无一失,确保所使用的大多数经验都是正确的,还有许多问题需要我们不断探索和思考  如果原型系统不能被重用,那么如果被重用,它可能会死亡  4.3原型系统有什么问题?原型系统有什么问题?1)第一个问题:就流量带宽而言,大量用户请求会产生大量带宽,估计峰值带宽为每秒3000pb。假设我们的资源是无限的,可以满足带宽需求,也会有问题。用户摇动后,会有一个等待下载的过程;2)第二个问题:在接入质量方面,我们估计约有3.5亿同时在线,特别是当外部网络波动时,如何保证用户体验不被破坏,系统正常运行;3)第三个问题:请求量非常大,每秒1000万。如何切换到摇动服务,摇动服务也面临1000万个请求。我们的系统必须同时面对两个一千万的请求。这不依赖于机器。每个人都有分散的经验。当提出如此大量的请求时,任何波动都会带来问题。这是一个巨大的挑战。  4.4我们如何解决这些问题?鉴于以上几点,让我们详细看看我们是如何做到每一点的  让我们先来看看信心指数,看看我们有多大信心把这个系统带到春节晚会。这里的指数是10。如果这个系统在春节晚会上使用并且成功,概率是10%  当然,我们的系统不能建立在运气的基础上。我们做什么呢1)带宽利用率:在带宽方面,客户端可以获得多种结果,并且大多数结果都是静态资源。我们可以预先制作静态资源并发送给客户端,并在后台提供资源推送服务。在客户端获得列表后,它可以先下载它,然后在空闲时间调用资源。  遇到几个问题,资源交付的问题需要增量发送;2)资源更新;3)下载失败:资源下载失败。如果失败了,我该怎么办?4)资源覆盖率:依靠本系统下载资源的用户,如覆盖率只有20%和30%,两件事没有意义,覆盖率应该达到90%左右;5)离线下载:下载离线资源。万一有人修改内容,可能会产生意想不到的结果。如何确保离线资源的安全  这里有一个数据。从2月9日到2月18日,共分配了65个资源,累计流量为3.7PB,峰值流量为1 TB/s  这样,下载资源的问题就解决了  还有外部网络接入的质量。上海和深圳已经建立了18个接入集群,每个城市都有三个网络。共部署了638台接入服务器,可同时支持14.6亿在线服务  所有用户的请求都将进入访问服务器,我们已经建立了18个访问集群,以确保如果出现一个问题,用户可以通过另一个访问  但是,我们如何在内部将请求转移到shake服务,然后在shake之后将其转移到后端,以及如何解决它呢?解决这个问题成本很高,需要大量资源。最后,我们选择了移除shake服务,取消每秒1000万的请求,并将该服务转移到access服务  除了处理摇动请求外,所有支付宝、微信、聊呗、诚信的消息和消息都需要转移,因为这种接入服务本身,摇动的逻辑,因为时间比较短,如果消息也受到影响,那就不值得蜡烛了  然而,这只有一个优势。我们的接入服务架构有助于解决这个问题  在这个接入节点中它被分成几个部分  一个负责网络输入输出并提供长链接。用户可以通过长链接发送信息。稍后,他们可以将请求转移到另一个模块,即访问逻辑模块。通常,它们提供转发功能。现在,可以插入访问逻辑  这还不够。例如,如果您现在进行一些更改,您仍然需要在线更新。摇晃活动的形式尚未确定,需要在中间进行修改。但是,线上的模块不正确。我们将再次分割访问逻辑,将逻辑相对固定、较轻且可以在本地完成的事情,以及不需要网络交互的事情放入访问服务。  另一个涉及网络交互、需要频繁更改且处理复杂的是代理。这样,访问的逻辑可以被内置和动摇,并且访问服务本身的逻辑不会受到太大的破坏  解决了这个问题后,接入的稳定性问题也就解决了。后一个问题是如何玩抖,如何玩红包,如何保证红包在红包过程中是安全的,而红包涉及到钱。钱不能开玩笑  另一个问题是如何与春节晚会保持互动。春节晚会现场直播。我们如何与现场直播联系起来  首先看看红包是如何分发的  如上所述,抖动请求实际上是在访问服务中发出的,并且红包也是在访问服务中发出的  为了在红包过程中不依赖于该系统,我们在红包系统中生成红包种子文件,将其划分到各个接入服务器中,并在各个接入服务器中部署一个特殊的红包文件  红包不能发两次。需要考虑红包的发放率。用户必须拆除红包。如果它被拆除,它必须被再次抢劫。我们需要精确的控制,以确保所有请求都在红包制度的可接受范围内  在这个过程中还有另一个风险。在用户摇动红包后,可能会有一些分裂的红包。他也不能分享它。如果他不分享,就不会浪费。它可以回收利用,并将在当地收回  这部分是因为它比较小,而且问题不大,因为所有的红包都已经寄出去了,只是补充了一句  我们在这里拿到了红包  然后是如何确保红包没有被收到或恶意收到。每位顾客都会收到三个红包。这是一个限制,但有一个价格,即存储的价格  当我们在协议中后端服务访问的抖动文件中发送一个红包时,我们写下了用户收到它的情况。当客户再次发送握手请求时,我们会进行检查。这是一个小把戏。这种方式解决了用户最多只能接收三个,企业只能接收一个限制的问题。  但这只能解决真正客户的问题。恶意用户有可能在没有真实限制的情况下绕过您的限制  我该怎么办?一种方法是在代理中,我们可以通过检查这台机器的数据来实现目标。有638个接入服务。如果我们被迫连接到不同的机器,我们可以连接长的、短的或连接到另一个服务器并连接到不同的地方。  另一个问题是海上战术。有些人用几万或几十万的数字抢劫,而所有的数字都是你的。我们做什么呢这不是一个好方法。使用大数据分析来查看用户的行为。你通常会提高这个数字吗?如果你正常地提高号码,你将登记它  如何与春节晚会保持互动?有两个问题需要解决:1)要快,不能拖得太久。例如,刘德华现在正在唱歌。如果给定的星抖动或先前的程序不适合,我们需要快速改变配置;2)可靠  我们怎么做?在春节晚会上,我们过去特别有同学。他们在电脑上安装了系统,可以在后台与我们互动。程序已更改,更改请求已发送到后台  我们部署了两套,一套在深圳,一套在上海。在这种配置中,我们还准备了三步服务,可以使用。同时,我们可以同步这些数据。这些数据也可以分发给所有访问机器。它将在过去同步,不是以一种方式,而是以三种方式  这样,它可以在1000台服务器上快速成功实施。它可以配置和使用吗?不一定。春节晚会的场景无法控制。如果指令没有发布怎么办?如果所有六个配置服务都挂起了呢?从上一个节目切换到下一个节目并不是什么大问题,但是如果主持人在10点30分不打破红包,他会生气的。如果嘴巴不广播,它就会挂掉。  怎么做?主持人必须进行口头广播。我们通常知道口头广播的时间点。虽然我们不知道确切的时间点,例如在排练时告诉我们一个时间,但后来它改变了。我们大致知道时间范围,并可以配置倒计时,如10: 30。不管你是否播出,我们都会收到红包。  如果节目延迟太久,你的红包将在十分钟内寄出,然后你就无法撼动它。在这种情况下,我们做了修正:在节目中,我们不断修正倒计时时间,设定策略,并设定一个过程。你应该在半小时内通知我这个时间,因为它是估计的。程序越晚,设置的时间范围就越精确。提前告诉我们,我们可以调整它。  当时,场景是在春节晚会的小会议室里。我看不到小会议室里的场景。我也在电视上看过。结果,电视没有信号,所以我瞎了。我不知道现在发生了什么,我很着急。幸运的是,后来天气变好了。后续程序已被更正。最后,我们准确地抓住了当时的红包  我谈到了如何解决系统中的流量和请求量问题。最重要的一点是,我们估计它是每秒1000万次,但是如果春节晚会带来2000万、3000万或4000万次呢?整个系统都挂了吗  我们只是采用过载保护。过载保护的中心点是两点。前端保护后端,而后端拒绝前端:1)一个是在客户端嵌入一个逻辑,每次它被震动成一个请求,它将每十秒或五秒发送一个请求,这可以大大减轻服务器的压力,这只会发生在几个点上;2)一个是无法访问服务、服务访问超时和服务速度限制  实时计算访问负载,查看CPU负载,并在连接点向该服务器的用户返回一些信息,也就是说,您必须限制速度,即您使用的速度限制,这样,当时有4000万用户。当我们颤抖的时候,我们仍然可以握住它。  V.进一步优化:0.5测试版这是我们的0.5测试版,我们的信心指数是50。为什么只有50%的把握?我们以前解决的问题是解决用户可以摇动红包而服务器不会崩溃的问题,但这是摇动红包的第一步  后面还有几个步骤,红包必须被拿走和分享。分享后,其他人可以抓住它。这种体验是有保证的  经过简单的分析,我们可以发现前面是我的操作,后面是我朋友的操作  这里有一个机会。你可以做一些服务。一旦出现问题,就可以使用它,并且可以延迟它  剩下的问题是确保我能很好地操作,有些问题可以推迟。如果有一个延迟,这意味着有一个时间差来处理那件事  1)什么是核心体验?在这里,我们需要确保成功,并确保体验完全正常。在确保成功的情况下,上述原型系统解决了晃动红包的问题,剩下的就是打开红包和分享红包  如何确保用户打开红包和分享红包的体验?2)如何确保用户打开/共享红包的体验?移除红包和共享红包可以被剪切,可以被剪切成两部分:1)一部分是用户操作,点击共享红包按钮;2)然后是转移  对我们来说,这足以保证前一点。核心体验设计再次缩小范围,以确保用户能够成功操作这一步骤  如何确保它?我们称之为“铁三角”,拆除/共享红包=用户操作+后台业务逻辑  这是我们能做到的最高水平  3)你能做到极致吗?但是我们可以做得更好。前一个用户似乎成功了,但是输入有点晚,用户感觉不到  如果我们的异步队列在这里挂起,或者网络不可用,概率相对较低。我们有三个数据中心,挂一个也不是什么大问题  如果真的不起作用呢?我们再次进行异步,分为两个部分:1)一个是业务逻辑,验证这个红包是否属于这个用户;2)还有一个透明的传输队列,该数据被抛出。事实上,我可以相信,只要性能测试基本可靠,这台机器的加工一般是可以成功的。  当以后出现问题时,我们用户的体验基本上不会受到损害,确保大多数用户的体验都是好的  第六,继续完善:v0.8预览版我们做了一个0.8的版本,预览版,信心指数70,我们认为这个东西有70%的把握可以成功。  众所周知,设计并不等于实现,甚至设计的最佳实践也有问题和失败  在正式发布之前,我们必须确保:1)这是压力测试的整个过程;2)这是一个特殊的代码审查;;3)这是一种内部练习;4)在线预热;5)是转售和调整  技术审查包括两个部分:1)当出现问题时,您可以看到异常问题;2)其次,这是正常的。跑步时,它和想象中的一样。有必要在正常情况下重新评估数据,看它是否符合预期  我们已经预热了两次:1)有一次,震动了3.1亿次,峰值为5000万分钟每秒100万次,远远低于我们估计的每秒1000万次。那时候,它只对iPhone用户开放,放开一个小红点。当你看到它的时候,你可以抓起它,每秒钟发5万个红包,春节晚会也是每秒5万个;2)稍后再次发送,并针对前面的问题再次发送  七.官方发布:在完成这两个连接后,1.0版的官方版本将在2月18日的春节晚会上接受真正的测试  这是1.0的官方版本,信心指数达到80。我们认为80%是可以做到的  剩下的20%在哪里?10%的人在现场,现场不可能一帆风顺。场景可能摇晃得很高,但后面到处都是火。10%的人在现场处理后有更好的计划和解决方案,另外10%的人不如人。也有可能所有用户都受到一个小点的影响,我们很难控制它。  完美基本上是不可能的,剩下的10%就是保持幸运  那一年的2月18日竞选失败的结果是这样的。当时,它震动了110亿次,峰值为每分钟8.1亿次,每秒钟1400万次  我今天和你分享它。  谢谢大家  (原始链接:点击此处进入)八。跟进:回答文章中的热点问题问题问题1:第一个是有一个压力测试。压力测试是如何完成的?我们怎么能模拟这么大的数量呢?还有两件事我不太明白。用户被禁止反复刷红包的地方将会调出用户发送的红包的历史记录。这地方是不是每次他们要求的唯一一个点?张:首先,回答你的压力测试问题。压力测试分为几个阶段。有一个压力测试工具。压力测试工具达到所需的压力。有了这个东西后,有一个压力测试的全过程。从一切事物的起点开始,整个过程可以串连起来。按下压力测试工具时,它必须按下网络系统。我们离开了测试集群,让同一个机器按下它。结果能和我们相匹配吗?  此外,我们的访问,如果没有真正验证每秒1000万次,可以由一台机器测试,但它更危险  我们在客户身上扣动了扳机  问题2:事实上,发送了1000万个请求?张:不一定是每秒1000万  我们部署了几个集群,每个集群中有几组机器,以确保部件正常  对于恶意收集的第二个问题,实际上没有这样的请求。第一部分是通过Cookie,另一部分是通过本地代理。它是通过本地计算、本地访问和功能内存实现的。它不需要到后面去访问。客户请求需要转到后端才能访问。  问题3:收集的数据量不是很大吗?张:有些用户可能会摇晃几下  总结一下这里的整个悬挂是没有问题的,它也不是完全不受影响的。当它面对用户时,它会被破坏,比如破解协议。这部分数据不同步。假设此服务已挂起,或者同步网络有问题。一般来说,不会有问题。你不能让用户摇动十个红包,大多数用户不能摇动十个红包,其他用户不能。  其他层是渐进的,第一个独立的和跨机器的。前一层不依赖于后一层。我们挂断电话是可以接受的。  问题4:最终分配取决于红包制度。红包系统每秒处理多少个红包?张:红包在领取处发放,红包不参与发放  用户移除红包的动作是进入红包系统。我们在这里输入的量是每秒50,000,这是为了让用户将红包震动到50,000。红包系统本身预设超过十秒钟  问题5:还有一个与产品相关的问题。您已经使用了Cookie和独立验证,但是可靠性不高。在这种情况下,你怎么能保证你的设计能够承受呢?你怎么能保证分析产品?一个用户只能收到三个红包。假设此时有六个人?张:有三个红包,用户可以摇,但他还是可以拿  问题6:他得到的三个红包与哪一个有关。你是为他计算还是为他计算?是这样吗?张:对  问题7: 600台服务器同时被访问。如果它们在短时间内被访问,会怎么样  张:你不能和一个真正的客户做这件事。他一定是用他自己的自动机或模拟器同时模拟了它  因此,我们对产品的承诺是,普通用户保证能收到三个红包,每个企业最多只能收到一个,但如果有恶意用户,我们将永远提高对抗水平,但道路是一英尺高,他将永远找到办法得到它。我们依靠后一种机制,即多台机器共享数据来获取数据。  在99.999%的情况下,这可能是好的,但有一点可能挂了。如果我们挂了,我们会牺牲那部分,没有办法。  因为资源不是无限的,你可以用有限的资源做到最好  问题8:我刚刚听说支付宝、微信、聊呗、诚信朋友圈里会有四个国际数据中心。当我连接到哪个数据中心写入数据时,我将写入数据,然后与其他数据中心同步。当红包发出时,我如何保证有这么大的数额?  张:我们不需要同步  用户只连接到一个数据中心,并划分用户。该用户可能属于上海或加拿大。如果你在上海,你只能连接到上海  数据本身不需要同步  我们的方法是这样的。我们计算每秒将发行50,000份,并计算每台机器将发行多少。那台机器可以根据那个数量发行  没有必要在红包里同步,它背后的数据取决于用户的观点和反汇编