应该没有开发者不认识Microsoft SQL Server,但是肯定有开发者不知SQL Azure 为何物。SQL Azure 是微软云计算平台(Windows Azure Platform)的三大组成部分之一,是一个部署在云端的关系型数据库引擎,它支持SQL Server中绝大多数和开发有关的功能。也可以简单的认为SQL Azure就是SQL Server的云端版本,但是还是有一些区别,我们将在下文进行介绍。本文对SQL Azure做一个概述,主要从SQL Azure的架构、主要功能、访问SQL Azure的数据、SQL和SQL Server功能比较这几个方面来介绍,以期大家对SQL Azure有一个整体性的认识。
SQL Azure的架构
就像微软云计算服务平台(在这里笔者认为微软云计算服务平台包含了微软云计算平台,还包括了构建在此平台上的服务,如living Service,当然这只是作者的理解,值得商榷。)上的其它服务一样,SQL Azure也是一个高可用性、高可扩展性的数据实体服务,这个服务跑在云端,或者说是跑在微软公司在世界各地建立的数据中心上。
数据中心(Data Center,DC)通过实现统一的数据定义与命名规范、集中的数据环境,从而达到数据共享与使用的目标。一个典型的数据中心常常跨多个供应商和多个产品的组件,包括:主机设备、数据备份设备、数据存储设备、高可用系统、数据安全系统、数据库系统等等,当前数据中心和下一代数据中心的参考架构如图1:示:
图1 数据中心架构
其实我们从上图中的下一代数据中心架构可以看出来,目前构建云计算平台的数据中心是就是上图中下一代数据中心架构的实现。微软数据中心还提供了负载均衡、数据容灾、备份恢复功能,当然,在未来它可能支持的功能有:MARS支持、空间坐标数据和50GB的容量选项。还会提供一个SQL Azure Labs,其中包含一些未来可能具备的加强功能,比如将要亮相的OData Services。SQL Azure的整体架构如图2所示:
图2 SQL Azure架构
由图2我们可以看出,SQL Azure是一个四层架构,基础设施层(Infrastructure Layer)、平台层(Platform Layer)、服务层(Service Layer)、客户端层(Client Layer),基础设施层、平台层和服务层构成了微软数据中心。下面我们分别予以介绍。
基础设施层
基础设置提供了硬件支持和操作系统,以及对服务层所运行的服务管理。同时也是核心数据层,可以为一个数据中心提供多个共享服务。
平台层
平台层由三部分组成:SQL Server实例、SQL Server Fabric、管理服务。SQL Server实例就是一个SQL Server数据库引擎。每个SQL Server数据库引擎实例各有一套不为其他实例共享的系统及用户数据库。由于实例各有一套不为其他实例共享的系统及用户数据库,所以各实例的运行是独立的,一个实例的运行不会受其他实例运行的影响,也不会影响其他实例的运行。在一台计算机上安装多个SQL Server实例,就相当于把这台计算机模拟成多个数据库服务器,而且这些模拟的数据库服务器是独立且同时运行的。
SQL Server Fabric是一个底层框架,是一个分布式的框架,集成了网络、服务器和存储,因此这个框架能够使得SQL Azure自动进行负载均衡、数据容灾、备份恢复。
管理服务能够对运行在其上的服务进行健康检查、升级或者打补丁。并为SQL Server Fabric提供软硬件支持。
服务层
服务层连接了客户端层和平台层,包含三大功能:数据提供(Provisioning)、账单和计量(Billing and 、Metering)、连接路由(Connection Routing),期中Provisioning 列举了微软云计算平台账户。服务层同时暴露了带有SSL的列表数据流(Tabular Data Stream ,TDS)给客户端层。
客户端层
客户端层是唯一运行在微软数据中心之外的一层,不是使用SQL Azure任何特殊的组件,而是使用了当前客户端上安装的SQL Server的功能,如ADO.Net、WCF服务、ODBC、SQL Server管理工具。客户端层使用API初始化一个TDS连接,通过1433端口连接到SQL Azure上。客户端层运行我们使用数据的工具——SQL Server来构建云应用。
SQL Azure的主要功能
SQL Azure目前的不完全支持SQL Server上的所有功能,如分析服务、镜像、报表服务以及能够选择不同的服务提供者提供不同的服务。这是因为当前的网络状况和云计算平台部署需求所决定的,在将来肯定会提供更多功能,如Dallas。我们SQL Azure的主要功能分成三部分:数据库功能、应用程序功能和管理功能。
数据库功能
支持的数据库功能如下:
(1)表的增删改查(CRUD),试图、索引
(2)TSQL query JOIN statements
(3)触发器
(4)TSQL functions
(5)Application stored procedures (only TSQL)
(6)Table constraints
(7)基于Session的临时表
(8)Table variables
(9)Local transactions
(10)安全角色
(11)SUSER_SNAME函数,返回当前安全登录名
(12)MARS,多活动结果集
不支持的数据库功能如下:
(1)分布式查询
(2)分布式Transactions
(3)任何 TSQL query and views改变或者恢复物理资源信息
(4)自定义数据类型
应用程序功能
应用程序功能不支持的功能有:
(1)Service Broker
(2)HTTP access
(3)CLR stored procedures
管理功能
SQL Azure支持数据应用层程序(Data-tier Applications),数据库应用层程序是一个包含了几乎某一应用所需要的数据库及实例对象的实体,如表、视图、存储过程、登录等等。有了实体以后,原本独立的登陆、部署、维护就可以通过开发人员进行开发来整合成为一个统一的整体,这样的一个整体又叫应用程序包,这样DBA 就可以把原本独立的对象视为一个数据库应用层的程序来进行部署、监控和管理。目前支持的数据层应用程序有删除、部署、提取和注册数据层应用程序包。不仅如此,还支持的管理功能有:
(1)计划和统计
(2)索引开启
(3)查询开启
SQL Azure不支持一下管理功能:
(1)数据库复制
(2)SQL profiler
(3)SQL trace flag
(4)命令行备份
(5)配置和使用存储过程sp_configure
有关SQL Azure更多不被支持的功能,对SQL Server 2008(R2)和SQL Server 2005有所不同,可以参考MSDN:
http://msdn.microsoft.com/en-us/library/ff394115.aspx
访问SQL Azure中的数据
访问SQL Azure中的数据,我们可以通过APIs访问,如ADO.Net、ODBC或者PHP中的数据库访问,他们使用TDS+SSL的方式来访问。也可以通过基于Web的客户端,如浏览器、WCF数据服务客户端、SilverLight等方式,使用HTTP或HTTPS来访问云中的数据。如图3所示:
图3 访问SQL Azure中的数据
在上图所示场景A中,使用应用程序代码存储数据中心访问权限,但是数据存在于SQL Azure中,应用程序可是使用客户端库访问SQL Azure。它的优点是直接连接到SQL Azure中的数据库,其缺点是每个客户端必须使用已经提供的数据访问方法如ADO.Net来访问SQL Azure中的数据库。
在上图所示的场景B中,应用程序代码在Windows Azure上,应用数据库在SQL Azure中的数据库上,可以使用像场景A中的客户端数据访问类库来访问数据。场景B中允许了更多的客户端类型来访问,如桌面客户端应用和SilverLight应用对数据的访问。这种访问方式的优点有:业务逻辑离数据库更近、暴露了一些标准接口,如HTTP、SOAP、客户端程序不必依赖SQL Server 客户端API。如果使用Windows Azure作为中间层访问数据,数据库性能是其最大缺点。
SQL Azure VS SQL Server
有关SQL Azure和SQL Server的详细功能对比,这里就不再做出说明,感兴趣的读者可以参考微软云计算中文博客,其地址是:http://blogs.msdn.com/b/azchina/archive/2010/05/25/sql-azure-vs-sql-server.aspx
或者参考其镜像站点CSDN博客的关于SQL Azure和SQL Server的功能对比。地址:http://blog.csdn.net/azurechina/archive/2010/05/18/5604059.aspx
总结
本文介绍了SQL Server的云计算平台版本——SQL Azure,但是我们又不能简单的把SQL Azure看成是构建在云端的SQL Server。SQL Azure是一个四层结构:基础架构层、平台层、服务层和客户端层,前三层构成了微软数据中心,客户端层使用API或者基于Web的客户端来访问存储在云中的数据。