解剖 Facebook【8】攻打甲骨文,云数据库的战略战术
某君口味较重,一提到云计算,他就联想到移动厕所。理由是云计算与移动厕所一样,都遵循大规模,可扩展,超稳定,高弹性四个基本原则。
这个比喻让人不适。但是要劝阻喜欢恶搞的朋友,单单以 ” 伤害感情 “ 为理由是不够的,而且适得其反,因为恶搞的乐趣,恰恰是挑衅人类的正常感知。
有效的反驳是说明这个比喻不恰当。事实上,这个比喻的确不恰当。问题的关键在于,云计算处理的是数据,而厕所处理的是粪便。
对于数据而言,有两个基本操作,“读” 和 “写”。” 读 “ 是消费,” 写 “ 是生产。生产数据的目的,是为了消费。对同一数据,可以反复 “写”,也就是 “改”,更可以反复 “读”。大多数情况下,生产与消费不对称,“写” 的次数少,“读” 的次数多。
而粪便是人类的排泄物。套用计算机术语来说,粪便只 “写” 不 “读”。只 “写” 一遍,谈不上 “改”,更谈不上反复 “读”。因此,拿厕所来比喻云计算,是非常不恰当的。
某君善辩,他说,一谈到学术问题,就一本正经,俨然道学派头。不仅没必要,而且把原本有趣的话题,弄得枯燥无味,阻碍了知识的传播,遏制了想象力的培养。又抬出庄子以壮声势,庄子说,大道无所不在,在蝼蚁,在稊稗,在瓦甓,在屎溺 [1]。即便用厕所类比云计算,并不严格贴切,但是有活跃气氛之功效。
图一. 学术辩论,技术进步,实际上是攻防战。对于进攻方而言,不仅要发现防守方的薄弱环节,而且要有克敌制胜的战略战术。Siege of Acre, 1291.
Courtesy http://i879.photobucket.com/albums/ab351/kan_deng/SiegeOfAcre1291.jpg
其实学术并不枯燥。学术辩论,技术进步,实际上是攻防战。对于进攻方而言,不仅要发现防守方的薄弱环节,而且要有克敌制胜的战略战术。
拿数据库说事儿,甲骨文(Oracle)成立于 1977 年,核心产品是数据库。40 多年来,经过不断地兼并其它企业,Oracle 的产品走向多元化。2010 年 1 月,Oracle 收购了频临倒闭的 Sun Microsystems,从一个软件企业,走向软件与硬件兼收并蓄的复合型企业 [2]。
但是数据库产品,仍然是 Oracle 的主要利润来源。Oracle 2010 年度财报说 [3],2008,2009,2010 这三年,Oracle 在软件方面的收入分别是,178.43 亿美元,188.77 亿美元,206.25 亿美元,分别占总收入的 80%,81%,和 77%。Oracle 的软件产品门类众多,其中主打产品是数据库和中间件软件,2010 年度占软件收入的 70% 以上。换句话说,2010 年度 Oracle 的数据库和中间件软件的收入是,70% x 206.25 = 144.38 亿美元。
数据库软件如此厚利,必然让同行们眼红。眼红的后果,就是竞争。竞争的战略有多种,例如,1. 全面对抗的阵地战,以产品质量和服务质量取胜,2. 价格战,同质产品,以低廉的价格取胜,3. 局部对抗的割据,割据的壁垒是行业的特殊需求,或者政治地缘的信息安全。
例如,IBM 的 DB2 数据库与 Oracle 数据库,产品定位相同,架构设计相似,这两位打的是阵地战,看谁的产品质量和服务质量能够更好一点点。目前来看,Oracle 的优势明显,据说 2009 年 Oracle 在数据库软件,占据了 49% 的市场份额 [4]。但是 IBM DB2 数据库,借助 IBM 大型机在稳定性方面的口碑,在金融业有一批死忠用户。
开源数据库 MySQL,在产品架构设计上与 Oracle,IBM DB2 也类似。如果拼产品和服务质量,打全面阵地战,MySQL 没有胜算。所以 MySQL 采用了开源的战略。开源实际上是一个复合战略。一方面是价格战,开源意味着零价格,赔本赚吆喝,做 Loss Leader,以此打开市场。另一方面,开源,以信息安全为诉求,寻求地缘割据。据说中国国家发展银行,为保障信息安全,防范隐藏的数据库后门,使用的数据库就是开源产品。
MySQL 于 2008 年 2 月被 Sun Microsystems 收购 ,而 Sun Microsystems 于 2010 年 1 月被 Oracle 收购 [5]。至此 MySQL 也变成 Oracle 资产,但是 MySQL 并没有让 Oracle 的市场份额和股价飙升,反而与 Oracle 嫡系数据库产品内讧。Oracle 会不会蓄意做烂 MySQL,让这个竞争产品退出市场,这是业界的一出大戏,一出正在进行的大戏。
2000 年后,云计算粉墨登场,云数据库作为云计算的一个组成部分,也随之亮相。假如你是云数据库的主帅,想入侵 Oracle 之类传统势力的领地,你将采用什么战略战术?带着这个问题去读论文和其它技术文献,就如同参与参谋部的沙盘推演。追踪相关财经新闻,研读市场报告,就如同 观摩战场实况。是不是很给力?
图二. 读论文,尤其是读牛人写的论文,如同回味经典战例。名将林彪。
Courtesy http://i879.photobucket.com/albums/ab351/kan_deng/18d28c93.png
云数据库,顾名思义,与传统数据库的区别在于 “云” ,体现在产品架构设计方面,有本质不同。Google 的 Bigtable [6],Amazon 的 Dynamo 数据库 [7],以及融合二者之长,Facebook 开发的 Cassandra 数据库 [8],是云数据库阵营中的三个军团。
Amazon 的 CTO,Werner Vogels 等人写的 Dynamo 论文 [7],既谈了 Dynamo 入侵传统数据库领地的战略问题,也谈了具体的战术问题,是一篇全面的作战计划。
在战略层面,Werner Vogels 等人认为,虽然云数据库的产品架构设计,与 Oracle 等等传统数据库有本质不同,但是在战争初期,立刻拉开架势全面对抗,并无胜算。与其全面对抗,不如局部割据。
如何局部割据?从数据库这个大市场中切割出一部分,满足这部分用户的特殊需求。所以割据的切入点,在于分析用户需求。用户之所以需要数据库,原因在于需要处理数据,而数据处理的基本操作是 “读” 和 “写”。所以,分析数据库的用户需求,关键在于分析用户对于 “读” 和 “写” 这两个基本操作的不同需求。
Werner Vogels 等人的论文,开宗明义,先分析 Amazon 对于数据库的需求。
1. 大规模:在高峰时段,Amazon 每秒钟需要同时为 500 名用户服务。
2. 高速度:每一笔订购业务,必须在 300 毫秒内完成。
3. 超稳定:即便在每秒钟同时服务 500 名用户的高峰时段,也必须保障 99.9% 的用户,能够在 300 毫秒内完成订购业务。换句话说,每 1000 名用户中,只允许 1 名用户的等待时间超过 300 毫秒。
4. 可扩展:随着历史数据的逐年积累,以及用户人数逐年增长,Amazon 数据库的容量也必须相应增长。数据库容量增长的时候,不需要改变现有数据库的结构,也不能终止现有数据库的运行。
5. 高弹性:流量比较小的时候,少用几台服务器,节约成本。流量大的时候,多用几台服务器,仍然保障 99.9% 的用户,等待时间不超过 300 毫秒。
比较一下云计算的四项基本原则,1. 大规模,2. 可扩展,3. 超稳定,4. 高弹性。Dynamo 数据库不仅满足了云计算四项基本原则,而且另外增加了一项 “高速度 “。
假如在其它功能与 Oracle 等等传统数据库都相同的情况下,Dynamo 能够圆满完成 ” 大规模 “,” 高速度 “,” 超稳定 “,” 可扩展 “ 和 “高弹性” 的额外要求,那么 Dynamo 与 Oracle 的竞争,是全方位的包围和歼灭,而不是局部的蚕食和割据。
Dynamo 的割据战略,体现在它处理的数据类型,仅仅限于 Key-Value。字典就是 Key-Value 的一个例子。字典由多个条目组成,条目分成 ” 字 “ 与 ” 解释 “。套用 Key-Value 的语汇来说,” 字 “ 就是 Key,” 解释 “ 就是 Value。查找的时候,只能按 ” 字 “ 来找 “解释”,也就是说,只能按 Key 来找 Value,但是不能按 Value 来找 Key。
而 Oracle 数据库主要用来处理关系式(Relational)数据 。所谓关系式数据,粗略而言就是一张横平竖直的表(Table),横着的是行(Row),通常行的数量很多,竖着的是列(Column),通常列的数量有限。
表与 Key-Value 数据的区别,主要体现在两个方面,1. Key-Value 只有两列,而表可能有多列,2. Key-Value 只能查寻 Key,而表可以查寻任何一列。所以,Key-Value 是表的一个子集。
至此,Dynamo 把自己准备割据的疆域,界定得很清楚,只处理 Key-Value 类型数据,而不处理泛泛的表数据。接下去的问题是,以 Key-Value 为界的疆域有多大,换句话说,Dynamo 的目标市场有多大规模?
关于这个问题,论文没有提供明确的分析,只是举例说,在 Amazon 系统中,Dynamo 用来处理购物车(Shopping Cart)。用户浏览 Amazon 网页的时候,把看中的商品放进购物车,结束的时候,把所有想买的商品,一次性结账。每个用户的 ID 是购物车的 Key,他准备买的商品的清单,是购物车的 Value。
割据的战略方向确定下来以后,接下去的问题就是研究战术。
1. 研究对手的防御体系,主要是分析竞争产品的内部系统架构,
2. 选择突破口,通常在竞争产品的内部系统中,选择最薄弱的模块下手。
Oracle 数据库的系统架构,自 1980 年代初定型以后,历尽无数挑战。为迎接挑战,Oracle 不断完整自己的产品,但是基本上都是些缝缝补补,系统架构的主体,至今并没有做重大修改。
一个在枪林弹雨中,傲然挺立了 30 年的系统架构,必然彪悍无比。
面对如此彪悍的防御体系,Amazon 的挑战者们的出击方向,是哪一个薄弱阵地呢?
Amazon 的牛人们,气焰很嚣张,他们认为,在 Key-Value 这个局部战场,Oracle 等等传统数据库的防御体系,处处薄弱。Dynamo 全线出击!
牛人就是有水平啊。。
Reference,
[1] 庄子,外篇,知北游。
http://baike.baidu.com/view/2790652.htm
[2] Introduction to Oracle Corporation.
http://en.wikipedia.org/wiki/Oracle_Corporation
[3] Oracle Annual Report, 10-K SEC Filing, July 1, 2010.
http://yahoo.brand.edgar-online.com/displayfilinginfo.aspx?FilingID=7340030-165663-381919&type=sect&dcn=0001193125-10-151896
[4] MySQL Adds Little to Oracle’s Stock Price or Database Market Share.
http://community.nasdaq.com/News/2011-01/mysql-adds-little-to-oracles-stock-price-or-database-market-share.aspx?storyid=52283
[5] Introduction to Sun Microsystems.
http://en.wikipedia.org/wiki/Sun_Microsystems
[6] Bigtable: A Distributed Storage System for Structured Data.
http://labs.google.com/papers/bigtable-osdi06.pdf
[7] Dynamo: Amazon’s Highly Available Key-value Store.
http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf
[8] Cassandra = Open Source Bigtable + Dynamo.
http://assets.en.oreilly.com/1/event/27/Cassandra_%20Open%20Source%20Bigtable%20+%20Dynamo%20Presentation.pdf