国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

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

发布时间:2019/09/09标签:   画外音    点击量:

原标题:同样是高并发,QQ/微博/12306的架构难度一样吗?
开篇统一个用户并发扣款时,有必定几率呈现数据纷歧致,能够应用CAS悲观锁的方法,在不下降吞吐量,保障数据的分歧性:UPDATEt_yueSETmoney=$new_moneyWHEREuid=$uidANDmoney=$old_money;更具体的描写,详见《并发扣款,怎样保障数据的分歧性?》。 不能采纳间接扣减的方法:UPDATEt_yueSETmoneymoney=money-$diffWHEREuid=$uid;更具体的描写,详见《并发扣款分歧性,幂等性成绩》。 固然,更通用的方法,能够应用版本号来完成CAS悲观锁:UPDATEt_yueSETmoney=$new_money,ver=$ver_newWHEREuid=$uidANDver=$ver_old;更具体的描写,详见《并发扣款分歧性优化,CAS下ABA成绩》。关于这个CAS悲观锁计划,很有友人有疑难:当并发量高时,版本号比对会招致大批的更新失利,这个计划不实用于高并发场景吗?毕竟是不是如许呢?各人对高并发是不是有甚么曲解呢?明天来聊一聊这个话题。先剖析三个营业场景。1、QQQQ的一些中心营业有: 团体: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属性。比方,拉取挚友列表:selectfriend_idfromuser_friendswhereuid=$uid;在用户量很大,并发量很大时,差别用户/群/新闻数据的读写并没有锁抵触。画外音:10W个用户同时读写,相互没有锁抵触。只要当,统一个用户,很短的时光内,有大批并发时,才能够存在锁抵触。画外音:比方,1个用户,1秒钟读写1W次。2、微博微博的中心营业是feed流: 发新闻,写操纵 刷新闻,读操纵微博营业明显是读多写少的,在用户刷新闻时,本人feed流里的新闻,是由他人收回的。检查本人主页feed流,最朴实的完成方式是: 拉取本人存眷的用户id_list; 拉取这些用户近来N条新闻; 将这N*id_list条新闻排序; 前往第一页新闻,失掉本人主页feed流;在用户量很大,并发量很大时,会有必定数据的读写锁抵触。画外音:不像QQ,基础是读写本人的数据,微博要写本人的数据,读他人的数据。3、1230612306的中心营业是: 查票,读操纵 买票,写操纵stock(id,num)//某一列车有几多张余票在用户量很大,并发量很大时,有极大的锁抵触。画外音:这个营业,数据量并不大。这类“秒杀”营业,假如不做特别的优化,数据库很轻易死锁卡死,没有任何人能买票胜利。画外音:要做甚么特别的优化呢?扫尾QQ,微博、12306,一样是高并发营业,就数据存储锁抵触来讲,各自的难度,数据纷歧致的几率是差别的。画外音:你不能说,QQ不是高并发营业吧。回到开篇,应用CAS悲观锁进库存扣减:UPDATEt_yueSETmoney=$new_money,ver=$ver_newWHEREuid=$uidANDver=$ver_old;

版权信息Copyright © 银河官网 版权所有    ICP备案编号:鲁ICP备09013610号