中国电信官方旗舰店:售后 (2014-01-02 09:10:35): 亲,由于我们广告公布仅有一位最先的用户才能购买秒杀手机,但是由于技术故障产生了额外的秒杀订单。请您帮忙以“协商一致”方式申请退款,我们会以卡密形式补偿您300元电信话费充值卡。给您造成不便,深表歉意。
买家 (2014-01-02 09:33:22): 以卡密形式补偿您300元电信话费充值卡,能先把卡密告知后,在按照你方提的要求申请退款,可否
中国电信官方旗舰店:售后 (09:50:47): 亲,我们是讲信用的,请您放心
中国电信官方旗舰店:售后 (09:51:11): 如果我们不退款给您,您也是可以申请售后退款的
买家 (09:52:10): 我不是能不能退款的问题,我是我退款了, *** 作完毕后,300元的卡密能否现在就给我
中国电信官方旗舰店:售后 (09:55:53): 您申请退款后,我们就会将话费充值给您,会在旺旺上提供凭证的
买家 (09:56:39): 如果我不退款,最终结果是怎么样
中国电信官方旗舰店:售后 (09:57:14): 您不申请退款,也是不会发货的
买家 (09:59:13): 如果我现在退款了,你现在就会在旺旺上提供300元充值卡密吗
中国电信官方旗舰店:售后 (09:59:44): 您提供电信号码我们为您补充话费
买家 (10:03:30): 您提供电信号码我们为您补充话费,与 以卡密形式补偿您300元电信话费充值卡。是两种不同的说法
买家 (10:04:40): 300元充值卡和你所说的补充300话费,是两个概念300元充值卡我是可以考虑的
中国电信官方旗舰店:售后 (10:05:37): 可以的,亲,您申请退款,我们这边为您发送300元卡密
买家 (10:05:51): 现在能发吗还是要你们把方案定好以后才发
中国电信官方旗舰店:售后 (10:07:25): 您申请退款后,我们向相关部门申报,尽快为您发送
买家 (10:08:30): 因为你们的原因造成的,为什么不先兑现你们的承诺后,在让我们退款呢。
中国电信官方旗舰店:售后 (10:10:40): 抱歉,亲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_xxt_y_dd设计,其中,xx/y是红包ID的 hash值后三位 ,dd的取值范围在01~31,代表一个月天数最多 31 天。
通过这种双维度分库表方式,解决了DB单表数据量膨胀导致性能下降的问题,保障了系统性能的稳定性。同时,在热冷分离的问题上,又使得数据搬迁变得简单而优雅。
综上所述,微信红包系统在解决高并发问题上的设计,主要采用了SET化分治、请求排队、双维度分库表等方案,使得单组DB的并发性能 提升了8倍 左右,取得了很好的效果。
>
1 理性思考
常识判断需要理性思考,不要受情绪、偏见、主观臆断等因素的干扰。保持冷静、客观、理智,全面掌握所需信息,避免过早下结论。
2 多角度思考
常识往往不是唯一的,需要考虑多种可能性。要从不同的角度、层面、维度等方面进行思考,构建全面、准确的认识。
3 逻辑推理
常识判断需要具备一定的逻辑推理能力。要善于分析问题的因果关系、逻辑关系等,通过推理、归纳、演绎等方法,得出正确的结论。
4 利用经验
经验是积累知识、提升常识判断的重要途径。要发挥自己的经验优势,借鉴前人的经验教训,加强常识判断的实践能力。
5 牢记规律
常识判断是有规律可循的。要重视规律性思维,掌握常识知识的规律性和变化规律,借助规律和模型来推断和预测问题的解决方案。
�32位和64位Win7系统下玩大富翁4都没有声音怎么办?在大富翁的历代里面,大富翁4深受玩家们喜爱,后来的几代虽然8代也有好评,但总体来说还是4代让人玩的最开怀。休闲类大富翁游戏,一定要休闲,如果太多规则太多道道,就没什么太大意义了。闲话少说,有人给出了很多不同的解决方案,什么把文件夹下面的声音文件都关联到一个音乐播放器什么的,还有一些说设置成XP兼容模式来运行,其实这些都不对,只要一招就立马解决:把游戏文件夹下面的 rich4exe 改名成 Rich4exe对,就是把 r 改成大写 R,就可以了。原理是加成伤害 加成一定要是火属性的必杀 《4招一式》下面简称41,什么叫41?招是可以多连段打击,5连6连都可以,但是那最后一式只能是一连不可能多连,追地的过程中也是按照41来连击的,每个BOSS只有3次追地的机会,要用什么招看BOSS的血量或个人技术,每个BOSS都有不同的方案进行秒杀 赵云 关羽等通常赵云的必杀最好用 以为他是延迟的,比如赵云一个必杀队友马上升级曝气伤害就翻倍了,诸葛亮的升级最厉害加成6点伤害 也就是说BOSS中了一个必杀后在加6个必杀=7个必杀 可想而知那伤害 除了诸葛亮,别的人物升级都只有加3点伤害,曝气都一样加2点 每个人物升级是靠分数计算的
《三国战纪》 赤壁的熊熊怒火,粉碎了曹 *** 霸业,魏蜀吴三国争霸,从此——揭开序幕! 招募经典人气武将,组成乱世最强军团,独创横版道具玩法,回归爆爽街机格斗!还在回味无限爆气、超强必杀、一币通关、联机作战的啪啪热血时光?那就快到《三国战纪》,重拾童年格斗之魂,搅动天下风云再起
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)