探秘亚马逊云环境中的关系数据库服务云和虚拟化

2010-01-06    来源:中关村在线    
亚马逊的关系数据库服务(RelationalDatabaseService,RDS)给了人们一个云环境中的MySQL数据库服务器。当前,数据库作为服务的概念开始得到认可,这必须感谢像FathomDB这样的产品在其中作

  亚马逊的关系数据库服务(RelationalDatabaseService,RDS)给了人们一个云环境中的MySQL数据库服务器。当前,“数据库作为服务”的概念开始得到认可,这必须感谢像FathomDB这样的产品在其中作的贡献。亚马逊本身提供了在一个EC2实例上运行MySQL数据库,和亚马逊的SimpleDB提供的服务类似,但和RDS又不完全相同。

  那么,亚马逊为什么要发展RDS呢?特别是,为什么又选择了RDS来超过SimpleDB呢?

  SimpleDB的名字就给其用途做了很好的阐释。SimpleDB的目的是作为一个简单的数据库来使用。SimpleDB存储元素(属性和值)是由一个ID字段来确定行的位置。如果用户需要基本的读、写和查询功能,这种结构就够用了。但是,SimpleDB不是一个关系型数据库。

  前面说到亚马逊能在一个EC2实例上运行MySQL,那岂不是和RDS提供了相同的功能?不错,但RDS对MySQL的组件进行了削减,只留下了基本部分。而且它也不像一个EC2实例,RDS不需要配置或管理操作系统。

 

即时数据库实例

  从用户和开发人员的的角度来看,亚马逊RDS的功能不会超过一个远程的MySQL数据库。亚马逊引用了一个RDS为基础的MySQL服务器作为一个数据库实例。亚马逊提供了一个基于API的Web服务来创建和管理数据库实例,其余的则可以通过标准的MySQL通信协议来处理。

 

  当一个数据库实例被创建时,用户可以指定其属性以控制其行为和能力。例如,一个数据库实例的类别决定了服务器的可用内存和处理能力。亚马逊指定的处理能力度量称为弹性计算单位,或者ECU,大约相当于2007年的1.0GHzXeon处理器。实例类名单就像快餐菜单。从一个1.7GB内存和一个ECU的小数据库实例开始,逐渐升级到大的数据库实例,然后是一个超大型数据库实例、一个双超大型数据库实例和超过4倍、需要68GB内存和26个ECU计算能力的最高级数据库实例。

 

  另一个属性在创建数据库实例时定义可用的存储空间,它可以从5GB到1024GB。而亚马逊RDS最高支持1TB的数据库,该限制适用于一个单一的数据库实例。

  此外,当用户创建一个数据库实例时,还可以定义它的备份窗口。亚马逊会在一个不到24小时的时间间隔期间自动备份数据库。备份窗口与用户密切相关的参数是保存期,它可以指定亚马逊保留备份多少天。目前,亚马逊数据库备份可以最多保留8天。

  最后,如果用户不希望依赖于日常的自动备份,用户还可以随时要求进行数据库快照。此外,由于每个快照是通过一个独特的标识符关联,用户可以创建快照系列和将数据库还原到一个特定的过去状态。当然,快照数据存储不是免费服务。

 

使用RDS

  若要使用亚马逊RDS,用户还需要两样东西:命令行工具和一个兼容MySQL的客户端应用程序。前者是由亚马逊提供的一套Java应用程序,可以从亚马逊网站下载。它们可以对数据库实例进行管理,包括创建、调整参数、删除等。后者可以是一个能与MySQL服务器通信的任何应用程序。

  一旦下载了命令行工具,用户就可以对环境变量进行设置了。一个指向包含用户的亚马逊Web服务的访问ID和密钥ID的文件,其它还包括命令行工具的路径。这样做后,用户就可以使用这样的命令来创建一个小的实例(1个ECU计算单元和20GB的存储):

  rds-create-db-instance--db-instance-identifierrginstance--allocated-storage20---db-instance-class db.m1.small--engingMySQL5.1--master-usernamergrehan--master-user-passwordmypassword --db-nameADBTest--headers

  在这种情况下,rds-create-db-instance是一个命令行工具。

  这将产生一个数据库实例作为一个例子,其管理员的登录名是rgrehan,密码是mypassword。此外,这个名为ADBTest的数据库将创建一个实例,并分配有一个最大20GB的存储空间。

  为了将客户端应用程序连接到新的数据库,用户需要知道它的主机路径。这时用户可以通过“rds-describe-db-instances”命令得到帮助。该命令将返回数据库实例与用户的账户相关的信息,包括每个实例的路径。如果用户不希望得到帐户中所有数据库实例的信息,用户可以用“rds-describe-db-instances”命令加相关实例的方式得到直接的路径。

  最后,用户需要授予客户端应用程序访问数据库实例的权限。这就需要用到“rds-authorize-db-security-group-ingress”命令,让其通过数据库服务器所在的IP地址的安全组入口命令。如果用户属于亚马逊EC2实例定义的安全组,那用户就可以在IP地址允许的范围内进行。RDS只允许来自安全组的客户端进行连接。

  从这一点来看,用RDS工作和使用任何MySQL服务器工作差不多。任何能与MySQL“会话”的应用程序或工具都可以与RDS数据库实例通信。用户甚至可以使用标准的MySQL命令行监测工具来创建用户和表、发出SQL命令等等。唯一的限制是RDS不允许超级权限,虽然RDS也提供了MySQL的“Kill”特殊命令,以填补超级权限缺失造成的空洞。

 

  如果用户喜欢用编程方式操作数据库实例,而不是通过命令行工具,亚马逊已发布了各种编程语言库的集合。语言库集合包括了Java、C#、PHP、VB.Net和Perl等,可以通过Web服务远程调用。

按需付费

  亚马逊网络服务的基本原则是按使用情况收费。因此RDS的费用主要产生在MySQL应用程序的使用配置上。

  目前亚马逊提供了几个数据库实例分类,每个都有按小时收费的价格。其中,一个小数据库实例的费用是每小时11美分;四倍超大数据库实例是每小时3.10美元;其余的则在两者之间。

 

  需要注意的是,即使数据库不回应任何MySQL命令,但收费是从用户开始掌控数据库实例开始算的。用户必须停止数据库才能停止计费,但停止计费后用户不会丢失任何数据。用户可以要求创建快照,并在以后的时间里根据快照进行恢复。当然,亚马逊也会对快照进行收费,具体的标准是:每千兆字节每月15美分。

  此外,虽然备份不需要另外花钱,但是需要用户备份时使用的空间不超过其租用时分配的空间。如果超过了,则需要按照每千兆字节每月15美分的标准付费。任何人想采用亚马逊的RDS最好能和电子表格一起使用,以便协助成本估算。

1
3