|
|
|
|
移动端
创建专栏

同样是高并发,QQ/微博/12306的架构难度一样吗?

本文来源:http://www.133845.com/www_xinhuanet_com/

申博官网下载直营网,”但最让人不可思议的是,这家公司的创立者叶简明今年仅有39岁,他可能是历史上《财富》世界500强中国公司最年轻的掌门人。GDDR5的AMDRadeonR7M445能够提供更清晰流畅的画面,无论是游戏还是影音娱乐都能轻松搞定。请注意:根据《信息网络传播权保护条例》的规定,权利人应当对其权利通知的真实性负责;服务对象(提交反通知的人或者单位)应当对其反通知负责。一款傻瓜型语音计算器软件,AH计算器软件.分类:大小:9.1MB下载:AHERP/OA软件(上海鏊鸿软件产品)佐手软件推出的新型企业管理办公系统(ERP/OA软件),AH企业管理办公OA软件办公管理软件秉承佐手AH系列软件新颖实用简便的特点。

  天极旗下的各业务定位精准,优势互补,均已成为各领域的旗舰品牌。正在后置双摄的年代,vivo这次不走寻常路的带来了“前置双摄”让人眼前一亮,不禁让很多人发觉,原来双摄还可以这么玩儿。根据外媒此前的报道,似乎使用了与一样的1/3英寸感光元件,而光圈提升至f/1.8;至于Plus,它的等效28mm镜头和是同款,光圈也是f/1.8,而等效56mm镜头的CMOS尺寸只有1/3.,光圈也变成了f/2.8。  我的收藏  “我的收藏”功能支持分类查看,内容更清晰、查找更便捷。

这不仅是因为云计算的规模效益,更是云计算市场激烈的竞争所致。  如果专利已经运用到新SurfacePro5上,那么很显然,微软可能会大幅改进SurfacePen,取消曾经可供1年续航的AAAA电池设计,毕竟随着内部增加的组件越来越复杂,采用锂电池的趋势势在必行。金立  金立以前更多给我们商务的印象,但S系列则更多的是高颜值和年轻范儿,这次的金立为金属机身背部采用纳米注塑工艺,一体感更强,圆润打磨制造了出色握持感。今年印度的经济增速已经超过了中国成为全球经济增速最快的主要经济体。

高并发的扣款场景,可以使用CAS乐观锁,采用select&set方式进行扣款,既能够保证吞吐量,又能够保证一致性。

作者:58沈剑|2019-09-09 10:56

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

开篇同一个用户并发扣款时,有一定概率出现数据不一致,可以使用CAS乐观锁的方式,在不降低吞吐量,保证数据的一致性:

  1. UPDATE t_yue SET money=$new_money 
  2. WHERE uid=$uid AND money=$old_money; 

更详细的描述,详见《并发扣款,如何保证数据的一致性?》。 不能采用直接扣减的方式:

  1. UPDATE t_yue SET moneymoney=money-$diff WHERE uid=$uid; 

更详细的描述,详见《并发扣款一致性,幂等性问题》。 当然,更通用的方式,可以使用版本号来实现CAS乐观锁:

  1. UPDATE t_yue SET money=$new_money,ver=$ver_new 
  2. WHERE uid=$uid AND ver=$ver_old; 

更详细的描述,详见《申博官网下载直营网并发扣款一致性优化,CAS下ABA问题》。

对于这个CAS乐观锁方案,很有朋友有疑问:当并发量高时,版本号比对会导致大量的更新失败,这个方案不适用于高并发场景吗?

究竟是不是这样呢?大家对高并发是不是有什么误解呢?今天来聊一聊这个话题。

先分析三个业务场景。

一、QQ

QQ的一些核心业务有:

  • 个人:user(uid, user_info, …)
  • 好友:user_friends(uid, friend_id, …)
  • 加入的群:user_groups(uid, group_id, …)
  • 群:group(gid, group_info, …)
  • 群成员:group_members(gid, uid, …)
  • 个人消息:msgs_user(msg_id, uid, …)
  • 群消息:msgs_group(msg_id, gid, …)

这些信息的读写有一个特点,都会带上uid/gid/msgid属性。

例如,拉取好友列表:

  1. select friend_id from user_friends where uid=$uid; 

在用户量很大,并发量很大时,不同用户/群/消息数据的读写并没有锁冲突。

画外音:10W个用户同时读写,彼此没有锁冲突。

只有当,同一个用户,很短的时间内,有大量并发时,才可能存在锁冲突。

画外音:例如,1个用户,1秒钟读写1W次。

二、微博

微博的核心业务是feed流:

  • 发消息,写操作
  • 刷消息,读操作

微博业务显然是读多写少的,在用户刷消息时,自己feed流里的消息,是由别人发出的。

查看自己主页feed流,最朴素的实现方法是:

  • 拉取自己关注的用户id_list;
  • 拉取这些用户最近N条消息;
  • 将这N*id_list条消息排序;
  • 返回第一页消息,得到自己主页feed流;

在用户量很大,并发量很大时,会有一定数据的读写锁冲突。

画外音:不像QQ,基本是读写自己的数据,微博要写自己的数据,读别人的数据。

三、12306

12306的核心业务是:

  • 查票,读操作
  • 买票,写操作
  1. stock(id, num) / 某一列车有多少张余票 

在用户量很大,并发量很大时,有极大的锁冲突。

画外音:这个业务,数据量并不大。

这类“秒杀”业务,如果不做特殊的优化,数据库很容易死锁卡死,没有任何人能买票成功。

画外音:要做什么特殊的优化呢?

收尾

QQ,微博、12306,同样是高并发业务,就数据存储锁冲突来说,各自的难度,数据不一致的概率是不同的。

画外音:你不能说,QQ不是高并发业务吧。

回到开篇,使用CAS乐观锁进库存扣减:

  1. UPDATE t_yue SET money=$new_money,ver=$ver_new 
  2. WHERE uid=$uid AND ver=$ver_old; 

只要有uid这个过滤属性,即使10W用户同时扣款,也不容易出现数据不一致。

只有当同一个用户,同一秒钟,有大量扣减时,才有一定几率会冲撞,但也不会导致数据不一致。画外音:有一位很可爱的水友,说万一PC端和APP端同时下单怎么办。

结论

高并发的扣款场景,可以使用CAS乐观锁,采用select&set方式进行扣款,既能够保证吞吐量,又能够保证一致性。

【本文为51CTO专栏作者“58沈剑”原创稿件,转载请联系原作者】

申博官网下载直营网戳这里,看该作者更多好文

【编辑推荐】

  1. 申博官网下载直营网一份通俗易懂的微服务架构方案!
  2. 并发扣款,如何保证数据的一致性?
  3. 微服务分布式一致性模式
  4. 并发扣款一致性优化,CAS下ABA问题,这个话题还没聊完!!!
  5. 并发扣款一致性,幂等性问题,这个话题还没聊完!!!
【责任编辑:赵宁宁 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢
申博游戏安卓系统下载 www.7788shenbo.com 申博游戏下载网址 申博在线开户网址 申博太阳城138官网直营 申博游戏手机网址
www.11msc.com 申博会员注册直营网 申博在线娱乐登入网址 www.3158msc.com 申博太阳城官方现金直营网 申博娱乐城直营网
申博138娱乐官方网 申博现金投注登入 菲律宾申博太阳网上娱乐99 菲律宾申博直营网 申博现金网登入 菲律宾申博游戏登入