(二)微信红包高并发系统设计方案(1)

(二)微信红包高并发系统设计方案(1),第1张

2017年1月28日,正月初一,微信公布了用户在除夕当天收发微信红包的数量——142亿个,而其收发峰值也已达到76万每秒。百亿级别的红包,如何保障并发性能与资金安全?这给微信带来了超级挑战。面对挑战,微信红包在分析了业界“秒杀”系统解决方案的基础上,采用了 SET化、请求排队串行化、双维度分库表 等设计,形成了独特的高并发、资金安全系统解决方案。实践证明,该方案表现稳定,且实现了除夕夜系统零故障运行。概要:

一、业务 特点 :海量的并发要求;严格的安全级别

二、技术 难点 :并发请求抢锁;事务级操作量级大;事务性要求严格

三、解决高并发问题 通常 使用的 方案 :

1.使用内存操作替代实时的DB事务操作(优点:内存操作替代磁盘操作,提高了并发性能。)

2使用乐观锁替代悲观锁。应用于微信红包系统,则会存在下面三个问题:滚并返回失败;并发大失败,小成功。DB压力大。

四、微信 红包 系统的高并发解决 方案 :

1.系统垂直SET化,分而治之。

2.逻辑Server层将请求排队,解决DB并发问题。

3.双维度库表设计,保障系统性能稳定

类似“秒杀”活动,群里发一个红包=“秒杀”商品上架;抢红包的动作=“秒杀”的查询库存;拆红包=“秒杀”

同一时间有10万个群里的用户同时在发红包,那就相当于同一时间有10万个“秒杀”活动发布出去。10万个微信群里的用户同时抢红包,将产生海量的并发请求。

微信红包是微信支付的一个商户,提供资金流转服务。

用户发红包=购买一笔“钱”(在微信红包这个商户上),并且收货地址是微信群。当用户支付成功后,红包“发货”到微信群里,群里的用户拆开红包后,微信红包提供了将“钱”转入折红包用户微信零钱的服务。

资金交易业务比普通商品“秒杀”活动有更高的安全级别要求。普通的商品“秒杀”商品由商户提供,库存是商户预设的,“秒杀”时可以允许存在“超卖”、“少卖”的情况。但是对于微信红包,100元不可以被拆出101元;领取99元时,剩下的1元在24小时过期后要精确地退还给发红包用户,不能多也不能少。

在介绍微信红包系统的技术难点之前,先介绍下简单的、典型的商品“秒杀”系统的架构设计,如下图所示。

该系统由接入层、逻辑服务层、存储层与缓存构成。Proxy处理请求接入,Server承载主要的业务逻辑,Cache用于缓存库存数量、DB则用于数据持久化。

一个“秒杀”活动,对应DB中的一条库存记录。当用户进行商品“秒杀”时,系统的主要逻辑在于DB中库存的操作上。一般来说,对DB的操作流程有以下三步:

a. 锁库存

b. 插入“秒杀”记录

c. 更新库存

a.锁库存是为了 避免 并发请求时出现“ 超卖 ”情况。同时要求这 三步操作 需要在 一个事务 中完成(难点:并发请求抢锁)。

第一个事务完成提交之前这个锁一直被第一个请求占用,后面的所有请求需要 排队等待 。同时参与“秒杀”的用户越多,并发进DB的请求越多,请求 排队越严重 。

红包系统的设计上, 除了并发请求抢锁之外,还有以下两个突出难点 :

首先,事务级操作量级大 。上文介绍微信红包业务特点时提到,普遍情况下同时会有数以万计的微信群在发红包。这个业务特点映射到微信红包系统设计上,就是有数以万计的“并发请求抢锁”同时在进行。这使 得DB的压力 比普通单个商品“库存”被锁要大很多倍。

其次,事务性要求严格 。微信红包系统本质上是一个资金交易系统,相比普通商品“秒杀”系统有更高的事务级别要求。

普通商品“秒杀”活动系统,解决高并发问题的方案,大体有以下几种:

如图2所示,将“实时扣库存”的行为上移到 内存Cache中操作 ,内存Cache操作成功直接给Server返回成功,然后 异步落DB持久化 。

优点:提高了并发性能。

缺点: 在内存操作 成功 但 DB持久化失败 ,或者内存 Cache故障 的情况下,DB持久化会 丢数据 ,不适合微信红包这种资金交易系统。

商品“秒杀”系统中,乐观锁的具体应用方法,是在DB的“库存”记录中维护一个版本号。在更新“库存”的操作进行前,先去DB获取当前版本号。在更新库存的事务提交时,检查该版本号是否已被其他事务修改。如果版本没被修改,则提交事务,且版本号加1;如果版本号已经被其他事务修改,则回滚事务,并给上层报错。

这个方案解决了“并发请求抢锁”的问题,可以提高DB的并发处理能力。

应用于微信红包系统,则会存在下面三个问题 :

1.在并发抢到相同版本号的拆红包请求中, 只有一个能拆红包成功 , 其他的请求 将事务回滚并返回失败,给用户 报错 ,用户体验完全不可接受。

