1、云计算基础知识 公有云: 公有云通常指第三方提供商用户能够使使用的云,公有云一般可通过 Internet 使用。能够以低廉的价格,提供有吸引力的服务给最终用户,创造新的业务价值,公有云作为一个支撑平台,还能够整合上游的服务(如增值业务,广告)提供者和下游最终用户,打造新的价值链和生态系统。私有云: 私有云是为一个客户单独使用而构建的,因而提供对数据、安全性和服务质量的最有效控制。该公司拥有基础设施,并可以控制在此基础设施上部署应用程序的方式。私有云可部署在企业数据中心的防火墙内,也可以将它们部署在一个安全的主机托管场所。私有云可由公司自己的 IT 机构,也可由云提供商进行构建。在此 “托管式专
2、用” 模式中,像 DMT 这样的云计算提供商可以安装、配置和运营基础设施,以支持一个公司企业数据中心内的专用云。此模式赋予公司对于云资源使用情况的极高水平的控制能力,同时带来建立并运作该环境所需的专门知识。 企业云: 一种基于云计算的,满足企业高扩展性、高可用性、组织和业务快速变更,实现企业协同管理,满足企业扩张、创新升级需求的平台技术框架。随着产业链整合、市场竞争日趋全球化,企业的需求和用户的消费习惯都在改变,企业需要提供简单、快捷的商务云计算服务来满足企业扩张、产业链整合及创新升级的需要。SaaS: SaaS 提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前
3、期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘 IT 人员,即可通过互联网使用信息系统。就像打开自来水龙头就能用水一样,企业根据实际需要,从 SaaS 提供商租赁软件服务。IaaS: IaaS 提供给消费者的服务是对所有设施的利用,包括处理、存储、网络和其它基本的计、算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、储存空间、部署的应用,也有可能获得有限制的网络组件(例如,防火墙,负载均衡器等)的控制。PaaS: Paas 提供给消费者的服务是把客户采用提供的开发语言和工具(例如 Java,pytho
4、n, .Net 等)开发的或收购的应用程序部署到供应商的云计算基础设施上去。客户不需要管理或控制底层的云基础设施,包括网络、服务器、操作系统、存储等,但客户能控制部署的应用程序,也可能控制运行应用程序的托 云计算:关系数据库你就要被淘汰了 http:/ 2010 年 10 月 24 日 10:11 来源:网界网字号:小 | 大【文章摘要】这些数据库具有一些共同特征,正是这些特征使它们特别适用于服务云计算式的应用。它们中的大多数可以在分布式环境中运行-意味着他们可以分布在多个地点的多台服务器上。它们本质上都不是事务性的,并且都牺牲了一些高级查询能力以换取更好的性能。(在很多情况下,这些数据库可以
5、通过对象调用来检索,而不用 SQL,无论如何,对程序员来说,前者更自然些)。“在云计算计划里将找不到关系数据库的影子,这并非偶然,因为关系数据库不适合用于云计算环境“Geir Magnusson,10Gen 工程副总裁这样认为。10Gen 是一家按需平台服务供应商。 Magnusson 帮助编写过 Apache Geronimo 应用服务器软件,本周在纽约举行的OReilly Web 2.0 会议上发言中他指出:“云计算是一种不同的技术,不同得足够改变开发者看待问题和解决问题的方式”。“我们将不得不重新审视我们做事的方式”,他说。 在发言期间,Magnusson 列举了许多被专门开发用于云计算
6、环境的新型数据库,包括Google的 Bigtable, Amazon 的 SimpleDB, 10Gen 自己的 Mongo, AppJet 的 AppJet 数据库以及甲骨文开源 BerkelyDB。 Magnusson 指出,这些数据库没有一个是关系型的(他特别强调了一个值得注意的例外“Drizzle”,MySQL 应用于 web 环境的一个精装版)。 这些数据库具有一些共同特征,正是这些特征使它们特别适用于服务云计算式的应用。它们中的大多数可以在分布式环境中运行-意味着他们可以分布在多个地点的多台服务器上。它们本质上都不是事务性的,并且都牺牲了一些高级查询能力以换取更好的性能。(在很多
7、情况下,这些数据库可以通过对象调用来检索,而不用 SQL,无论如何,对程序员来说,前者更自然些)。 尽管大型关系数据库如甲骨文公司提供的产品,已经被部署在很多数据中心,但云计算需要一种不同的设置来充分发挥其潜力。数据库组成部分在不同位置的分散对云计算很必要,这也是其名得来的原因。在辽阔的地理距离之间执行复杂查询可以减少响应时间,此外,设计和维护支持不同位置的相关数据备份并在一个点瘫痪时能保证该数据同步的体系并非易事。 “云体系结构里的衡量具有不同于我们现在使用的关系型结构的属性”,他说,其结果是:“在云体系结构里,关系不复存在,人们以群集形式看待数据”。 Magnusson 的观点得到会上另一
8、位发言人 AdaptiveBlue 公司的 Alex Iskold 的赞同,AdaptiveBlue 是一家以客户为导向的公司,该公司提供一种浏览器插件,能根据用户的使用历史,使用语义标记和 Web 服务体现个性化设置。该公司把服务建立在 Amazon 的托管平台服务上,包括 SimpleDB。Iskold 指出如果 AdaptiveBlue 使用关系型数据库那么这种服务将不会扩大到广泛使用云计算推波助澜 非关系数据库蓄势待发2009-04-18 19:26:03 来源:51CTO 在过去的日子,当你有数据需要存储管理的时候,办法很简单:安装一个正式的数据库,将需要存储的数据录入进去,让系统帮
9、你进行分类管理,而你只需要花时间去选择哪家数据库提供商。现在事情并非如此,一些新兴数据库工具开始泛滥,赋予了“数据库” 这几个字眼更多的含义,打破了传统数据库关系模型。有经验的数据库管理员称之为“玩具” ,认为它们有很严重的威胁,而这些威胁就是来自这些新兴的数据库。一些傲慢的家伙为新兴数据库很好用,速度很快,满足他们手头的需求,置威胁于不顾。非关系型数据库正在吸引人们的注意,因为它们可以忽略许多的规则,而这些规则正是经验丰富的数据库管理员积累的深刻教训。问题是现在这些规则的条条款款已成为一种束缚,使得很难创建一个真正强大的、让多台计算机一起运行的数据库系统。因为所有的 Web 应用程序设计者都
10、梦想构建一个多机运行的应用程序,保存所有用户的所有数据,要想做到这些,有些老的规则需要避开,甚至是打破。首当其冲的事情就是摒弃旧的 JOIN 操作。大学生曾经严格的按照课后作业的要求,如何标准化数据,将一个表格划分为许多的部分。那个时候磁盘非常贵,数据标准化工作显得额外重要。问题当数据分散在不同机器上的时候,JOIN 操作真的使得速度变得很慢。现在磁盘空间非常便宜,许多数据模型并没有从数据标准化中受益,因此 JOIN 操作很容易就被摒弃。立即一致性和最终一致性的差别依赖数据的重要性来定。那些听到这些新兴数据库就要拿心脏病药的保守者通常是银行的程序员,它们希望确保每天结束后收支相等。毕竟银行的领
11、导不能忍受由于失败的数据库事务而导致帐目出错。但是许多现代的 Web 站点不会因为某个事务失效而不能运行的。我看见 Facebook经常有小故障。不会因为某些评论数据丢失了就不能运行了。这些网站不会像银行那样苛刻关注帐目清算,它们不需要关系数据库所有的功能。(一些人开玩笑说银行应该把购买Oracle 许可证的钱拿出来成立一个基金,赔偿那些因为失败的事务操作导致钱丢失的人们。)为了更好地理解这些非关系型数据库的扩展层,我捡了几个进行测试,构建了几个测试应用程序。发现它们主要的命令操作不会超过这三个:插入、更新、删除。有一些提供群集,有一些只能提供某种服务,有一些夸大其词说接管整个服务器栈,有一些
12、比其它的数据库提供更好的 AJAX 工具。但是,他们中没有一个合适,它们都不能供银行来使用。 文中我没有介绍其它几个有趣的数据库,一是由于本文篇幅限制,二是因为它们和我以下提到的几个没有多大的区别。举个例子,Sun 公司正在构建一个关系型数据库,称之为 Derby,用 Java 虚拟机一起使用。Oracle 也有它自己的嵌入式数据库,叫做 Berkeley DB,但是现在称之为 Oracle Embedded Database。有些程序员甚至创建了低费用的程序库,将对象直接写入到磁盘中。这些产品也延伸了“数据库” 这几个字眼的含义,但是我不准备在这里陈述它们。Amazon SimpleDB 数
13、据库SimpleDB 是 Amazon 推进云计算服务计划中最为高级和最似云技术的组件之一。一旦你签约雇佣 Amazon 的服务,获得通行密码,你就能将包含键值的 Web Service XML 文件装载到 SimpleDB 中去,只要你持续支付费用,它将一直为你存储这些数据。你不需要考虑安装任何应用程序或者备份什么。Amazon 在它的 Web service 墙后已经为你隐藏了所有这些工作。SimpleDB 是两级分层结构。最上面的一级是 “domain“,第二级是“item“ 。在你选择domain 和 item 名之后,你就写入了键值。SimpleDB 相对来说有丰富的 API,拥有对
14、数据排序能力,甚至具备计算出匹配查询结果的 item 数目的能力。你甚至能写查询语句,可以查询那些不从某个特定字符串开始的值。这或许和我们使用的 SQL 和 Oracle 数据有很大的区别,但是这些低租金的数据库也有自身的缺点,甚至不能对结果集进行排序。SimpleDB 设计初衷是和 Amazon 的 Simple Storage Service (S3)一起使用的,但是每对键值的大小限制在 1024 字节。这对于很多的字符串来说,已经足够了,但是对于许多的内容引擎是不够的。因此你在 S3 中存储的是数据的指针。现在使用类似 JOIN 这样的操作还有一些限制,需要多种调用。每个查询只能运行 5
15、秒钟。结果仅能保持 250 个 item。每个 item 仅有 250 对。还有许多的常见操作有限制,有人开始思考 SimpleDB 是给我们的生活带来了便捷或是麻烦。Amazon 开始重写 API,企图得到更多更好的认证。到 2009 年 9 月,整个 SSL 都会运行 call,提供安全和认证。Amazon 也增加了安全机制,使用更多的复杂的哈希算法来将更多的请求打包。这些仅仅是 Amazon 取得的小的改进。该公司也创建了更多的程序库,让服务的使用更加简单。这里有许多的软件包和主流以及一些少见的语言结合使用。文档相当广泛,很容易找到。通常你可以很快启动你的工作,开始存储数据所用的时间也缩
16、短了。现在价格也很合适。 Amazon 最近将存储的价格从 1.5 美元降到 25 美分每 G 字节。公司将收费透明化,目的是激励用户来计划他们的消费预算。Amazon 有一套先进的条款来处理使用期限问题。有许多的条款来处理你可能遇到的问题,有一些吸引了我的注意力。举个例子,Amazon 申明, “我们可能删除最近 6 个月存在 SimpleDB 中却没有访问的内容,但是不用负任何责任。 ”这对于只是为了给系统做测试的人来说很容易接受。从措辞来看,Amazon 此举的目地就是为了保持它的数据中心良好运行。还有其他的一些问题。举个例子,使用期限条款包括一长列禁止数据,如“助长非法活动”,带有“种
17、族、性别、宗教、国籍、残疾、性取向、年龄”歧视的数据都是禁止的。这存在一个问题。想像一下如果为某个教堂开展反男同性恋婚姻运行了一个网站。这听起来你确实有性取向歧视。但是,如果你是开展男同性恋婚姻的宣传活动,反对这些教堂的呢,这个时候还能说你是在歧视这些基本的宗教信仰吗?我对那些正在分析处理这些抱怨的律师感到遗憾,但是至少他们可以高枕无忧了,因为他们知道这些数据可以以任何理由或者是没有理由的删除掉。如果你仅使用免费的服务,Amazon 不会给你任何通知,就会删除你的数据,但是你如果是付费用户,就承诺有60 天的提醒通知,在期限内你就能将你的数据处理好。Google App Engine Goog
18、le App Engine 本质上不是一个数据库。他是一种云技术,用于分布式 Python应用程序,它是和自己隐藏在内部某个地方的数据库一起工作的。不首先通过应用程序层来访问数据库是不可能的。但是封装一个数据库命令和格式化请求数据并不困难,因此我们可以认为 App Engine 是一个数据库,只不过这个数据库附加了一个以 Python 语言写的嵌入程序。这种额外定制的层非常有用。许多关于其它“玩具”数据库的抱怨围绕在某个缺少的操作导致不能找到正确的结果。如果你想给这里的数据库增加一些功能,你能够用 Python 语言自己开发出来。如果你想要有 JOIN 操作,你能自己用 Python 语言写,
19、也能同时定制内存缓存器。这对于那些让用户存储他们自己数据的 Web 应用程序特别有用。如果你需要增加安全控制权限,限制每个用户看到自己应该看到的内容,你也可以用 Python 语言实现。App Engine 数据存储比 Amazon 的 SimpleDB 更具结构结构性,它的结构性很大一部分来自 Python 的对象模型。你存储的不是成对的键值,而是 Python 对象,这些对象被定义成非常类似于 SQL 模式。你能为每列设置数据类型,在你需要的列之间进行索引。事务机制也深深的和 Python 联系在一起,因为每个事务实际上就是一个 Python 函数。这么说有一些过分简单化,因为对这个 Py
20、thon 函数还是有一系列的限制的 (如每个数据项只能更新一次)。好的消息是 Google 数据项正在创建特殊的事务方法,对一些普通行为(如“创建”或者“更新”一行)进行抽象。检索有意做成类似于 SQL 查询,实际上,Google 提供它自己的类 SQL 语言,GQL。使用的时候,GQL 被解析成查询语句。App Engine 还有一套基于 Python 的方法集,方法集合拴在一起处理数据集合和查询。你不需要浪费分析查询周期。值得一提的是 Python 栈包括了一些最好的数据库也不具备的功能特性。有一个程序库来操作图像文件,通过剪切和 Goolge 特有的“I feel lucky”功能对图片
21、进行修补。你也可以将数据存储为 Goolge 文档,电子表格和日程数据项。起初 App Engine 看起来仅仅像是一个数据库,但是你也能容易的在 Google 栈里进行数据抽取。直到几周前, App Engine 还在测试阶段,使用它是免费的。只要你的使用空间大小在基本的限额之内,它仍旧是免费的。另外,Google 的收费机制和 Amazon 极为相似。存储的价格比 Amazon 的更便宜(每月每 G 字节 12 美分),带宽的收费是相同的(10 美分没 G字节)。Google 的使用期限责任制与 Amazon 的不同。你需要制定一个个人隐私策略,保护你用户的数据。如果你的用户违反了版权规定
22、,你必须反应给 DMCA(千禧年数字版权法),你不这么做的话,Google 将会为你这么做。 Google 保留在任何时间以任何理由删除内容的权利。 “你同意 Google 删除、丢失任何存储内容和服务试用期传送内容、保持的通信而不负任何责任。 ”这些条款越来越受到关注。现在 Google 承诺在决定注销账户前预留 90 天的时间让你将数据从服务器取走。其它受关注的条款在 DMCA 的问题上,这使得许多人都不解。存在这么一个问题,如果你决定离开 Google 或者说 Google 让你离开时该怎么办。Google 发布了一个不错的开发工具,让你轻松在本地机器上测试你的应用程序。使用这些工具在你
23、机器上测试是没有技术问题的,除非你没有支持类云技术的功能。包括测试在内的数据存储自身是不会自动复制自己的,但是在自己本地机器上却能实现其它的功能。像以前一样,有一些法律问题,因为“许可证的唯一目的就是让你使用和享受提供服务的好处。”Apache CouchDB 数据库毫无疑问我们需要使用云技术来享受这些新的服务。CouchDB 是众多开源项目中的一个,该项目构建了一个用于存储 key-value pairs 的数据库。这个项目使用 Erlang 语言编写的,受 Apache 软件基金支持。你可以下载源文件在任何机器上安装,然后编译运行它们。使用它是没有费用的,除了你需要花钱购置服务器。Couc
24、hDB 与 Amazon 的工具是相似的,但是它有一些特别之处。你仍旧以行的形式来存储 key-value pairs,但是这些 key-value pairs 可以是任何标准的 JSON(JavaScript Object Notation)数据类型,如布尔和数字类型。值的范围不局限于 1024 字节长度的字符串,有办法可以让其存储长数值,甚至是图形。所有的请求和响应格式化为 JavaScript。没有基于 XML 的 Web Services,只有 JSON. 最大的不同在于写查询语句。CouchDB 可以通过 JavaScript 单独写 map functions和 reduce fu
25、nctions。一个简单的查询或许仅仅就是一个 map function,带有一个“If” 子句来测试数据比某个数值大还是小。只有在你试图计算统计由 map functions 查询的数据时才会用到 reduce functions。发现计算行的个数很容易办到,但是也有可能丢失了一些其它很酷的特性,因为 map function 只能由 JavaScript 来写。我除了发现计算出匹配的数目,至于其他的非学术的用途我还没有弄清楚。文档包括了一个给人印象很深刻的 reduction function,用来归并统计的,但是我不知道 CouchDB 真的是否是处理这类事情的正确工具,如果你需要更复杂
26、的统计,妥当的就是坚持使用传统的数据库,获得统计报表。这个项目还有一些限制的。项目的首页称之为“ 一种分布式,容错,自由面向文档模式的数据库, ”没有一些人工干预你是不会获得分布式和容错功能的。CouchDB 有一个好看的AJAX 用户界面,包含了一个 form 表单,能让你复制数据库。但是还不是自动的。CouchDB 计划会增加存取控制和安全模式,但是没有以文档的形式展示出来,在API 中也没显示。他们设计的初衷就是使用纯 JavaScript,取代 SQL,或者其他的语言,这是一个好的主意,你不会获得或者失去权限阅读文档,你能写 JavaScript 函数来返回 true或者 false
27、结果。使用纯 JavaScript 也并非坏事。当我使用这些数据库的时候,我很快发现有人能够在客户端开发一个安全模型层,使用一些不错的加密技术。在客户端加强安全控制,就能减少服务器端的工作,我在半透明数据库一文中有一些介绍。这个特点正在驱使一些极端用户使用 CouchDB 作为整个服务器栈。J. Chris Anderson,项目的委托人之一,写了一篇文章,证明 CouchDB 是一个应用程序服务器的全部所需。用于显示和与数据交互的业务逻辑是用 JavaScript 编写的,从 CouchDB 下载后是一个 JSON 数据包。在 Anderson 的眼里,当所有的功能都能用 JavaScrip
28、t 实现,在服务器上使用Ruby、Python、Java、 PHP 没有什么大的意义。这种看法或许有些极端,因为总会遇到一些情况,客户机器不能保证能正确的实现一些功能,客户端的客户比我们知道的东西少。像 CouchDB 这种轻量级的工具使得人们开始考虑完成一项工作真正需要多少代码。Persevere 数据库初一看,Persevere 数据库像其它大多数数据库一样。将键值对录入进去,它就将其存储起来。但是,这只是一个开头。Persevere 提供了完善的对象分级结构,使得用户可以给数据库增加更多的结构,提供比上一代传统数据库更多的 form。Persevere 更多的表现出是一种 JavaScr
29、ipt 对象的后端存储设备,JavaScript 对象由像 Dojo 这样的 AJAX 工具包创建。Persevere 引以为自豪的是它的“schema-free”,这一特点使得它与其它数据库有很大的区别。Persevere 可以让你随心所欲的增加 schema。Persevere 并非把分级结构的顶层称为一个 domain(SimpleDB 这么称呼),也不称之为文档(CouchDB 这么称呼) ,Persevere称之为对象,它甚至可以让你创建对象的子类。如果你想违背规则,你也能坚持某些字段使用某一类型,但是这是不推荐的。Schema 规则是可选的。 由于 Persevere 与 Dojo
30、 连接紧密,Persevere 提供了大量的连通性。你可以创建网格,树形窗口小部件,接着将其直接链接到 JsonRestStore,窗口小部件让你编辑数据。你可以通过 20 行的 JavaScript 代码就能远程访问一个数据库。 我遇到过许多的小的误操作,这些误操作可能是由于我缺乏经验导致,而不是潜在的Bug。当我准确的弄清楚如何做的时候,一些操作就会正确启动。Persevere 本身并不是特别需要掌握,但是 AJAX 框架是你直接面对的。来自 Dojo 的文档比大多数 AJAX 框架要好,但是你得花一些时间来学习 Dojo,才能掌握隐藏在 Persevere 表面后的潜在复杂性问题。云技术
31、和群集尝试了这些数据库之后,我能明白为什么有人会一直称它们为“玩具”。它们功能有限,即便有新的功能,但是这些新的功能会约束你的选择。许多次我意识到 SQL 世界的标准功能让生活更加简单。许多基于标准 SQL 的工具,如报表引擎,不能连接这些新兴的数据库。使用 MySQL 或者 Oracle 这些数据库能够完成许多重大的功能。但是,这不代表将来在我的项目中我不去使用这些新兴的数据库。它们是固态数据存储,与 AJAX 集成得如此紧密,使得开发更加容易。另外,多数 Web 站点不需要 MySQL或者 Oracle 的所有功能, JOIN-free 模式对许多普通数据结构仍旧非常有用,包括一对多关,一
32、对一关系型数据,甚至多对一关系。另一个问题是是否使用云技术或者构建你自己的群集。Google 和 Amzon 都提供多机服务承诺,CouchDB 和 Persevere 是不能匹敌的。Persevere 团队声称在将来将会扩展。但是很难预料 Amazon 和 Google 的承诺有多好。如果 Amazon 和 Google 丢失了一个硬盘怎么办?如果它们丢失了一个机架怎么办 ?他们还没有做出很清晰的承诺和使用期限所负的责任。举个例子, Amazon 的条款重复声明了很多次:“我们对于为授权的访问、改变、删除、损害、丢失任何你的内容、应用程序,或者你提交的数据、服务帐号都不负责任。 ”我不是说在
33、责备 Amazon 或者是 Google,因为谁都不知道谁应该对丢失的事务负最终的责任。有可能是任何一个程序员,实际上也很难判断谁破坏的。但是,我们知道更多信息会更好。SimpleDB 中的数据是存储在 RAID 磁盘中吗?当同一地区发生地震,飓风或者火灾时别的地区另外的备份吗?在线备份社区正准备开始提供这类服务的细节了,但是云技术还没有计划这样做。所有这些顾虑让我们清楚的认识到他们仍旧是玩具数据库,打破了传统数据库的规则,对那些可以忍受数据丢失的应用程序是合适的。它们很有趣,有快,在价格方面也很合适,你的注意力可以不用放在选择数据库提供商,而是放在如何解决没有 JOIN 操作怎么办的问题上。