数据即服务(DaaS):云的数据结构
Ruby 发表于:10年05月25日 11:31 [转载] 51CTO
NoSQL 的世界
目前,NoSQL这一用语与它所宣传的数据组织方式一样,都是未明确定义和非结构化的。NoSQL 背后的整体理念是非结构化的、灵活性的数据。高可用性、高扩展性,还有最重要的:分布式的。正如Eric Breawer的CAP原理中所述,在大多数NoSQL系统中,为了获得如此高的可用性,一致性被弱化,这样做的结果是所谓的“最终一致性”(Eventual Consistency)。在过去几年里,也许你已经听说一些比较知名的相关实施,比如Google 的BigTable 和Apache Hadoop。确切来讲,这些实现提高了实际扩展性的门槛并制定了NoSQL标准。但是,当前NoSQL 项目的增加所有带来的超级前缘的解决方案正慢慢地让开发者变得无忧无虑。
但是这些解决方案已经足够了吗?在很多情况下,NoSQL是非常有用的,但大多数基于磁盘的NoSQL系统关注的焦点是大容量和处理量而不是低延迟的快速访问。NoSQL数据和内存数据网格的交叉地带还存在一个“子物种”,这个方案能够快速、地延迟低访问内存数据。这类系统包括 Amazon的Dynamo和开源项目Voldemort 和Infinispan。
数据云:DaaS
现在我们来看看另一个被过度宣传并被赋予过多意义的词汇:云计算。无论是公共还是私人应用,在可扩展、易用性和高度硬件利用率的特种领域,云计算一直很受欢迎。这些特殊要求已经由架构(IaaS)和平台(PaaS)服务实现。这种方式也可应用于数据存储。设想以独立于平台方式连接到一个服务,用于存储和检索数据,与传统的RDBMS连接没有太多不同。不过,现在你无需了解或担心存储数据所用的系统类型,而且获得低延迟、高扩性和高可用性的保证。对于任何云部署,为了同时获得灵活的、按需定制的架构和中间件,这种存储系统的虚拟化都是必须的。另外,具备灵活性、低延迟、分布性等理想特征的技术也能够为这种虚拟化提供帮助。通常这会设计到多种NoSQL解决方案。即使只用于内部的私人云应用,这样的解决方案将需要具备多租户(multi-tenancy)、计量(metering)和状态监控等功能。为了能够将数据从不同的应用中隔离开来,多租户是必需的,也许还会用某些形式的名空间(namespacing)。计量对于正确地分摊运行该服务的共用成本是至关重要的。为了实现计量需要记录占用的CPU周期、消耗的磁盘和内存空间,甚至还会包括宽带的占用量。
Amazon公司提供了一个这样的服务,称为SimpleDB。Google的AppEngine提供访问BigTable的DataStore API接口。但是,除了这两款产品,当前这一市场还是一片空白。出露头家的云服务提供商(或者未云服务提供商提供软件的销售商)应该认真对待这种数据服务,确保它成为其产品的一部分。
对于应用程序开发者,这意味着什么?
所幸的是,大多数人不再像过于那样多地域数据库进行互动。ORM工具,如Hibernate(一种 JPA 标准的实现)已经在RDBMS上添加了一个抽象层。我期待使用这类 ORM 工具的插件能够让 RDBMS 更为容易地转换为灵活性的云存储服务。其中一个是刚刚推出的SimpleJPA项目,它提供构建在Amazon SimpleDB之上的JPA功能;另一个是Infinispa即将推出的JPA接口。虽然更多作为DaaS的插件将出现,但我不认为这些工具是万能灵药,能够现实真正的透明迁移。我认为开发者仍然需要对应用程序数据进行长期认证地思考,理解存储方式的内在原因。在我们设计的数据模型中,某些RDBMS特有的假设总是时隐时现,这是因为RDBMS技术已经根深蒂固地融入了我们有关数据的思维之中。当我们转而思考非 RDBMS 存储时,这些东西常常称为阻碍或者减低效率。
