HailStorm的架构
HailStorm 使用PUIDs(双向唯一标识,Pairwise Unique ID)进行数据存储,以及和其他HailStorm合作伙伴交换数据,使用SOAP进行服务访问,使用XML文档进行数据访问,XML Schema进行数据表现和交换,使用修改过的Kerberos版本进行安全控制。
微软将保存核心HailStorm服务所需的的用户数据,控制HailStorm合作伙伴之间的数据流,但是它不会知道合作伙伴处保存了什么数据。通过提供一个PUID给微软,HailStorm合作伙伴可以申请获得用户数据。只有在用户授权该供应商访问数据时,微软才会给合作伙伴返回数据。
在开发人员看来,HailStorm架构是这样的。用户通过Passport验证后,相应的用户标识或组标识将获得所有的HailStorm服务。例如,对开发者而言,日历和联系人服务提供相同的方法和特性。HailStorm用SQL Server按照发送接收XML的最佳方式来进行数据存储。
表2列示了所有HailStorm服务对外都是一致的操作。
| 表 2. 所有 HailStorm 服务的通用操作 |
| 函数 |
描述 |
| Insert |
把 XML插入到一个指定服务的指定文档位置 |
| Delete |
删除指定文档的某个节点内容,例如删除一个废弃不用的旧地址 |
| Replace |
把一个指定文档的某个已有的节点内容替换为新的内容 |
| Update |
更新文档,把一系列的插入、删除和替换操作合并为一次性操作 |
| Query |
对指定文档进行查询,返回一些节点内容 |
| ChangeNotify |
如果文档的发送者感兴趣,可以在更新和改变信息的时候收到通知 |
表1和表2均摘自MSDN网上的The .NET Show (2001年6月7日),文中包括了HailStorm架构更多的详细内容。开发人员使用XPATH 表达式的查询语句,或XML查询语句进行查找数据。HailStorm数据存储在不同地点的多个服务器上。
日历和联系人都是基于Web的服务,它们集成能产生不同的联系人清单和消息库。比方说,HailStorm联系人服务包含了用户Palm/PocketPC设备和电子邮件程序中的所有联系人,收件箱包含了用户电子邮件和语音信箱中的所有消息。所有这些数据都将集中存储,能从任何的HailStorm设备来访问。表1举例说明HailStorm地址服务的数据,它使用了标准的XML schema。
微软将XML视为.NET和Web上各个服务的一个关键部分。XML schema是其中的关键。在微软2001年3月19日宣布HailStorm时,Bill Gates提到以下一些展望:
在XML世界中,你将一次又一次听到schema这个词。正是通过schema,数据才能进行交换,将会有你约会的schema,健康记录的schema,等等。我们现在宣布的工作是相对较广泛的,和个人感兴趣的东西相关的schema。你将很快意识到这些东西是什么,可能是你的文件、日程安排、个人特征等等,它们都将用标准的形式来表达。这样,有了标准的形式,各个应用都能存入信息并从中读取不同应用的信息,这样,各个应用就不再是孤立的了。
在宣布Hailstorm的声明中,还有HailStorm的主要架构设计师Mark Lucovsky 给开发人员解释了HailStorm的结构:
有一个东西,我们称之为"服务基材",它是HailStorm系统的粘合剂,使系统实现成为可能。它是我们构建所有服务的公共基础结构,是命名这些服务的公共方法,是理解这些服务的共同认识,是一套公共的接口。如果你要写HailStorm服务,服务必须得以表现,使在所有不同的服务中都采用同样的查询方法,同样的数据操作方法。这样,如果我想给某项服务增加一些XML,我就不必为日历要学一套方法,为地址簿又要学另外一套,因为都是同样的add 方法。数据可能不一样,服务的schema可能不一样,然而程序模板和服务基材是标准的,连接各个服务的架构是标准的。