文档详情

《二零一六中国系统架构师大会_去IOE关键技术分析_吕海波(新)》.pdf

发布:2015-12-27约字共40页下载文档
文本预览下载声明
去IOE关键技术分析 演讲人:吕海波(VAGE ) 内容介绍 •  互联网企业去O关键技术分析: Sharding •  去,还是不去 ! •  O的替补 互联网企业去O关键技术分析:Shanding Sharding,是Sharde-nothing 的缩写,有些地方也就horizontal paroning/horizontal split,也就是数据库切片。简单点说,就是将一张大 表,拆分到N个数据库中。咱们后面,用一个更形象的词称它:拆表。 对并发比较高的数据库进行去O时,一定要考虑拆表。哪么,问题来了: 为什么要拆表 非O数据库目前的并发机制,不如Oracle 更加强大。这个短板,通过拆表来弥补最 为方便。 (注:本文中非O数据库主要以MySQL为例,不代表所有非O数 据库) 决定并发的因素:锁。锁粒度的大小等锁 机制决定了并发程度。 去O关键技术 -- 拆表 :架构师读书问题 (有一个著名的讨论线程同步的问题,叫哲学家就餐问题,我也东施效颦,来个架构师 读书问题): 假设5个架构师要读同一本纸制书: 书只有一本,人有5名,为了避免打架,方法就是将书装进一个盒子中锁上,有一把钥 匙可以打开这个盒子得到书,这把钥匙我们称为Book Key (简称BK)。 5名架构师谁先得到BK,就能打开盒子,得到书,然后开始读书。而其他人就只能等着。 这种方式资源使用率有限,并发不高。 去O关键技术 -- 拆表 :架构师读书问题 如何提高并发呢, “细化锁的粒度”。 比如5名架构师分别是A 、B、C、D和E。这本 《Oracle 内核技术揭密》共有7章,假设5名 架构师分别想看不同的章,A想看第4章,共享池原理。B想看第3章,Buffer Cache原理, C想看第6章,Redo原理,等等。 那么问题就很简单了,将书拆开,按章节拆成多本。一共7章,就拆成7本,分别装在7 个盒子中,每个盒子都有一把钥匙,可以打开盒子,得到书的某一章。这样就有了7个 盒子、7把钥匙。这7个钥匙分别编号为BK1,2,3……7 。 A想看第4章,他只需要得到BK4,打开锁得到盒子中的第4章,就可以了。A可以拿着第4 章自己看个够,不影响B同一时间看第3章,C在同一时间看第5章等等。这样,A 、B、C、 D和E 5名架构师可以同时读书了。并发得到提高,系统资源利用的更加充分。 去O关键技术 -- 拆表 :架构师读书问题 细化锁的粒度可以有效的提高并发,但这并不是一件容易的工作。 比如,下面这个问题,如果有多名架构师要读同一章怎么办?如何进一步提升“架构师 读书问题”的并发? 这个问题很简单,将每一章再拆成页,A看第1页,B看第5页,等等。 去O关键技术 -- 拆表 :架构师读书问题 但这个问题只是看似简单。 《Oracle 内核技术揭密》共有400页,将书拆成页后,每一页 都要有一个锁保护,锁的数量就是400 。 看到没,锁从1个,拆成章后变成6个,拆成页后变成400个,越来越多。锁并不是凭空 而来的东西,它要占内存,处理它要耗CPU资源。 将书拆成页后,现在你看书的步骤是这样的: 查找第一页的锁 判断是否可以得到它 如果可以得到,持有它 开始阅读第一页 释放第一页的锁,查看有无其他人在等待,有的话通知他可以持有了 查找第二页的锁 判断是否可以得到它 如果可以得到,持有它 开始阅读第二页 释放第二页的锁,查看有无其他人在等待,有的话通知他可以持有了 ……………… 去O关键技术 -- 拆表 :架构师读书问题 这就是锁太细、太多的问题。我们今天不讨论锁的设计,只是说明一个问题,并发的提 高 ,不是想提你就提。 回过头说拆表的问题。 Oracle在各种锁机制(或者说并发机制)上,还是下足了工夫的,比很多其他数据库要 好。比如说,MySQL。 MySQL在将重做日志数据写到Redo lo
显示全部
相似文档