2.将会导致 第一时间 同时拆红包的用户有一部分直接 返回失败 ,反而那些“ 手慢 ”的用户,有可能因为 并发减小 后拆红包 成功 ,这会带来用户体验上的负面影响。

3.会带来 大数量 的 无效 更新 请求 、事务 回滚 ,给 DB 造成不必要的额外 压力 。

微信红包用户发一个红包时,微信红包系统生成一个ID作为这个红包的唯一标识。接下来这个红包的所有发红包、抢红包、拆红包、查询红包详情等操作,都根据这个ID关联。

红包系统根据这个红包ID,按一定的规则(如按ID尾号取模等),垂直上下切分。切分后,一个垂直链条上的逻辑Server服务器、DB统称为一个SET。

各个SET之间相互独立,互相解耦。并且同一个红包ID的所有请求,包括发红包、抢红包、拆红包、查详情详情等,垂直stick到同一个SET内处理,高度内聚。通过这样的方式,系统将所有红包请求这个巨大的洪流分散为多股小流,互不影响,分而治之,如下图所示。

这个方案解决了同时存在海量事务级操作的问题,将海量化为小量。

红包系统是资金交易系统,DB操作的事务性无法避免,所以会存在“并发抢锁”问题。但是如果到达DB的事务操作(也即拆红包行为)不是并发的,而是串行的,就不会存在“并发抢锁”的问题了。

按这个思路,为了使拆红包的事务操作串行地进入DB,只需要将请求在 Server层以FIFO ( 先进先出 )的方式排队,就可以达到这个效果。从而问题就集中到Server的FIFO队列设计上。

微信红包系统设计了分布式的、轻巧的、灵活的FIFO队列方案。其具体实现如下:

首先,将同一个红包ID的所有请求stick到同一台Server。

上面SET化方案已经介绍,同个红包ID的所有请求,按红包ID stick到同个SET中。不过在同个SET中,会存在多台Server服务器同时连接同一台DB(基于容灾、性能考虑,需要多台Server互备、均衡压力)。

为了使同一个红包ID的所有请求,stick到同一台Server服务器上,在SET化的设计之外,微信红包系统添加了一层基于红包ID hash值的分流,如下图所示。

其次,设计单机请求排队方案。

将stick到同一台Server上的所有请求在被接收进程接收后,按红包ID进行排队。然后 串行地进入worker进程 (执行业务逻辑)进行处理,从而达到 排队 的效果,如下图所示。

最后,增加memcached控制并发。

为了 防止 Server中的请求队列过载导致队列被降级,从而所有请求 拥进DB ,系统增加了与Server服务器同机部署的 memcached ,用于控制拆同一个红包的 请求并发数 。

具体来说,利用memcached的 CAS原子累增操作 ,控制同时进入 DB执行拆红包事务的请求数 ,超过预先设定数值则 直接拒绝服务 。用于 DB负载升高时的降级 体验。

通过以上三个措施,系统有效地 控制了DB的“并发抢锁” 情况。

红包系统的分库表规则,初期是根据 红包ID的hash值 分为多库多表。随着红包数据量逐渐增大,单表数据量也逐渐增加。而DB的性能与单表数据量有一定相关性。当单表数据量达到一定程度时,DB性能会有大幅度下降,影响系统性能稳定性。采用 冷热分离 ,将历史冷数据与当前热数据分开存储,可以解决这个问题。

系统在以 红包ID维度 分库表的基础上,增加了以 循环天分表的维度 ,形成了 双维度分库表 的特色。

具体来说,就是分库表规则像db_xx.t_y_dd设计,其中,xx/y是红包ID的 hash值后三位 ,dd的取值范围在01~31,代表一个月天数最多 31 天。

通过这种双维度分库表方式,解决了DB单表数据量膨胀导致性能下降的问题,保障了系统性能的稳定性。同时,在热冷分离的问题上,又使得数据搬迁变得简单而优雅。

综上所述,微信红包系统在解决高并发问题上的设计,主要采用了SET化分治、请求排队、双维度分库表等方案,使得单组DB的并发性能 提升了8倍 左右,取得了很好的效果。

http://www.infoq.com/cn/articles/2017hongbao-weixin

微信公众号微信支付设置这里怎么填啊??求高人指点!

这个需要有开发能力的,你可以找搞网站这方面的人来做。需要先在自己的服务器部署好处理微信支付请求的代码,自然就有url地址了。

微信公众号微信支付怎么支付

微信支付开通资料:

1.单位证件:如企业执照

2.运营人资料:个人证件照片、联系方式

3.收款账号:银行账号

资料准备好后,可直接联系公众平台第三方开发机构“优度网”的在线工作人员帮忙开发,一般4工作日内可完成。

微信公众号微信支付怎么开通

首先你要确认你的公众号是不是服务号?如果是订阅号就绝对没有支付功能!

企业微信公众号怎么申请微信支付?

企业微信公众号开通微信支付流程

1、开微信店,首先要有微信服务号

2、开微信店需要认证的服务号才有资格,所以需要现进行微信认证,认证需要交费300元。(认证的商户主体与后面申请微信支付的商户主体要一致)

