浅析 阿里 OceanBase 双十一 淘宝天猫 天量交易 承载能力 原理
我们先看看 这 2 篇文章:
我之前也写过 2 篇文章 :
《海量 并发 下 的 系统架构 和 数据库 发展之路》 https://www.cnblogs.com/KSongKing/p/9937135.html
《论 大并发 下的 乐观锁定 Redis锁定 和 新时代事务》 https://www.cnblogs.com/KSongKing/p/9934722.html
阿里 的 OceanBase 高速的数据处理 和 应对大并发 的 能力 的 基础 是 内存计算, 即 在 内存 里 对 数据 进行计算, 而不是在计算时 频繁的 读写 外部存储器 。
对于 事务(Transaction), OceanBase 应该不会把 事物日志 写到 外部存储器(磁盘 固态硬盘), 而是 写入 多个 服务器节点 的 内存,
通过 多节点 来实现 可靠性 。 比如 要超过 2/3 的 节点 正常的 写入了 事务日志 , 才会开始 事务 。
这同样是为了 提升速度, 事务日志 如果写入 外部存储器 的话, 时间上来不及, 对 天量交易 来说 太慢了。
从 内存计算 这一点 来看, OceanBase 和 12306 搭建 的 Gemfire 集群 是 相似 的 。
有关 12306 架构, 可以参考我之前写的另一篇文章 《漫谈 12306 架构》 https://www.cnblogs.com/KSongKing/p/9550000.html
Gemfire 也是一个 内存数据库, 不过不是 关系数据库, 是一个 Key Value 数据库, 支持 组建集群, 也就是 水平扩展, 这样可以 增加 处理器 和 内存 数量 来 支持 大并发 。
而 OceanBase 和 Gemfire 集群 两者 在 实际中 对 并发 的 处理规模 也是可以 相提并论 的 。
但是, 光凭 内存计算 等 技术 实现的 卓越性能 是否能够 应对 “天量”交易 ?
不能 。
我们 可以作一个 设定, 每秒 1000万次 以上 的 交易量 称为 “天量" 。
下面 我们 以 每秒 1000万次 作为目标 来 分析 如何达到 每秒 1000万次 这样的并发量 。
一个 CPU 核, 能够处理 每秒 1000次 的 事务 就已经不错了 。 即使采用了 内存计算, 能够达到 每秒 1000次, 已经不错了 。
这是一个什么概念呢? 就是 1 毫秒(ms) 处理一个 事务 。 也就是 1 秒 能处理 1000 个 事务 。
所以, 对于 每秒 1000万次 的 事务, 需要 1000万 / 1000 = 1 万 个 CPU 核 ,
如果 以 每台服务器 100 核 来看, 需要 100 台 服务器,
如果 以 每台服务器 50 核 来看, 需要 200 台 服务器 。
大概是 这么一个 体量 。
其次, 需要在 业务层面 进行 很细 的 分库分表 。
因为 事务 会 锁定 表, 这会导致 即使 有 1 万 个 CPU 核 , 但是对于 A 表 的 操作 同时也只能有 一个 核(线程)能进行 。
这就又回到了 和 单核(单线程) 等价 的 情形 。
大家可能会 提出, 能不能用 行锁定 和 乐观锁定 来 代替 表锁定 ?
这 2 种方式 我在 上面 引用的 我写的 另外一篇文章 《论 大并发 下的 乐观锁定 Redis锁定 和 新时代事务》 里都分析过 。
但 , ……
而且 除了锁, 事务 还有另外一个作用, 就是 数据完整性, 即 交易失败 时, 数据 可以恢复原样 。
所以, 总的来说, 传统事务 还是 必需 的 。
所以, 需要在 业务层面 进行 很细 的 分库分表 。
既然 有 1 万 个 核 , 最好能 分成 1 万 个 表, 这样每个 核 一个 表, 大家互相不会干扰, 可以 跑 的 很开心 。
1 万 个 核 一起 欢快的 奔跑 着, 啦啦啦 ~~~
至于 分几个 库, 那 大家 看着办 好了 。
而实际上, 对于 淘宝 天猫 的 业务 来讲, 还真 可以 分 1 万 个 表 。
对于 淘宝 天猫 这样的 零售业 来讲, 交易 大部分 是 购买 付账 , 在 交易 里 要做的事 是 判断 库存剩余量, 修改商品状态, 修改库存 。
这样就可以 按照 商户 商品类别 来 分库 分表 。
那么, 既然这样的话, 我们提出一个问题,
能不能不用 OceanBase , 用 其它 常用的 数据库, 比如 Oracle, SqlServer, MySql, PostgreSql 等 来 实现 和 阿里 类似 的 架构 和 效果 ?
能 。
我们以 Sql Server 为例 , Sql Server 发展到现在, 在 利用 多核 和 内存 上 做的很好 。
我们 以 SqlServer 2017 为例, 按照上面计算出来的 体量, 部署 200 台 服务器, 每台 服务器 CPU 50 核, 内存 100 G(相当于 每个 核 2 G 内存), 再加上 固态硬盘 ,
可以达到 接近 或者 类似 阿里 淘宝 天猫 架构 的 效果 。
浅析 阿里 OceanBase 双十一 淘宝天猫 天量交易 承载能力 原理的更多相关文章
- [淘宝客技术篇008](无需登录)淘宝天猫优惠券JSON接口1
今天,小星给大家分享的是一个非常重要,非常有意义的接口:获取淘宝天猫优惠券的JSON接口. 先上个链接: http://uland.taobao.com/cp/coupon_list?pid=mm_2 ...
- 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...
- 淘宝天猫关键词SEO优化
淘宝天猫的网站完全像是一个成熟的搜索引擎,只是从google.bing.baidu改成了淘宝天猫而已,普通搜索引擎有品专,有皇冠,有PC,有无线:淘宝天猫里面有钻展,有直通车,也有PC,无线.搜索引擎 ...
- Python网页信息采集:使用PhantomJS采集淘宝天猫商品内容
1,引言 最近一直在看Scrapy 爬虫框架,并尝试使用Scrapy框架写一个可以实现网页信息采集的简单的小程序.尝试过程中遇到了很多小问题,希望大家多多指教. 本文主要介绍如何使用Scrapy结合P ...
- 【淘宝客】根据淘客联盟精选清单(淘宝天猫内部优惠券)随机显示淘宝天猫优惠券dome
也许大家在生活中经常淘宝看到[淘宝天猫内部优惠券]的网站,或者在微博中经常有博主发券,让大家生活中购物便宜许多,作为一个站长,我们也希望自己的网站也能有这样的一个功能,现在就分享给大家,还是免后台哦. ...
- 漫谈单点登录(SSO)(淘宝天猫)
1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...
- 漫谈单点登录(SSO)(淘宝天猫)(转载)
1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...
- php单点登录之模拟淘宝天猫同步登录
说到单点登录大家都很了解,一个站点登录其他域会自动登录. 单点登录SSO(Single Sign On)的方法有很多,比如:p3p.共享session.共享cookice.第三方OAuth认证. 这里 ...
- 淘宝天猫网站停止支持IE6、IE7浏览器,你还在用xp吗?
2016年4月14日,是科比正式告别篮球的最后一场球赛.大家都在忙着各种纪念和怀念着看科比打球的青葱岁月.不过已经完美谢幕.而我们今天要说的是微软的IE6.IE7浏览器.淘宝网和天猫商城正式停止支持I ...
随机推荐
- WebClient和WebRequest获取html代码
HTML: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...
- 玩转 React【第02期】:恋上 React 模板 JSX
往期回顾 前文中我们讲解了利用 ReactElement 来编写React程序,但是我们也看到这种方式编写 React 特别的麻烦,而且层级结构特别不清晰.今天我们来看一种优雅的编写React的代码的 ...
- day 41 mysql 函数 事物
mysql 函数 事务 mysql 中提供了许多内置函数 CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符.一个多字节字符算作一个单字符. 对于一个包含五个二字节字 ...
- nodejs --- querystring模块.
1. 序列化: querystring.stringify(对象, 参数2, 参数3) 第二个参数 设置 连接符 从 & 变为 , 第三个参数 设置 key 和value的中间符号, ...
- 图片 100%显示. img 全部显示.
让每个图片 都铺满 ,同样的大小; 只要给 img 设置 固定的高度, 宽度就可以 了. ----------------------- html: <div class="co ...
- 1--常用linux命令
参考链接:http://www.cnblogs.com/yjd_hycf_space/p/7730690.html 文件和目录 cd /home 进入 '/ home' 目录' cd .. 返回上一级 ...
- Python之路,第八篇:Python入门与基础8
python3 字典(dict) 概念:1 ,字典是一种可变的容器,可以存储任意类型的数据: 2, 字典中的每个数据都是用“键”(key)进行索引,而不像序列可以用下标进行索引: 3, 字典中的 ...
- SQL内外连
分组查询select 查询信息 from 表名where 条件group by 按照列分组(可多个 ,隔开)order by 排序方式(查询信息如果列名和聚合函数同时出现,要么在聚合函数中出现,要么就 ...
- Unity 3D Shader流水线
Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Gym - 101480 CERC 15:部分题目题解(队内第N次训练)
-------------------题目难度较难,但挺有营养的.慢慢补. A .ASCII Addition pro:用一定的形式表示1到9,让你计算加法. sol:模拟. solved by fz ...