探索云和 NoSQL 数据库设计基础
在提及数据库扩展性时,人们就会想到相对低成本的、高性能的 NoSQL(不仅是 SQL)数据库,它包含一些非常有用的特性:水平可伸缩性、对弱一致性模型的支持、更灵活的模式和数据模型,以及对简单的低级别查询接口的支持。本文将探讨 NoSQL 数据库(包括 NoSQL 系统 HBase、MongoDB 和 SimpleDB)的特性和功能概述,还将介绍云和 NoSQL 数据库的设计基础。
就创建、交流、访问内容、共享信息和购买产品而论,快速扩展的新一代基于 Internet 的服务(比如电子邮件、博客、社交媒体、搜索和电子商务)实际上重新定义了 Web 用户的行为和趋势。由于这些系统的数量的不断增多,IT 专业人士正见证着所生成数据和所消耗数据的规模的扩大,不断增长的伸缩性需求和新功能需求为传统关系型数据库管理系统 (RDBMS) 带来了新的挑战。
我们先来了解一下低成本高性能 NoSQL 数据库软件。NoSQL 数据库软件的主要特性包括:
1.能够水平扩展数据。
2.支持较弱的一致性模型( 原子性、一致性、隔离性和持久性属性之一,确保数据库事务得到可靠处理)。
3.能够使用灵活模式和数据模型。
4.支持简单的低级查询接口。
本文将探讨数据库系统的最新进展,以支持 Web 规模数据管理。本文概述了各个 NoSQL 系统备用方案的主要代表(HBase、MongoDB 和 SimpleDB)的特性和功能,以及它们对不同种类 Web 应用程序的支持情况。
云数据库设计基础
云计算如何改变人们与数据的交互方式?
所有人都可以轻松地处理数据事务
Web 技术的最新进展使得所有用户都可以轻松地提供和使用所有格式的内容。例如:
构建一个个人网站(比如,Google Sites)。
创建一个博客(使用 WordPress、Blogger 和 LiveJournal).
在网络社区进行交互(使用 Facebook、Twitter、LinkedIn 等等)。
这些渠道已成为商品和工具,使更多的人能够更多元化地轻松创建、使用和传输更多数据,比如,采用博客、微博、社交网络交互、视频、音频和照片的形式,数据可以是结构化的,也可是非结构化的。
应用程序变成了分布式的、可伸缩的服务
很明显,系统和工具制造商的下一个目标是以分布式的、可扩展的、可广泛访问的 Web 服务的形式帮助实现每个应用程序。(例如,请查看 Facebook、Flickr、YouTube、Zoho 和 LinkedIn 上的这些服务)。
满足这一标准的应用程序是数据密集型的、高度交互的应用程序。例如,在撰写本文时,Facebook 宣称每个月有 8 亿活跃用户(现在可能有 1 亿)。每个用户的朋友圈大约有 130 个人。此外,约有 9 亿个注册用户交互对象,比如页面、组、活动或社区主页面。
其他规模较小的社交网络,比如 LinkedIn,主要针对专业人士,注册用户也达到了 2 亿。Twitter 宣称每月有 1 亿注册用户。假设存在这样一种情况:终极目标是使那些想要实现这个高级伸缩性和可用性的人能够轻松地实现其目标,那么如何以最少工作和资源来实现是一个挑战。
云模型简化服务部署
云计算技术是一种相对较新的模型,可托管软件应用程序(尽管云是如此完整,以至于到目前为止,很难从将它从整个数据事务系统的其余部分中分割出来)。云模型简化了耗时的硬件准备、硬件购买和软件部署过程,彻底改变了计算资源、服务商业化以及交付客户的模式。特别是,它将这类基础架构的位置转移到网上,减少了硬件和软件资源管理的相关成本。
这意味着云使得期望计算成为实用工具的长久以来的梦想得以实现,规模经济理论有助于实现有效地降低计算基础架构成本的梦想。
云计算具有许多软件应用程序部署优势,比如按使用量付费成本模型、缩短了上市时间,以及(几乎)无限资源和无限可伸缩性方面的洞察。
新发行版模型意味着更多的新数据和数据类型
实际上,云计算模型的优势为新应用程序部署开辟了新的途径,从经济学角度讲,这些应用程序在传统企业基础架构设置中不具有可行性。因此,云成为了一个日益流行的可在各个领域(比如零售、金融、新闻和社交网络)托管软件应用程序的平台。应用程序数量的增加导致所生成数据和所消耗数据的规模的扩大。这就是促使这些应用程序的云托管数据库系统成为应用程序软件栈中的关键组件的原因。
云模型导致了云数据库模型的出现
有很多系统和方法都可以用来应对在云计算环境中托管数据所带来的挑战。事实上,有三个主要技术常用于在云平台上部署软件应用程序的数据库层:
1.虚拟化数据库服务器
2.数据库即服务平台
3.NoSQL 存储系统
虚拟化的角色
虚拟化是云计算技术的关键组成部分;它允许您将物理硬件详细信息提取出来,并为高级别应用程序提供虚拟资源。
虚拟服务器通常被称为虚拟机 (VM)。VM 允许将应用程序从底层硬件和其他 VM 中隔离出来。理想情况下,每个 VM 既不知道同一物理机上运行的其他 VM 的存在,也不受它们的影响。
一般而言,资源虚拟化技术在应用程序和应用程序使用的资源之间添加了一个灵活的可编程的软件层。定义虚拟化数据库服务器的概念充分利用了这些优势,特别是当软件应用程序的现有数据库层可直接导入公共云中的虚拟机时,这些软件应用程序是专为在传统数据中心使用而设计的。
这样一个迁移过程通常只需要在部署的应用程序代码或基础架构中进行微小改变。和其他软件组件一样,在该虚拟化数据库方法中,数据库服务器被迁移到虚拟机中运行。为每个数据库副本部署一个 VM 会带来性能开销,这类开销估计小于 10%。实际上,虚拟化数据库服务器方法的一个主要优势是,应用程序可根据需要完全动态控制数据库层(数据库服务器)物理资源的分配和配置。
因此,软件应用程序可以完全利用云环境的弹性特征来实现其定义和定制的可伸缩性,并降低成本;然而,实现这些目标需要提供一个接纳控制组件 (admission control component),负责监控系统状态并根据已定义的应用程序需求和策略采取相应的措施(例如,分配更多/更少的计算资源)。该接纳控制组件最主要的一个职责就是决定何时增加或减少分配给软件应用程序的数据库服务器数量。
数据中心的多租户角色
由于超量配置以及典型企业应用程序资源需求随时间而不断发生变化 ,往往导致数据中心未得到充分利用。多租户 是托管服务的一个优化机制,在该机制中,多个用户可以合并到同一个操作系统上(一个软件实例运行在一个服务器上,但为多个客户端提供服务),因此,规模经济原理有助于有效降低计算基础架构的成本。
特别是,多租户支持资源共享,通过减少配置每个租户的需求来提高利用率,实现了负载最大化,使得多组合这个极具吸引力的机制可用于:
云供应商(能够用更少的机器服务于更多的用户)和
云服务客户(不需要支付租赁一个完整服务器的费用)。
数据库即服务 是这样一个概念,第三方服务器供应商托管一个关系型数据库作为一种服务。这类服务缓解了用户购买昂贵硬件和软件、处理软件升级以及雇佣专业人员进行管理和维护的需求。
实践中,如果现有软件应用程序的底层 RDBMS 与提供的服