开篇
同一个用户并发扣款时,有一定概率出现数据不一致,可以使用CAS乐观锁的方式,在不降低吞吐量,保证数据的一致性:
不能采用直接扣减的方式:
当然,更通用的方式,可以使用版本号来实现CAS乐观锁:
WHERE uid=$uid AND ver=$ver_old;
对于这个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属性。
例如,拉取好友列表:
在用户量很大,并发量很大时,不同用户/群/消息数据的读写并没有锁冲突。
只有当,同一个用户,很短的时间内,有大量并发时,才可能存在锁冲突。
二、微博微博的核心业务是feed流:
-
发消息,写操作
-
刷消息,读操作
微博业务显然是读多写少的,在用户刷消息时,自己feed流里的消息,是由别人发出的。
查看自己主页feed流,最朴素的实现方法是:
(1) 拉取自己关注的用户id_list;
(2) 拉取这些用户最近N条消息;
(3) 将这N*id_list条消息排序;
(4) 返回第一页消息,得到自己主页feed流;
三、1230612306的核心业务是:
-
查票,读操作
-
买票,写操作
在用户量很大,并发量很大时,有极大的锁冲突。
收尾
QQ,微博、12306,同样是高并发业务,就数据存储锁冲突来说,各自的难度,数据不一致的概率是不同的。
回到开篇,使用CAS乐观锁进库存扣减:
WHERE uid=$uid AND ver=$ver_old;
只要有uid这个过滤属性,即使10W用户同时扣款,也不容易出现数据不一致。 只有当同一个用户,同一秒钟,有大量扣减时,才有一定几率会冲撞,但也不会导致数据不一致。
结论
高并发的扣款场景,可以使用CAS乐观锁,采用select&set方式进行扣款,既能够保证吞吐量,又能够保证一致性。
欢迎关注公众号:“Java架构师学习”
你会喜欢的!
相关推荐
ThinkPHP框架开发仿糗事百科笑话系统PHP源码_包含6套PC端模板+1套WAP手机端模板+积分商城+QQ/微博登录 内涵段子等笑话网站系统源码,主要是基于ThinkPHP3.2.3框架开发仿糗事百科笑话系统PHP源码,包含6套PC端模板,...
友盟作为一个提供社会化分享服务的平台,为开发者提供了方便地集成QQ、微信、微博等主流社交应用的分享功能。本文将详细介绍如何使用友盟SDK实现自定义面板的分享功能。 首先,你需要在友盟官网注册一个开发者账号...
Erphplogin Pro是一款wordpress网站用户通过QQ、微博、微信扫码以及弹窗来进行登录的wordpress中文插件。 微信登录的接口是微信开发者平台的接口,扫码登录。 本插件不仅实现了社交登录功能,还有弹窗登录功能(由于...
本教程重点讲解如何在SSM项目中集成第三方登录服务,包括QQ、微信、GitHub、微博、开源中国、人人网、豆瓣和百度等。这些社交平台提供的OAuth2.0协议允许应用安全地获取用户信息,实现单点登录(SSO)功能,极大地...
在本文中,我们将深入探讨如何使用jQuery实现一款带有微信和微博二维码的网页浮动在线QQ客服代码。这款代码设计精美,实用性高,适用于当前社交媒体广泛使用的环境。然而,需要注意的是,该代码默认仅支持设置一个QQ...
[搜酷狗微博]-首次提供公测(Tsokugo micro-Bo Ver 1.0.04.11),从现在开始您就可以关注我的微博啦!水岸心晴设计工作室,首次免费提供个人微博系统。 功能包括: 1、图片上传/图片缩略图/图片水印自动生成/网络...
2. **微博登录API**:类似于QQ,新浪微博也提供了OAuth 2.0授权服务。开发者需在微博开放平台注册应用,获取App Key和App Secret。用户授权后,应用可以通过API获取到用户的唯一标识符UID,以便进行后续操作。 3. *...
本微博类似一个交友的平台,用户可以通过微博发表一个即使短信息,让自 己的朋友对自己当前的心情或其他各方面有所了解,此短信息就像是QQ空间中发表的心情。用户还可以通过此微博搜索好友,添加关注好友。
微博开放平台同样支持OAuth 2.0,用于用户授权,获取Access Token后,可以调用其API获取用户资料等信息。 1. **QQ登录实现**: - 注册成为QQ互联开发者并创建应用,获取App ID和App Key。 - 使用OAuth 2.0授权...
源码openshare,楼主做iOS开发的过程中遇到这样的问题:自己app中的信息需要分享到QQ、微信、微博等社交网络。现在的客户端越做越强大,直接集成了分享功能,比如用户手机上安装了微信,只需要app调起微信,并且给...
微信,QQ登录认证也都能工作,唯独微博的登录认证没跑通,因为没有去注册应用,不过登录认证的界面是调起来的了。 支付相关代码也都翻译完了,但由于没有相应的服务端,所以这两个都没有跑通。
9. **更新与维护**: 高质量的软件会定期更新,修复问题,添加新功能,以适应QQ微博的更新变化。 总结:千寻QQ社区-QQ微博转发软件是一款专为QQ微博设计的自动化工具,其核心功能是帮助用户快速转发微博,可能包含...
html分享到新浪 QQ好友 QQ空间 腾讯微博
### 微博短视频百万级高可用、高并发架构设计 #### 一、业务场景与挑战 微博短视频(微博故事)面临着独特的业务挑战:一方面需要处理不可预见的突发流量暴涨,如明星绯闻、爆炸性新闻等事件导致的瞬间流量激增;...
Flutter,作为Google推出的一种跨平台开发框架,以其高性能、高效率和丰富的UI库深受开发者喜爱。本文将深入探讨如何在Flutter应用中实现截图、QQ分享、微信分享以及微博分享的功能。 **截图功能** 在Flutter中,...
【腾讯QQ微博分享】是腾讯公司提供的一项服务,允许用户通过QQ平台将内容分享到微博上,扩大信息的传播范围,提升社交互动性。这项功能的实现离不开特定的开发工具和接口,通常由软件开发工具包(SDK)来提供。 ...
网页分享插件是一种常见的工具,尤其在现代互联网环境中,它为用户提供了一种便捷的方式,将网页内容快速地分享到各种社交媒体平台,如微信、QQ和微博。本插件的标题和描述表明,它专为PC端和H5(HTML5)网页设计,...
QQ和新浪微博授权登录是互联网应用中常见的用户身份验证方式,特别是在移动端。这两种授权登录机制允许用户使用已有的QQ或微博账号快速注册并登录其他第三方应用,简化了用户的账户管理流程,同时也为开发者提供了...
"微博登录"和"QQ登录"是两种常见的第三方登录方式,它们为用户提供了一种快速便捷的注册和登录体验,而"分享"则进一步增强了用户的参与度和应用的传播力。下面我们将详细探讨这些知识点。 首先,我们来看"微博登录...
《jQuery手机端QQ微信微博分享插件:实现社交平台无缝分享》 在当前互联网时代,社交媒体已经成为人们日常生活的一部分,分享内容到微信、QQ、微博等平台已成为习惯。为满足这一需求,开发人员利用jQuery库创建了一...