无锁缓存,每秒10万并发,究竟如何实现?
有一类业务场景:
(1)超高吞吐量,每秒要处理海量请求;
(2)写多读少,大部分请求是对数据进行修改,少部分请求对数据进行读取;
这类业务,有什么实现技巧么?
接下来,一起听我从案例入手,娓娓道来。
void SetDriverInfo(long driver_id, DriverInfo info){
WriteLock (m_lock);
Map<driver_id>= info;
UnWriteLock(m_lock);
}
DriverInfo GetDriverInfo(long driver_id){
DriverInfo t;
ReadLock(m_lock);
t= Map<driver_id>;
UnReadLock(m_lock);
return t;
}
有什么潜在的优化方法么?
锁冲突之所以严重,是因为整个Map共用一把锁,锁的粒度太粗。
画外音:可以认为是一个数据库的“库级别锁”。
是否可能进行水平拆分,来降低锁冲突呢?
答案是肯定的。
画外音:类似于数据库里的分库,把一个库锁变成多个库锁,来提高并发,降低锁冲突。
我们可以把1个Map水平切分成N个Map:
void SetDriverInfo(long driver_id, DriverInfo info){
i = driver_id % N; // 水平拆分成N份,N个Map,N个锁
WriteLock (m_lock[i]); //锁第i把锁
Map[i]<driver_id>= info; // 操作第i个Map
UnWriteLock (m_lock[i]); // 解锁第i把锁
}
有没有可能,进一步细化锁粒度,一个元素一把锁呢?
答案也是肯定的。
画外音:可以认为是一个数据库的“库级别锁”,优化为“行级别锁”。
void SetDriverInfo(long driver_id, DriverInfo info){
index = driver_id;
WriteLock (m_lock[index]); //超级大内存,一条记录一个锁,锁行锁
Array[index]= info; //driver_id就是Array下标
UnWriteLock (m_lock[index]); // 解锁行锁
}
这个方案使得锁冲突降到了最低,但锁资源大增,在数据量非常大的情况下,内存往往是装不下的。
写多读少的业务,有一种优化方案:无锁缓存,将锁冲突降低到。
(1)线程1对缓存进行操作,对 key 想要写入 value1 ;
总结
本文分享自微信公众号 - 架构师之路(road5858)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Android 11 强制用户使用内置系统相机应用
reddit 的一篇帖子介绍了 Android 11 调用相机 API 的重大变化,根据这篇帖子引用的博客文章的介绍,Android 11包含一些行为变更,这些变更可能会影响以 Android11 或更高版本为目标平台的应用,其中一项变更包括: 从 Android11 开始,只有预装的系统相机应用可以响应以下 intent 操作: android.media.action.VIDEO_CAPTURE android.media.action.IMAGE_CAPTURE android.media.action.IMAGE_CAPTURE_SECURE 如果有多个预装的系统相机应用可用,系统会显示一个对话框,供用户选择应用。如果您希望自己的应用使用特定的第三方相机应用来代表其捕获图片或视频,可以通过为 intent 设置软件包名称或组件来使这些 intent 变得明确。 可以看到,对于三个特定的需要调用摄像头的intent(VIDEO_CAPTURE、IMAGE_CAPTURE和IMAGE_CAPTURE_SECURE),Android 11 现在将自动提供预装的系统相机应用以执行这些操...
-
下一篇
内网渗透技巧之横向控制
一、前言 目前当攻击者获取到某台内网机器的控制权限之后,进一步会考虑如何在内网进行横向移动,以及攻击域控服务器,今天丹丹就总结一下突破边界后进一步的攻击技巧。 二、Windows域介绍 将网络中多台计算机逻辑上组织到一起进行集中管理,这种区别于工作组的逻辑环境叫做域。域是由域控制器(Domain Controller)和成员计算机组成,域控制器就是安装了活动目录(Active Directory)的计算机。活动目录提供了存储网络上对象信息并使用网络使用该数据的方法,在域中,至少有一台域控制器,域控制器中保存着整个域的用户帐号和安全数据库。 2.1域的优势 1.集中管理,可以集中的管理企业中成千上万分布于异地的计算机和用户。 2.便捷的网络资源访问,能够容易的定位到域中的资源。 3.用户一次登录就可访问整个网络资源,集中的身份验证。 4.网络资源主要包含用户帐户、组、共享文件夹、打印机等 5.可扩展性,既可以适用于几十台计算机的小规模网络,也可以适用于跨国公司。 2.2域渗透常用命令 查询与控制器主机名 :net group “domain controllers” /domain 可...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8编译安装MySQL8.0.19
- MySQL数据库在高并发下的优化方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果