3、然后点击“服务”—“服务中心”—“商户功能”提交商户基本资料及业务审核资料、财务审核资料,一定要牢记填写的重要邮箱。提交后等待审核,审核的时间为5个工作日。

4、查看审核结果,通过审核后,下面就可以进入开发签订合同阶段了

5、在微信官网下载微信提供的“开发接口文档”,按照说明顺利完成开发工作,然后商户需要和微信官方签订《微信公众平台商户功能服务协议》和《微信支付协议》。

6、获取权限,目前是交20000元保证金。

7、售卖商品享有系列微信支付功能。

微信公众号怎么开通支付 微信公众号开通支付教程

微信公众号开通支付步骤:

第一步:注册公众号(类型须为:服务号、 *** 或媒体订阅号、企业号)请根据营业执照类型选择以下主体注册:个体工商户| 企业/公司| *** | 媒体| 其他类型。

第二步:认证公众号

公众号认证后才可申请微信支付,认证费:300元/次,查看认证流程。

第三步:提交资料申请微信支付

登录公众平台,点击左侧菜单【微信支付】,开始填写资料等待审核,审核时间为1-5个工作日内。

第四步:开户成功,登录商户平台进行验证

资料审核通过后,请登录联系人邮箱查收商户号和密码,并登录商户平台填写财付通备付金打的小额资金数额,完成账户验证。(查看验证方法)

第五步:在线签署协议

本协议为线上电子协议,签署后方可进行交易及资金结算,签署完立即生效。点此提前预览协议内容。

第六步:启动设计和开发

支付接口已获得,可根据开发文档进行开发,也可了解成功案例界面示意及素材。

微信公众号订阅号怎么开通微信支付

订阅号是不能开通微信支付的

,,企业可以开通,开通方式。微信搜索 未来之窗软件服务中心 通过菜单 商家签约可以开通

个人认证订阅号和企业认证订阅号都是不可以开通微信支付的、只有 *** 媒体认证的订阅号才能开通微信支付

微信支付是微信公众平台向有在线收款需求的公众号提供的商品展示、在线下单及付款、即时到帐、经营分析等功能的整体解决方案。

开通微信支付所需资料

一般能开通微信支付的主体为企业、 *** 、组织机构、社团、媒体等。开通微信支付需要是服务号、申请微信支付所需资料:

1.微信支付负责人姓名、联系电话、邮箱

2.企业执照、银行账户、运营人身份证照片

3.商家名称(对外展示的名字,一般可用微信名)

4.所提供的商品或服务的简单介绍。

微信支付可用于各种支付场景,如酒店订房、餐厅点餐、商场超市埋单、停车场付费、手机充值等等。

1.扫码支付

用户扫描二维码(线下或PC端的均可),即可生成微信支付交易页面,完成交易流程。

2.公众号支付

用户在微信中关注商户的微信公众号,在商户的微信公众号内完成商品和服务的支付购买。如QQ充值、广东联通、印美图、麦当劳、微团购、香港航空、微信电影票等公众号均支持该方式。

3.APP支付

开发了APP应用的企业,可以将微信支付接入到程序里。如停车场收费APP,车主扫码即可完成计时、付费。

开通微信支付首先要有服务号,认证的服务号才有资格,所以需要现进行认证,认证需要交费300元。(认证的商户主体与后面申请微信支付的商户主体要一致),然后点击“服务”—“服务中心”—“商户功能”提交商户基本资料及业务审核资料、财务审核资料,一定要牢记填写的重要邮箱。提交后等待审核,审核的时间为5个工作日。审核通过之后就可以使用微信支付啦

根据我的了解,目前,在公众号中,只有服务号可以申请开通支付功能,订阅号暂时不提供支付申请功能。你可以自己注册一个服务号。然后开通就行了。但是有个前提条件就是认证,先认证,认证后在后台就有支付的栏目了,到时候再进去开通支付。这些都是有步骤提示的,非常的简单,照着做就行了。现在这么多的人使用它来支付,所以对于商户来说,开通这样的一个支付方式是非常有必要的,越来越国际化,我们可不能out啊。

家教智慧微信公众号微信支付可信吗

这个没法判断是否可信

建议你可以从它的使用人数,或者周边有没有人使用等判断

如果周边有使用的人,可以问一下他们的使用感受

微信公众号如何开通支付 微信公众号开通支付教程

1.自己开通需要认证过的服务号

2.通过第三方开通,微信搜索“未来之窗软件服务中心”,点击商家签约,即可

微信转账比较安全,除了支付密码等验证信息以外,微信在另一个设备登陆的时候还需要验证身份信息,一般情况下是不会出现现金丢失的情况。

而且微信还有安全赔付,微信宣布与亚洲最大的财产保险公司中国人保财险(PICC)合作,为用户推出全额赔付的保障,推出“你敢付,我敢赔”的口号。据了解,用户如因使用微信支付造成资金被盗等损失,将可获得PICC的全赔保障。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/743383.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-14
下一篇2023-08-14

发表评论

登录后才能评论

评论列表(0条)

    保存