QUOTE:
SQL Server 2005 数据库服务
尽管有可能,将数据库作为服务来实现只会得到来自底层数据库管理系统的很少支持或者根本没有支持,而这种做法唯一可能付诸实践是当底层系统可以提供充分的支持时。SQL Server 2005是第一个关注于提供对将数据库作为服务的充分支持的数据库管理系统。特别是SQL Server 2005中的增强的XML支持和新的服务代理为创建数据库服务提供了支柱。对Microsoft® .NET Framework的支持提供了实现复杂业务规则的必要环境,而复制的改进提供了对参照数据的增强的支持。此外,新的特性,比如peer-to-peer事务性复制,为向外扩展大多用来读取的数据提供了良好的支持。最终,这些能力可以和SQL Server 2005中其它的可扩展性,可用性,可编程性以及可管理性改进共同使用。
XML 支持
SQL Server 2000主要通过一个称为SQLXML的中间层部件为XML和XML Web服务提供了有限的支持。SQL Server 2005在数据库引擎中天生就提供了对XML的广泛的支持。这包括对本地XML Web服务访问,一个本地XML数据类型,以及XQuery的支持。
展示数据库服务
实现SODA的一个主要的需求就是将数据库作为一组Web服务显现出来的能力。SQL Server 2005通过其实现的本地SOAP访问来满足这种需求。本地HTTP SOAP访问允许对SQL Server 2005 Web服务的直接访问而无须一个作为中间层的IIS服务器,也不需要客户端数据库软件。任何应用程序都可以调用Web服务,任何开发工具集都支持生成对Web服务的调用,并且任何平台(诸如Windows, UNIX, 和 Linux)都可以访问SQL Server 2005 Web服务而无须任何特殊编程。
处理 XML
由于一个数据库服务被作为一个Web服务来展示,它通常希望处理XML文档。SQL Server 2005提供了对XML的扩展的本地支持。特别是,一个新的XML数据类型允许在数据库中对XML的本地化存储。XQuery是为使用XML数据类型存储的数据查询而提供的,并且它扩展了插入,更新以及删除XML文档或者分片的功能。对FOR XML 和 OPENXML Transact-SQL的支持是提供用来在XML和关系型格式之间进行转换的。综上所述,这些能力允许一个数据库服务用XML来面对外部世界,同时用最恰当的格式在内部来存储和处理数据。
服务代理
使用SODA进行扩展的关键是将整个的应用程序系统由一套数据库服务来组成的能力。SQL Server 2005服务代理就是设计用来为SODA提供一个全面的服务间通信机制的。服务代理为SQL Server提供了一个可靠的,持久的,事务性的以及异步的通信功能。服务代理也提供了位置透明度,这样就允许调用应用程序不需要知道一个消息将会在本地,在同一台服务器的另一个SQL Server实例或者在一个远程服务器上处理。
Microsoft .NET Framework
SODA促进了在数据库服务中复杂业务逻辑的实现。Transact-SQL是实现业务逻辑的其中一个选择。SQL Server 2005通过提供Microsoft .NET Framework 通用语言运行时 (CLR)为我们提供了第二个选择。这样就允许使用诸如C#, J#, 以及 Visual Basic .NET等传统的编程语言来实现业务逻辑。
复制
一个可以提高扩展能力的主要方法是让参照数据拥有多个副本。SQL Server 2005的复制提供了维护只读数据(比如产品目录数据)以及大多用于读取的数据(比如消费者跟踪信息)的多个副本的工具。通过允许对数据的任何副本的更新,就为大多用于读取的数据提供了出色的支持。这样就带来了一个额外的好处,即可以在任何的数据副本离线进行维护时(比如为软件打补丁时)而不中断整个系统的工作。
可扩展应用程序示例
这一部份展示了一个使用SQL Server 2005的以服务为导向的数据库体系结构来创建的N层结构的电子商务Web应用程序的一部份作为示例。此模块执行了订单接受以及订单处理任务。这个应用程序的设计目标是,它应当便于增强,扩展以及集成,从而有效的为核心业务需求服务。下面是该模块的业务需求:
• 接受订单
• 处理订单 (包括信用卡处理,存货清单,配送,以及运货)
• 读取消费者跟踪信息
• 读取产品目录
• 发送email确认订单以及订单进展报告
• 允许其它的应用程序和系统在存货级别进行查询
• 在接受订单的过程中尽可能的缩短交互的响应时间
• 通过将一部份消费者的跟踪信息以及产品目录数据进行缓存来使性能最大化
在查看基于SQL Server 2005 SODA的解决方案之前,下面的图表展示了SQL Server 2000是如何实现这些功能的。
正如图表1所展示的那样,基于浏览器的客户端通过HTTP发送请求给IIS 6.0 Web服务器,服务器上拥有一个用来接受订单的ASP.NET Web站点。ASP.NET的代码使用ADO.NET来和一个SQL Server 2000的订单记录及订单处理数据库进行通信。SQLXML 3.0 Web服务支持是用来展示存货级别的查询API的。ASP.NET代码所实现的对消费者跟踪信息以及产品目录明细的缓存使得到数据库服务器的回程时间被缩短了。SQL Mail建立在SQL Server之上并且通过发送电子邮件来确认订单以及订单进展报告。
QUOTE:
下面列举了一些此类体系结构的限制:
• 订单记录和订单处理数据库是在单个服务器上存储的,这样就限制了应用程序的扩展能力。因而唯一的选择是进行向上扩展。另外这种方法存在单点失败的问题。如果SQL Server离线了,Web站点就无法继续接受订单
• SQLXML通过将Web服务的方法映射到现存的存储过程来展示存货级别的查询API。SQLXML的存在就造成了对安装和维护的额外需求。ASP.NET可以用来提供这个API。不过,它需要编写和维护额外的代码
• SQL Mail需要一个MAPI的客户端安装在SQL Server服务器上。另外,SQL Mail是无法扩展的
• ASP.NET的代码将已经访问过的部份的产品目录和消费者跟踪信息缓存了下来。现有的技术并没有提供一个能够在数据进行了修改后自动对缓存进行刷新的解决方案。ASP.NET代码不得不针对可能出现的数据修改或者周期性地刷新缓存或者对服务器进行轮询,或者也可以实现一个自定义的解决方案可以指出被缓存的数据已经修改了
订单处理可以被分离到另外一个服务器上。不过,这样可能需要分两阶段的提交以及实现分布式事务。消费者跟踪信息和产品目录在两台服务器上必须都可以访问。一个解决方案是仍将数据放置在一台服务器上而从另外一个服务器上使用一个链接服务器和分布式查询来完成对数据的访问。一个更好的方案是在两台服务器上都放置一份数据的本地副本并且使用事务复制来复制消费者跟踪信息和产品目录。不过,事务复制对于大多用来读取的数据而言不太适合。这个方案在图表2中进行了描述。
现在设想一下SQL Server 2005是如何面对以前所描述的这些限制并且是如何允许创建一个可扩展以及松散耦合的数据库应用程序的。
正如图表3所展示的那样,订单记录和订单处理现在被分别放到了两台服务器上,由此使它成为了一个更可扩展的解决方案。另外,该设计增加了可用性,因为即使在订单处理服务器down机时,Web站点也可以继续接受订单。
当一个订单被提交时,一个记录就会生成在订单记录数据库中。几乎在同时,一个消息被放到了一个服务代理队列中。订单记录进程在此结束。该队列消息随后被路由到存储订单处理数据库的SQL Server 2005服务器那里。如果订单处理服务器离线了,消息会在订单记录数据库的队列中保持到订单处理数据库可用时。
当一个消息被订单处理数据器接收到时,不同的任务诸如存货,配送,以及运货都开始执行了。最终,一个响应消息使用服务代理被送回到订单记录服务器,服务代理随后使用SQLiMail发送订单确认邮件。这几个任务都是便于扩展的并且可以单独的更新和升级其功能。
SQLiMail使用服务代理,让它成为了一个可扩展的电子邮件解决方案。作为替换的方案,SQL Server通知服务也可被用来发送电子邮件。使用针对跨服务器的异步消息系统的服务代理清除了使用分布式事务以及分两阶段提交的需要。而且,服务代理可以辅助于向外扩展体系结构以及缩短交互的响应时间。该体系结构增加了可用性,消除了对一个外部消息解决方案或产品的需要,并且简化了对分布式数据库应用程序的实现。
订单处理服务器使用HTTP SOAP终结点来展示存货级别查询的API。HTTP SOAP终结点消除了对SQLXML和IIS的需要,同时也通过消除了额外的IIS和SQLXML层提供了更好的性能。
新的peer-to-peer事务复制配置在订单记录和订单处理数据库之间来复制消费者跟踪信息和产品目录数据。peer-to-peer事务复制与传统的事务复制相比,对于大多用来读取的数据的复制更为高级并可提供更好的性能。
ASP.NET Web站点的代理使用了新的查询通知机制来刷新缓存的产品目录和消费者跟踪数据。查询通知使用服务代理来异步的通知订阅的ASP.NET代码关于数据库更改的信息。
之前的设计是松散耦合的并且支持基于标准的Web服务从而便于集成和扩展。使用了服务代理,查询通知以及SQLiMail让它成为了一个在负载增加时可以良好扩展的解决方案。对peer-to-peer复制的使用为共享大多用于读取的产品目录和消费者跟踪数据提供了一个高级的解决方案。另外,无论在何处应用,之前的设计都可以利用XML数据类型以及XQuery功能来本地化存储和查询非结构化的数据。它也可以使用SQLCLR来扩展类型系统和聚合函数,或者来实现复杂的业务规则。
QUOTE:
结论
以服务为导向的数据库体系结构提供了构建高可扩展能力,高可用的数据库的功能。通过将透明度边界移到服务级别,SODA避免了SQL语句级别的向外扩展解决方案的扩展限制。通过它的高度可靠的服务间通信机制,SODA支持了对可获得近乎持续可用性的数据库的设计。
尽管本文关注于SODA作为获得可扩展性的基础的作用,SODA可以提供的远远不止这些。它是一个非常适合用来集成传统的和新一代的数据库应用程序的体系结构。而且,它是一个允许做更多的革新的体系结构,它通过将不同的服务“重新连线”以及使用新的数据库服务就可以满足新的业务需求。
这些特点让SODA成为一个构建可扩展SQL Server 2005数据库应用程序的理想的体系结构。
QUOTE:
版权说明
该白皮书为初步文档,可能会在所述软件进行最后商业发布之前做完全修改。
该文档所含信息代表微软公司在文档出版时对所论及问题的当前看法。由于微软必须对千变万化的市场情况做出相应反应,因此本文档不应视为微软的任何承诺,且微软不保证所陈述任何信息在产品发布后的准确性。
本白皮书仅供信息参考。微软对本文件中的信息不做任何明示或默示保证。
遵守所有适用的版权法律是用户应尽的责任。下述陈述不限制任何版权,在未获得微软公司明示书面许可的情况下,不得以任何目的复制本文档任何部分或将任何部分保存或引入检索系统、亦不得以任何形式(电子、机械、影印、录制或其他方式)进行传播。
微软在文件所述主题中拥有专利权、专利应用程序、商标、版权或其他知识产权。除非在微软的任何书面许可协议中明示规定,否则对本文档的提供不得视为对任何专利权、商标、版权或其他知识产权许可的提供。
除非特别声明,本文中描述的示例公司、组织、产品、域名、e-mail地址、徽标、人物、地点以及事件均为虚构的,不应与任何实际的公司、组织、产品、域名、e-mail地址、徽标、人物、地点以及事件有任何的联系。
© 2005微软公司版权所有。
Microsoft和ActiveX是微软公司在美国和其他国家的注册商标或商标。
本文中实际公司和产品的名称可能是其相应所有者的商标。