⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 201.htm

📁 探索Windows 2000发展策略以及中介层技术设计的基本概念
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<html><body><span  id=Layer1><p><font size=2 color=#3c3c3c face=arial>什麽东西是建立一个有效的分散式环境之必要因素?要怎样将一群个别的电脑转换成一个可使用的、可管理的整体?在过去这几年,我们在电脑工业上对这个问题有许多的经验,或许我们学到最重要的事是:回答这些问题并不简单。分散式的环境引起许多困难的问题。</span><span  id=Layer2></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>建立一个有效的分散式环境并不简单</span><span  id=Layer3></font></p><hr><p><font size=2 color=#3c3c3c face=arial>第一,分散式环境需要一些分散式的基础架构,需要完整的服务以便让环境变为可用。要如何让这个环境中使用者、电脑与应用程式相关资讯可以使用?分散式环境中的服务与资讯要如何让正确的使用者存取,而避免不该存取的使用者使用?第二,分散式环境应该可允许建立分散式的应用程式。要做好这件事需要解决一大堆困难的问题。举例来说,这些互异的软体该如何沟通呢?它们如何找到对方呢?一个可延展的应用程式要如何支援许多同时上线的使用者,使用Web或其它的东西?最後,一个有效的分散式环境暗喻着管理潜在的大量应用程式、电脑和使用者,横跨不同的建  物、学校或全世界。分散式管理带来了许多挑战,这些挑战必需解决以便建立一个可运作的环境。</span><span  id=Layer4></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>建立一个分散式的环境需要解决许多复杂的问题</span><span  id=Layer5></font></p><hr><p><font size=2 color=#3c3c3c face=arial>成功地建立一个有效的分散式环境需要正确地使用分散式服务。Microsoft Windows 2000,它是Windows NT 4.0的下一个版本,已将一组功能强大的分散式服务包含在主流的作业系统。许多厂商提供了类似、行之多年的服务(包含Microsoft),Windows 2000的问市第一次将完整的服务成为系统标准的一部份。此外,以最简单的组态方式部署Windows 2000需要使用一些它包含的分散式服务。这本书的目的是协助你了解这些服务,这些服务提供的功能,以及如何将他们拼凑在一起。</span><span  id=Layer6></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Windows 2000 中的分散式服务协助你建立一个有效的分散式环境</span><span  id=Layer7></font></p><hr><a name=201001><font color=#3e70d7 face=arial size=5><b>定义分散式服务</span><span  id=Layer8></b></font><p><font size=2 color=#3c3c3c face=arial>什麽是分散式服务?回答这个问题需要先思考网路是如何组织的。几乎今日所有的网路都使用同时使用许多协定,将它们组织成许多层次,如图1-1。</span><span  id=Layer9></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>网路协定通常组织成许多层次</span><span  id=Layer10></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>现在还是很常使用七层的Open Systems Interconnection (OSI)模型来展示网路层,不过现在再也不是这麽回事了-这个模型已有二十多年历史,几乎要淘汰了。在此展示的层次结构是较为有用的,较适合今天的网路环境。</span><span  id=Layer11></font></p><hr><p><font size=2 color=#3c3c3c face=arial>在图中显示,最底层包含许多类型的子网路(subnetwork),它是实际在机器之间移动位元组的方式。子网路的范例包含区域网路(local area network,LAN),如乙太网路(Ethernet),广域网路(wide area networks,WAN)如讯框传送(Frame Relay)网路,以及许多点对点连线如T-1与T-3线路。</span><span  id=Layer12></font></p><br><center><a target=_new href=imagesh/1-1.gif><img border=0 src='imagesl/1-1.gif'></a></center></span><span  id=Layer13><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-1</span><span  id=Layer14>&nbsp;</b></font>一个在今天典型的网路将它的协定组织成许多层次。</span><span  id=Layer15></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>大部份的公司组织使用许多类型的子网路,因此在堆叠图中下一层有一个协定可用来在不同的子网路之间传送资料。这个功能通常称做internetworking,目前这类协定中最广泛使用的是Internet Protocol (IP)。不过IP,和大部份的internetworking协定一样,是不可靠的它,可能会遗漏传送的某些资料。另外,其上的传输层协定(transport layer protocol)可以增加可靠性,确保传送的资料能够毫无遗漏地到达目的地。但并非每一种应用程式都需要这种可靠性,因此也存在着不确保正确传送的简单传输层协定。今天可靠的传输协定最常见的选择是Transmission Control Protocol (TCP),而不可靠的传输协定最流行的选择是User Datagram Protocol (UDP)。</span><span  id=Layer16></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>TCP IP、TCP与UDP是今日最常见的中间层协定</span><span  id=Layer17></font></p><hr><p><font size=2 color=#3c3c3c face=arial>到目前为止讨论的协定提供一个方法可在连结到任何子网路的电脑之间来移动位元组(或许是可靠地移动)。如果你是个被虐待狂,你可以使用这些协定提供的服务来建立基础的分散式环境。举例来说,可以建立一个分散式应用程式,透过socket这个应用程式化介面(application programming interface,API)直接存取传输协定的服务。在Microsoft环境中,这个API称为Windows Sockets或只称为Winsock。以Winsock为基础的应用程式可能很简单效能很好,也普遍地存在。</span><span  id=Layer18></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>你可以直接在传输协定你可以直接在传输协定上建立服务</span><span  id=Layer19></font></p><hr><p><font size=2 color=#3c3c3c face=arial>不过,直接在传输层建立一个应用程式有一点点挑战-所有的开发者必须在上面建立一个机制以在不同机器之间移动位元组。企图建立一个真正的分散式环境而只传输位元组的基本服务并不是个好主意。分散式服务是建构在某些传输协定之上,而在应用程式之下的,提供分散式环境的基础架构。因为分散式服务是实作在分散式应用程式与传输层之间(也就是在中间),因此有时也被称为中介层(middleware)。不管它们的名称是什麽,一组功能强大的服务协助你建立一个有效地分散式环境。</span><span  id=Layer20></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>建立公用的分散式服务比直接在传输协定建立服务较有意义</span><span  id=Layer21></font></p><hr><p><font size=2 color=#3c3c3c face=arial>该有哪些分散式服务?有理智的人可能对答案会有争论,不过思考基本的分散式服务有时是很有用的,大约分为两大类:</span><span  id=Layer22></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;基础架构服务</span><span  id=Layer23>&nbsp;</b></font>这类服务包含目录服务,让分散式环境中的资源更容易找寻,以及安全性服务,控制这个环境中的对资料与服务的存取。你可能会争辩还有许多的服务是属於这一类,不过为了要让这本书讨论的深度一致,我挑选了专注在目录服与与安全性服务。</span><span  id=Layer24></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;应用程式支援的服务</span><span  id=Layer25>&nbsp;</b></font>在这个类别中的一组服务可支援分散式应用程式的建立,利用的协定包含:remote procedure call (RPC)、讯息伫列,或透过Hypertext Transfer Protocol (HTTP)从Web存取。这个类别还包含许多服务,以便更容易地建立更具延展性、更正确的分散式应用程式,如执行牵涉到多个资料库的交易服务。</span><span  id=Layer26></li><br></font></ul></font><p><font size=2 color=#3c3c3c face=arial>在Windows 2000中某些分散式服务也是前版Windows NT的服务之一部份,而在这个版本中又加了许多新的服务。不管起源为何,这些服务组织在一起成为一组功能强大的服务以提供建立分散式计算环境的稳固基础。</span><span  id=Layer27></font></p><a name=201002><font color=#3e70d7 face=arial size=5><b>基础架构服务</span><span  id=Layer28></b></font><p><font size=2 color=#3c3c3c face=arial>在任何的分散式环境中,许多服务都可以被视为基础架构的一部份。举例来说,一个允许存取其它机器上的档案之分散式档案服务,若能提交工作到远端的印表机是很好的。不过因为它们是这个版本的新特色,也因为它们解决了许多关键性的问题,因此在Windows 2000中提供两个重要的基础架构服务:目录服务与分散式安全性服务。</span><span  id=Layer29></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>好的目录服务与分散式安全性服务是基本的</span><span  id=Layer30></font></p><hr><font color=#3e72d7 face=arial size=4><b>目录服务</span><span  id=Layer31></b></font><p><font size=2 color=#3c3c3c face=arial>定义上,一个分散式环境中拥有使用者、应用程式与电脑凌乱地分布。若要有效地使用这个环境的资源,在上述这些东西需要时便能够找到必要的资源。举例来说,分散式应用程式的某个部份可能需要找寻执行在不同系统的其它资源。印表机可能随意地分散在不同的地方,不过必须要让这个环境中的使用者存取。这些使用者应该能够从许多工作站上登入,而仍旧能够看到自己熟悉的环境,因此便需要找寻每个使用者个人喜好的资讯。</span><span  id=Layer32></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>在分散式环境中必须能够存取许多的资讯</span><span  id=Layer33></font></p><hr><p><font size=2 color=#3c3c3c face=arial>这些东西可以使用目录服务来达成。目前在资料网路上最广泛使用的目录服务是网域命名系统(Domain Name System ,DNS),而Windows 2000密集地使用DNS。不过Windows 2000同样也包含Active Directory,一个崭新的目录服务,实作了Lightweight Directory Access Protocol (LDAP)。若要知道DNS和Active Directory一起运作的情形,参考看看在Windows 2000中网域是如何组成的将会相当的有用。</span><span  id=Layer34></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Windows 2000同时依赖 DNS与 Active Directory</span><span  id=Layer35></font></p><hr><p><font size=2 color=#3c3c3c face=arial><font size=2 face=arial color=#3e80d7><b>&nbsp;Windows 2000中的网域</span><span  id=Layer36>&nbsp;</b></font>和前版的Windows NT一样,Windows 2000允许你将使用者与电脑组成一个网域。当然不一定要使用网域,所有的电脑与使用者也不一定要属於一个网域,不过若要使用到Windows 2000的分散式服务,网域几乎是义不容辞的选择。图1-2显示一个Windows 2000网域的例子,网域中安装一个虚拟的财务服务公司,名称为QwickBank。虽然一个网域中可以混用Windows 2000系统和执行Windows 9x,或旧版Windows NT的电脑,这个范例假设这个网域是一个纯粹Windows 2000的网域。</span><span  id=Layer37></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>使用者与电脑可以组成一个网域</span><span  id=Layer38></font></p><hr><br><center><a target=_new href=imagesh/1-2.gif><img border=0 src='imagesl/1-2.gif'></a></center></span><span  id=Layer39><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-2</span><span  id=Layer40>&nbsp;</b></font>工作站、成员伺服器与一台或多台网域控制主机能够组成一个网域。</span><span  id=Layer41></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>如图1-2所显示,一个网域可以包含许多电脑,每台电脑扮演着不同的角色,包含:</span><span  id=Layer42></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;工作站</span><span  id=Layer43>&nbsp;</b></font>这些系统扮演客户端,在一个完全的Windows 2000环境中通常都是执行Windows 2000 Professional系统。</span><span  id=Layer44></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;成员伺服器</span><span  id=Layer45>&nbsp;</b></font>通常这些系统都是执行Windows 2000 Server,其上可能会执行某些应用程式。而Web伺服器、资料库管理系统,如Oracle或Microsoft SQL Server或其它类型的伺服器应用程式也可能执行在成员伺服器之上。</span><span  id=Layer46></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;网域控制主机</span><span  id=Layer47>&nbsp;</b></font>(</span><span  id=Layer48><font size=2 face=arial color=#3e80d7><b>&nbsp;Domain controller</span><span  id=Layer49>&nbsp;</b></font>) 每一个网域至少都必须拥有一台网域控制主机,大部份的网域会有两台或更多台网域控制主机。一个网域控制主机必须执行某个版本的Windows 2000 Server,简短地说,它扮演着让网域能运作的重要角色。</span><span  id=Layer50></li><br></font></ul></font><p><font size=2 color=#3c3c3c face=arial>网域中的电脑实际所在位置并没有特别的需求。这些机器可能在同一个房间内,或可能跨越在不同的国家。不过不管它是存放在哪一个地理位置,每个网域都要有一个名称。在前版的Windows NT,网域的名称是采用NetBIOS名称指定的,它只是一个简单的字元字串。不过在Windows 2000中,每一个网域都必须指定一个DNS名称。举例来说,在图1-2是QwickBank公司部署的情况,网域名称为qwickbank.com。在特定公司中的Windows 2000网域有可能指定一个配置给这家公司的DNS名称。在</span><span  id=Layer51>&nbsp;<a href=202.htm# target=_new>第二章</span><span  id=Layer52></a>&nbsp;将描述,Windows 2000网域有可能会组织程树状或森林结构,允许网域以许多方式组织在一起。</span><span  id=Layer53></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>每一个Windows 2000 网域都被指定一个DNS名称</span><span  id=Layer54></font></p><hr><p><font size=2 color=#3c3c3c face=arial><font size=2 face=arial color=#3e80d7><b>&nbsp;Active Directory</span><span  id=Layer55>&nbsp;</b></font>就像所有的目录服务一样,Active Directory提供一个资料库来储存网域的资讯,并提供一些协定可让客户端存取或修改资料库中的资讯。每一个网域控制主机都拥有一份这个网域的完整目录资料库,在每一份复本中对资料的变动会自动地复制到所有的复本上。在这个资料库上的资讯都会组织成阶层状,使用最自然的方法来命名。</span><span  id=Layer56></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Active Directory提供一个复写的资料库可在整个网域中存取</span><span  id=Layer57></font></p><hr><p><font size=2 color=#3c3c3c face=arial>若要找寻特定的网域在Active Directory资料库的复本,客户端可以使用DNS。在今日DNS是一个广泛分布的技术,提供Internet以及无国界的私人网路後端的目录。如图1-3所示,客户端向DNS要求提供特定网域的网域控制主机的位置。DNS伺服器回应这台机器的IP位址,然後客户端便与此台机器取得连系以得到想要的资讯。(客户端将网域控制主机的位址暂存起来,因此不需要每回都发出一个DNS查询。)</span><span  id=Layer58></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>DNS可用来找寻适当的Active Directory伺服器</span><span  id=Layer59></font></p><hr><br><center><a target=_new href=imagesh/1-3.gif><img border=0 src='imagesl/1-3.gif'></a></center></span><span  id=Layer60><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-3</span><span  id=Layer61>&nbsp;</b></font>客户端使用DNS来找到正确的网域控制主机</span><span  id=Layer62></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>若要取得Active Directory中的资讯,客户端可以使用LDAP。LDAP是一个许多厂商共同制定,已成为Internet Engineering Task Force (IETF) 的标准,当然今日已有许多主要的目录服务厂商也支援这个服务。在许多方面,LDAP和DNS是互补的。DNS简单、执行快速,它是一个很有效率的技术能够简化工作,如将机器的名称对照到机器个别的位址。在Windows 2000,这些传统的功能仍旧由DNS掌控,Active Directory并没有改变这个事实。不过DNS在存取目录资料库这方面并没有控管的很好,这也是LDAP光彩夺人的其中一个理由。Active Directory储存的资讯包含使用者 、印表机、分散式应用程式...等等,可透过LDAP存取;DNS则只用来找寻正确的网域控制主机。</span><span  id=Layer63></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Active Directory与DNS是互补的</span><span  id=Layer64></font></p><hr><p><font size=2 color=#3c3c3c face=arial>在一个分散式环境中只有一个目录服务是很吸引人的目标。由於在这个领域竞争技术的众多,这是一个很难达到的目标。然而在DNS与LDAP标准的出现,这个目标可能有希望实现。若要得到DNS与Active Directory更详细的资讯,请参考</span><span  id=Layer65>&nbsp;<a href=202.htm# target=_new>第二章</span><span  id=Layer66></a>&nbsp;。</span><span  id=Layer67></font></p><font color=#3e72d7 face=arial size=4><b>分散式安全服务</span><span  id=Layer68></b></font><p><font size=2 color=#3c3c3c face=arial>拥有一个好的目录服务是一项很大的恩惠,它让使用分散式环境的每一个人之生活变得更容易。不过在这个环境中有许多潜在的使用者他们的生活却愈来愈糟。几乎每一个Windows 2000 的网域都有吸引骇客的可能,这些骇客希欢进行不当的存取、修改动作或搅乱网域的资讯。因为这样的结果,在网域基础架构中包含良好的分散式安全服务是很重要的。</span><span  id=Layer69></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>好的安全性服务是很基本的</span><span  id=Layer70></font></p><hr><p><font size=2 color=#3c3c3c face=arial>分散式安全服务是由许多不同的服务组成的。最重要的服务包含:</span><span  id=Layer71></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;验证</span><span  id=Layer72>&nbsp;</b></font>(</span><span  id=Layer73><font size=2 face=arial color=#3e80d7><b>&nbsp;Authentication</span><span  id=Layer74>&nbsp;</b></font>) 证明你的身份。举例来说,当你登入时,通常会要求你输入密码,一个只有你知道的值。因为只有你知道这个值,正确的输入它便能更验你的身份。</span><span  id=Layer75></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;授权</span><span  id=Layer76>&nbsp;</b></font>(</span><span  id=Layer77><font size=2 face=arial color=#3e80d7><b>&nbsp;Authorization</span><span  id=Layer78>&nbsp;</b></font>) 决定你可以做的事。一旦伺服器知道你是谁,这也就是说一旦你被验证了,下一个问题便是决定允许你做什麽事-授权。你可以读取档案吗?可以修改目录项目?授权有时也称为存取控制(Access Control)。</span><span  id=Layer79></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;资料完整性</span><span  id=Layer80>&nbsp;</b></font>(</span><span  id=Layer81><font size=2 face=arial color=#3e80d7><b>&nbsp;Data integrity</span><span  id=Layer82>&nbsp;</b></font>) 确保资料在传输中没有被修改。骇客可能会从线路中读取封包,修改之,然後再送回去。若资料的接收者无法辨识取得的资料不是原始传送的内容,问题就会发生。资料完整性服务允许一个接收者侦测接收到的资料是否被修改。</span><span  id=Layer83></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;资料私密性</span><span  id=Layer84>&nbsp;</b></font>(</span><span  id=Layer85><font size=2 face=arial color=#3e80d7><b>&nbsp;Data privacy</span><span  id=Layer86>&nbsp;</b></font>) 确保资料在传输时不会被读取。为了达到这的目的,传送端会加密资料,然後在接收端的系统解密。这个服务有时也称作机密性(confidentiality)。</span><span  id=Layer87></li><br></font></ul></font><p><font size=2 color=#3c3c3c face=arial>加密是一个基本的安全性机制,重要性不下於资料私密性。它的概念很简单:它代表将资料转换成另一种无法读取的形式,直到它被解密为止。通常加密演算法使用一把金钥来执行这项转换,金钥是某个长度的位元组字串。在Windows 2000 中的分散式安全服务使用两种金钥加密:秘密金钥(secret key encryption)加密与公开金钥(public key encryption) 加密。秘密金钥是使用同一把金钥来加密与解密,而公开金钥是使用不同的金钥来加密与解密。</span><span  id=Layer88></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>加密是许多分散式安全性的基础</span><span  id=Layer89></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>秘密金钥加密也称为私密金钥(private key),它是对称式的,使用一把金钥和共享的秘密加密(secret encryption),不过我在本书中称之为秘密金钥。同样地,公开金钥是非对称式的加密,不过我会继续使用公开金钥这个名词。</span><span  id=Layer90></font></p><hr><p><font size=2 color=#3c3c3c face=arial>为了提供分散式安全服务,就要有安全性协定。Windows 2000 内建支援了叁种主要的安全性协定:</span><span  id=Layer91></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;NTLM</span><span  id=Layer92>&nbsp;</b></font>它是NT LAN Manager这几个字的缩写。这是Windows NT早期版本标准的安全协定,Windows 2000 也支援这个协定以便提供向下相容性。</span><span  id=Layer93></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Kerberos</span><span  id=Layer94>&nbsp;</b></font>Windows 2000 中核心的安全协定,Kerberos主要是依赖於秘密金钥加密。</span><span  id=Layer95></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Secure</span><span  id=Layer96>&nbsp;</b></font>Sockets Layer(SSL) 这是Internet标准的安全协定,SSL也可以应用在其它的环境中。SSL同时使用公开金钥与秘密金钥加密。有一个版本的SSL已成为IETF标准,命名为Transport Layer Security (TLS),而Windows 2000 同时支援SSL与新版的TLS。</span><span  id=Layer97></li><br></font></ul></font><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Windows 2000支援许多协定以提供分散式技术</span><span  id=Layer98></font></p><hr><p><font size=2 color=#3c3c3c face=arial>在一个纯粹Windows 2000 的网域中,使用者依赖於Kerberos来进行登入-NTLM已不再必要。不过有许多,甚至是大多数的公司都使用SSL来满足他们的分散式安全性需求。这两个协定是Windows 2000 分散式安全性的核心。</span><span  id=Layer99></font></p><p><font size=2 color=#3c3c3c face=arial><font size=2 face=arial color=#3e80d7><b>&nbsp;Kerberos</span><span  id=Layer100>&nbsp;</b></font>Kerberos是由Massachusetts Institute of Technology公司在1980年初期建立的,它是一个行之有年的开放式协定。虽然Windows 2000 Kerberos并没有使用这个法规-它完全是由Microsoft重新设计的-因为Kerberos在公共的网域已发展多年,这是它吸引人的其中一个特性。不过目前没有人知道如何证明它是完全安全的,因此我们最好让世界最好的安全性专家(与骇客)来检验或攻击这个协定。因为它存在许久,Kerberos已引起很大的注意。更重要的是,它能禁得起攻击所以也赢得了许多安全组织的信赖。而Kerberos像LDAP一样,目前也是IETF的标准了。</span><span  id=Layer101></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Kerberos是一个受信任、易了解的技术</span><span  id=Layer102></font></p><hr><p><font size=2 color=#3c3c3c face=arial>通常,Kerberos使用秘密金钥加密来提供验证,虽然是一个较新的Kerberos选项,但Windows 2000也支援之。Kerberos也增加了可让使用者使用公开金钥登入的能力。若客户端要求的话,Kerberos也可以提供资料完整性与资料私密性,这两者永远都是依赖於秘密金钥加密。若要提供这些服务,Kerberos 必须知道许多有关於特定网域的使用者、电脑与应用程式资料。因此Kerberos软体需使用Active Directory资料库,它代表的意义是Windows 2000 中的安全性服务与目录服务是紧密地结合在一起的。</span><span  id=Layer103></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Kerberos 提供验证、资料完整性与资料私密性</span><span  id=Layer104></font></p><hr><p><font size=2 color=#3c3c3c face=arial>使用Kerberos,一个使用者可以取得一个位元组字串称ticket,然後将这张ticket展示给伺服器以可靠地证明自己。如图1-4所示,客户端连系执行在网域控制主机上Kerberos的Key Distribution Center (KDC)以取得一张这个网域中特定伺服器应用程式的ticket。然後客户端将这张ticket展示给这个应用程式,应用程式便可以使用它来验证客户端的身份。</span><span  id=Layer105></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Kerberos客户端使用tic-ket来证明他们的身份</span><span  id=Layer106></font></p><hr><br><center><a target=_new href=imagesh/1-4.gif><img border=0 src='imagesl/1-4.gif'></a></center></span><span  id=Layer107><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-4</span><span  id=Layer108>&nbsp;</b></font>Kerberos允许使用者取得ticket,然後展示这张Ticket以证明它们的身份。</span><span  id=Layer109></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>虽然图中并没有显示这个部份:取得一张ticket同样牵涉到安全地取得用来确保客户端与伺服器之间资料的完整性与资料私密性的加密金钥。如何完成这个动作将於</span><span  id=Layer110>&nbsp;<a href=203.htm# target=_new>第叁章</span><span  id=Layer111></a>&nbsp;中描述。</span><span  id=Layer112></font></p><p><font size=2 color=#3c3c3c face=arial><font size=2 face=arial color=#3e80d7><b>&nbsp;公开金钥技术</span><span  id=Layer113>&nbsp;</b></font>Kerberos 在一个定义良好的环境中(如公司或学校)是安全性服务的好选择。在一个巨大的、匿名的公开Internet世界,Kerberos就不太适合。SSL协定最早是由Netscape建立的,它是非结构式环境较为普遍的选择。</span><span  id=Layer114></font></p><p><font size=2 color=#3c3c3c face=arial>就像Kerberos一样,SSL可以提供验证、资料完整性与资料私密性。同样地,SSL也使用秘密金钥加密来提供资料完整性与资料私密性。不过和Kerberos不同的是,SSL永远依赖公开金钥技术来进行验证。使用了公开金钥加密技术,希望证明身份的使用者或伺服器便可以在讯息中加入数位签章。然後客户端可以将签章过的讯息和凭证一起展示,允许接收端来验证传送端。图1-5显示一个简化的流程,说明SSL如何使用数位签章和凭证来允许一个客户端向伺服器证明自己的身份。</span><span  id=Layer115></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>SSL也可以提供验证、资料完整性与资料私密性</span><span  id=Layer116></font></p><hr><br><center><a target=_new href=imagesh/1-5.gif><img border=0 src='imagesl/1-5.gif'></a></center></span><span  id=Layer117><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-5</span><span  id=Layer118>&nbsp;</b></font>SSL可以使用凭证与数位签章来验证。</span><span  id=Layer119></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>就如图1-5所示,SSL并没有像Kerberos一样在客户端与伺服器之间得依赖一个共享的伺服器。取代的做法,凭证是由凭证机构发行的,和ticket不同的是,ticket会在一段时间後过期,而凭证的期限可以是几个月甚至几年。这个机制需要发行、使用和管理凭证,有时也称为公开金钥基础架构(public key infrastructure,PKI)。它并不是一个简单的技术,而Windows 2000中包含了许多技术以因应这个诉求。这项技术以及公开金钥基础加密,和SSL协定将在</span><span  id=Layer120>&nbsp;<a href=204.htm# target=_new>第四章</span><span  id=Layer121></a>&nbsp;描述。</span><span  id=Layer122></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>SSL依赖於公开金钥技术,包含凭证与凭证机构</span><span  id=Layer123></font></p><hr><a name=201003><font color=#3e70d7 face=arial size=5><b>应用程式支援的服务</span><span  id=Layer124></b></font><p><font size=2 color=#3c3c3c face=arial>目录服务与安全性服务是分散式环境基础架构的基本要素。举例来说,每当一个使用者登入到纯Windows 2000 的网域中时,会同时使用到Active Directory与Kerberos。不过现在人们建立分散式运算环境来支援分散式应用程式。此外,支援这些应用程式的服务也是相当重要的。</span><span  id=Layer125></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>分散式环境必须支援分散式应用程式</span><span  id=Layer126></font></p><hr><p><font size=2 color=#3c3c3c face=arial>在Windows 2000 中核心的目录与安全性服务是全新的-它们并没有存在在於旧版的Windows NT。不过应用程式支援的服务之情况并非如此。在Windows 2000 在这个领域增加了一些全新的服务,大部份用来支援分散式应用程式的服务是已存在於Windows NT 4的新版本。最重要的服务包含:</span><span  id=Layer127></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;元件物件模型</span><span  id=Layer128>&nbsp;</b></font>(</span><span  id=Layer129><font size=2 face=arial color=#3e80d7><b>&nbsp;Component Object Model,COM</span><span  id=Layer130>&nbsp;</b></font>)</span><span  id=Layer131><font size=2 face=arial color=#3e80d7><b>&nbsp;与Distributed COM</span><span  id=Layer132>&nbsp;</b></font>(</span><span  id=Layer133><font size=2 face=arial color=#3e80d7><b>&nbsp;DCOM</span><span  id=Layer134>&nbsp;</b></font>) 提供基础的元件服务,也是从元件来建立软体的基础。</span><span  id=Layer135></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;资料存取服务</span><span  id=Layer136>&nbsp;</b></font>提供存取资料的API,其中最重要的是ActiveX Data Objects (ADO)。</span><span  id=Layer137></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;分散式交易服务</span><span  id=Layer138>&nbsp;</b></font>依赖於分散交易协调员(Distributed Transaction Coordinator,DTC)确保牵涉到多个资料库或多个软体的操作能够正确的运作。</span><span  id=Layer139></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;COM+</span><span  id=Layer140>&nbsp;</b></font>延伸COM的进阶元件服务,包含交易服务,以及为建立更具延展性的应用程式提供之服务...等等。</span><span  id=Layer141></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;讯息伫列服务</span><span  id=Layer142>&nbsp;</b></font>使用Microsoft Message Queuing (MSMQ) 提供讯息导向的沟通方式。</span><span  id=Layer143></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Web服务</span><span  id=Layer144>&nbsp;</b></font>提供服务以建立可透过Web存取的应用程式,包含Internet Information Services (IIS)所支援的Active Server Pages (ASPs)。</span><span  id=Layer145></li><br></font></ul></font><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Windows 2000包含许多服务以支援分散式应用程式</span><span  id=Layer146></font></p><hr><p><font size=2 color=#3c3c3c face=arial>即使它们并不全部是全新的,这些服务将是大多数分散式应用程式的基础。了解它们所提供的与应用的地方,对计划在Windows 2000 上工作的人是很基本的。</span><span  id=Layer147></font></p><font color=#3e72d7 face=arial size=4><b>元件服务:COM 与 DCOM</span><span  id=Layer148></b></font><p><font size=2 color=#3c3c3c face=arial>现在的软体密集地使用物件,物件是程式码和资料的组合体。不同的程式语言以类似却不同的方式来实作物件。举例来说,C++、Java与Microsoft Visual Basic都支援物件,不过每种语言都自有一套对物件和物件行为的见解。若所有的软体都是用上述其中一种语言开发的,我们可以接受物件是普遍地这个想法,每一件事都很好。不过不管是好是坏,Windows 2000 的世界变化更大。我们通常需要建立可让其它软体使用的软体,而不用管用来撰写软体的语言是哪一种。也因为物件的技术已几乎为全世界接受,所以我们喜欢使用物件来达到这个目的。</span><span  id=Layer149></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>物件技术是普遍存在的,由不同成份形成的</span><span  id=Layer150></font></p><hr><p><font size=2 color=#3c3c3c face=arial>这也就是COM所提供的。定义一组惯例来建立物件、使用物件(这些惯例可以套用到任何语言),COM提供一个标准的方式让任何软体来存取其它软体提供的服务。因为它应用层面很广,也很有用,所以COM已被用在建立Microsoft环境的大部份软体上。</span><span  id=Layer151></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>COM提供一个标准的方式让软体提供服务给其它软体</span><span  id=Layer152></font></p><hr><p><font size=2 color=#3c3c3c face=arial>就像其它类型的物件一样,COM物件透过method提供它的服务,method就像是非物件导向语言的程序和函数一样。Method可以组成介面,而一个COM物件潜在可以实作多个不同的介面。图1-6显示一个有两个介面的COM物件,这两个介面是IAccount与ITransfer。在这个范例中,IAccount拥有叁个method:Credit,将存款存入特定的帐号;Debit,从特定的帐号扣款;GetBalance,回传特定帐户的馀额。ITransfer只有一个method,MoveMoney,从一个帐户转帐到另一个帐户。每一个COM物件都透过介面来显露它的服务,而客户端总是呼叫介面上的method来存取这些服务。</span><span  id=Layer153></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>COM物件实作介面,介面包含method</span><span  id=Layer154></font></p><hr><a name="1-6"></span><span  id=Layer155><br><center><a target=_new href=imagesh/1-6.gif><img border=0 src='imagesl/1-6.gif'></a></center></span><span  id=Layer156><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-6</span><span  id=Layer157>&nbsp;</b></font>一个COM物件透过介面显露它的服务。</span><span  id=Layer158></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>图1-7 示范COM的另一个重要性:不管一个COM物件是实作成载入客户端行程的动态连结程式库(dynamic link library,DLL),或载入和客户端同一台电脑上的另一个行程,若载入到其它台机器上,它显露服务的方式都是一致的。事实上,客户端并不需要了解物件是如何实作的,除非自己想知道-COM提供了必要的一些杂工来将不同之处隐藏起来。 COM使用基本的COM与DLL物件和执行在同一台机器不同行程的物件沟通,不过若要和其它机器上执行的物件沟通,还需要更多。对於这个部份,客户端则使用DCOM。呼叫COM物件method的方式就像呼叫非物件导向语言上的一个副程式一样。</span><span  id=Layer159></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>一个COM物件可以执行在相同的行程或与客户端不同的行程中</span><span  id=Layer160></font></p><hr><p><font size=2 color=#3c3c3c face=arial>呼叫一个远端COM物件的method同样地也像呼叫一个传统的远端程序呼叫(remote procedure call,RPC)一样。基本RPC的概念是很简单的:使用与副程式呼叫相同的概念,然後延展到跨网路。客户端在呼叫时它的行为就像是进行一个传统的本机呼叫一样,不过这个副程式实际上是存在於其它机器的其它行程之上。对於习惯撰写程式码来进行副程序呼叫的程式设计师来说,这是一个相当熟悉的模型。</span><span  id=Layer161></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>呼叫一个COM method就像呼叫一个本机或远端的副程序 一样</span><span  id=Layer162></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>RPC这个术语也可以视为过时了。现在的程式设计师不再呼叫副程式,而是呼叫物件上的method,因此有时也会使用远端method呼叫这个名词。不过这些概念都很类似,有些概念也已经改变了。</span><span  id=Layer163></font></p><hr><br><center><a target=_new href=imagesh/1-7.gif><img border=0 src='imagesl/1-7.gif'></a></center></span><span  id=Layer164><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-7</span><span  id=Layer165>&nbsp;</b></font>不管一个COM物件是如何实作出来的,客户端看起来都是相同的。</span><span  id=Layer166></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>COM最早是在1993年推出的,而DCOM则是在1996年Windows NT 4发行时推出的。以上这两者都是完全RPC导向的。不过在Windows 2000 时,COM也支援非同步沟通,若要得到更多关於COM与DCOM的资讯请参考</span><span  id=Layer167>&nbsp;<a href=205.htm# target=_new>第五章</span><span  id=Layer168></a>&nbsp;。</span><span  id=Layer169></font></p><font color=#3e72d7 face=arial size=4><b>资料存取服务</span><span  id=Layer170></b></font><p><font size=2 color=#3c3c3c face=arial>占大部份百分比的分散式应用程式都会存取某些资料。而大部份的资料都是储存在DBMS。通常有些商业上的DBMS提供自己的API让应用程式来存取它包含的资料。拥有一个公用的API来存取许多不同的资料来源是很有用的。</span><span  id=Layer171></font></p><p><font size=2 color=#3c3c3c face=arial>Microsoft曾尝试许多次以提供一个公用的介面。最古老的介面(仍是目前支援最广泛的)是一个API,称为Open Database Connectivity (ODBC)。ODBC是由一组C函数定义的,而ODBC趋动程式目前已支援最流行的资料库。不过在COM的到来,定义成C函数的API已渐渐过时了。今天,Microsoft以一组COM物件,并在每个物件实作一组适当的介面来定义一个最新的API-以用来进行资料存取和其它目的。Microsoft提出的第一个以COM为基础的公用资料存取介面是OLE Database,常被称为OLE DB。虽然OLE DB功能非常强大,但对一般程式设计师来说还是太复杂了。因此,Microsoft建立一个另一个资料存取介面,称ActiveX Data Objects (ADO)。</span><span  id=Layer172></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Microsoft已定义许多不同的介面来进行资料存取</span><span  id=Layer173></font></p><hr><p><font size=2 color=#3c3c3c face=arial>就如图1-8中展示,一个应用程式可能潜在地使用叁种介面的任一个。ADO永远实作在OLE DB之上,而OLE DB可以,也可以不实作在ODBC之上。ADO可有效地让任何类型的程式设计语言使用,它也是Microsoft最鼓励开发Windows 2000 应用程式的设计师所使用的资料存取介面。关於Windows 2000 资料存取介面更详细的部份将於</span><span  id=Layer174>&nbsp;<a href=206.htm# target=_new>第六章</span><span  id=Layer175></a>&nbsp;中描述。</span><span  id=Layer176></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>ADO是目前新应用程式最常用的资料存取介面</span><span  id=Layer177></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>资料存取介面和Windows 2000 分散服务有何关系并不明显。那麽为何要在这边提到它呢?答案是为描述Windows 2000 其它分散服务运作的情况,特别是COM+所提供的交易服务,至少需要了解Microsoft基本的资料存取服务之概念。</span><span  id=Layer178></font></p><hr><br><center><a target=_new href=imagesh/1-8.gif><img border=0 src='imagesl/1-8.gif'></a></center></span><span  id=Layer179><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-8</span><span  id=Layer180>&nbsp;</b></font>一个应用程式可以使用ADO、OLE DB,或ODBC来存取资料。</span><span  id=Layer181></td></table></font></center><font color=#3e72d7 face=arial size=4><b>分散式交易服务</span><span  id=Layer182></b></font><p><font size=2 color=#3c3c3c face=arial>交易在许多分散式应用程式扮演相当重要的角色。一个交易可以视为一组操作,如更改一个或多个资料库,它们必须视为一个单位以进行确认或取消的动作。在交易中每个操作都会执行,或全部都不执行。举例来说,在两家银行帐户之间进行转帐需要在一个帐户中增加金额,然後在另一个帐户中减少金额。若只有一个操作发生,有些人可能就会不高兴。将这两个操作包装在同一个交易中可以确保两个事件都会发生或全部都不发生。</span><span  id=Layer183></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>交易对许多类型的应用程式来说是很重要的</span><span  id=Layer184></font></p><hr><p><font size=2 color=#3c3c3c face=arial>目前大部份的DBMS都支援交易,因此应用程式有时可以依赖底层的DBMS来符合它们交易性的需求。(事实上,Microsoft提出的叁种资料存取介面都允许应用程式来开始或结束一个受DBMS管理的交易。)不过交易中的操作横跨多个DBMS是很不寻常的。在这个情况下,任何一个DBMS所提供的交易管理函数可能就不够用了。此外,还需要一些服务来确保分散式环境中交易之确认或取消的动作是视为一体的。在Windows 2000 中有一个服务,称分散交易协调者 (Distributed Transaction Coordinator,DTC)便负责这件事。</span><span  id=Layer185></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>某些交易必需跨多个DBMS</span><span  id=Layer186></font></p><hr><p><font size=2 color=#3c3c3c face=arial>DTC允许应用程式使用跨多台机器与多个DBMS的交易。DTC可以搭配Microsoft的DBMS、SQL Server与其它公司的DBMS来使用,如Oracle与IBM的DB2。虽然DTC只执行在Microsoft的作业系统上,它也可以确保执行在其它作业系统上的DBMS之交易行为,包含UNIX与IBM大型主机。DTC运作的过程将在</span><span  id=Layer187>&nbsp;<a href=207.htm# target=_new>第七章</span><span  id=Layer188></a>&nbsp;中描述。</span><span  id=Layer189></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>DTC允许交易横跨多个DBMS或多台机器</span><span  id=Layer190></font></p><hr><font color=#3e72d7 face=arial size=4><b>元件服务:COM+</span><span  id=Layer191></b></font><p><font size=2 color=#3c3c3c face=arial>COM已普遍地存在-它被应用在许多为Microsoft作业系统撰写的大部份软体上。然而软体技术是日新月异的东西,而Windows 2000引进了下一代以COM为基础的技术。这就是所谓的COM+,这个版本并没有变动COM的基本-物件、介面与method都仍和以前一样。</span><span  id=Layer192></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>COM+是COM下一代的技术</span><span  id=Layer193></font></p><hr><p><font size=2 color=#3c3c3c face=arial>COM+新增许多的功能到这个基础技术上来。在COM+中有一部份重要的技术是由Microsoft Transaction Services (MTS)而来。虽然「MTS」这个名词已不再使用了,不过它提供的服务目前成为Windows 2000 COM+的一部份。COM增强了这些服务,包含交易、基於客户端的角色(role)来授权、物件状态管理...等等。不过对於已了解MTS运作的程式设计师来说,要抓住COM的这个部份是不难的。</span><span  id=Layer194></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>COM+的许多概念都是从MTS而来的</span><span  id=Layer195></font></p><hr><p><font size=2 color=#3c3c3c face=arial>COM+也包含许多其它的服务,包含:</span><span  id=Layer196></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;伫列元件</span><span  id=Layer197>&nbsp;</b></font>(</span><span  id=Layer198><font size=2 face=arial color=#3e80d7><b>&nbsp;Queued Componen</span><span  id=Layer199>&nbsp;</b></font>) 允许透过MSMQ呼叫COM物件的method,而不使用COM传统的机制。</span><span  id=Layer200></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;COM+事件</span><span  id=Layer201>&nbsp;</b></font>允许物件能够订阅事件,然後在事件发生时进行通知。</span><span  id=Layer202></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;其它特性</span><span  id=Layer203>&nbsp;</b></font>举例来说,物件集区(Object Pooling)允许将COM物件的实例放到快取以供稍後使用。</span><span  id=Layer204></li><br></font></ul></font><p><font size=2 color=#3c3c3c face=arial>Windows 2000发行时也支援元件负载平衡的特性。一开始它是COM+的一部份,可在Windows 2000技术预览版本中看到。这个功能是可以运作的,不过CLB正式发行时会在出现另一个产品上(在Application Center Server 2000这个产品上出现。)。CLB允许COM物件在丛集机器中最适合的机器上建立,并能够聪明地跨这些系统平衡应用程式的负载。</span><span  id=Layer205></font></p><p><font size=2 color=#3c3c3c face=arial>许多(虽然并非全部)COM+的特性都是加强版本的标准COM执行时期程式库所提供的,通常称为COM runtime。在COM一开始发行时,这个程式库提供了所有COM物件可使用的标准服务。而COM+的到来,将MTS提供的服务内建在COM runtime上,同时也增加一些新的服务。如图1-9所示,COM runtime可以介入客户端与COM物件之间,拦截所有对COM物件的呼叫。也由於COM runtime处於客户端和物件之间,它便可以自动地提供一些服务,如交易、授权和状态管理。COM+为COM所带来的增强服务将在</span><span  id=Layer206>&nbsp;<a href=208.htm# target=_new>第八章</span><span  id=Layer207></a>&nbsp;中讨论。</span><span  id=Layer208></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>COM+透过增强版本的COM runtime程式库来提供许多服务</span><span  id=Layer209></font></p><hr><br><center><a target=_new href=imagesh/1-9.gif><img border=0 src='imagesl/1-9.gif'></a></center></span><span  id=Layer210><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-9</span><span  id=Layer211>&nbsp;</b></font>一个增强版本的COM runtime程式库,COM+的主要部份,提供给COM物件许多不同的服务。</span><span  id=Layer212></td></table></font></center><font color=#3e72d7 face=arial size=4><b>讯息伫列服务</span><span  id=Layer213></b></font><p><font size=2 color=#3c3c3c face=arial>对於某些类型的分散式应用程式来说,使用COM与DCOM提供的RPC沟通机制是很完美的。不过有些事是RPC做不到的。举例来说,使用RPC时,每个远端的呼叫都会将客户端绑死,直到客户端接收到伺服器的回应之前,它不能执行其它工作。在某些情况下,客户端会觉得它毫无反应,使用者便会不快乐。RPC另一项限制便是客户端与伺服器都必须同时执行-客户端无法投寄某些讯息,而稍後再由伺服器取回。虽然RPC对程式设计师来说是相单简单容易使用,不过它的弹性也不高。</span><span  id=Layer214></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>让客户端在往下执行之前需等待回应有时会造成问题</span><span  id=Layer215></font></p><hr><p><font size=2 color=#3c3c3c face=arial>对於无法存活在RPC限制下的分散式应用程式而言,讯息伫列不失为一个好选择。虽然有时它比RPC要复杂些,但讯息伫列提供更大的弹性。现在客户端不需要等待伺服器的回应,事实上,伺服器有可能在客户端传送要求的时後是不存在的。应用程式透过将讯息传送到伫列,然後从伫列中接收讯息的方式来沟通。</span><span  id=Layer216></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>讯息伫列可允许客户端传送一个讯息,然後不需等待便能继续执行</span><span  id=Layer217></font></p><hr><p><font size=2 color=#3c3c3c face=arial>MSMQ在1997年发行,允许分散式透过伫列沟通。如图1-10所示,MSMQ允许应用程式传送一个讯息到伫列中。</span><span  id=Layer218></font></p><br><center><a target=_new href=imagesh/1-10.gif><img border=0 src='imagesl/1-10.gif'></a></center></span><span  id=Layer219><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-10</span><span  id=Layer220>&nbsp;</b></font>透过MSMQ,部份的分散式应用程式便可以传送讯息到伫列,并从伫列接收讯息。</span><span  id=Layer221></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>若有必要,MSMQ可以将讯息转送到其它伫列中,最後由其它应用程式接收。这个应用程式也有可能回传一个讯息给传送者,通常是透过不同的伫列。传送端并不需要等待回应,当讯息传送时它也不一定在执行中。透过MSMQ,发出一个要求与取得一个回应的动作是完全分开的,和密集连锁的呼叫和RPC的回应不同。MSMQ对许多分散式应用程式来说是一个功能相当强大的工具,将於</span><span  id=Layer222>&nbsp;<a href=209.htm# target=_new>第九章</span><span  id=Layer223></a>&nbsp;中描述。</span><span  id=Layer224></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>MSMQ提供讯息伫列服务</span><span  id=Layer225></font></p><hr><font color=#3e72d7 face=arial size=4><b>Web服务</span><span  id=Layer226></b></font><p><font size=2 color=#3c3c3c face=arial>有多少个分散式应用程式是为了没有浏览器介面选择性的Windows 2000 而建立的?正确的答案是相当趋进於零。不管用在Internet或跨公司组织的Intranet,今日的应用程式必须要能够过Web存取-这是使用者要求的。</span><span  id=Layer227></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>透过Web存取已变成基本的功能</span><span  id=Layer228></font></p><hr><p><font size=2 color=#3c3c3c face=arial>为了达到这个要求,Windows 2000 包含了Internet Information Services(IIS)。IIS和其它的Web伺服器一样,它允许客户端的浏览器要求一个包含HyperText Markup Language (HTML)的一般档案;客户端透过Uniform Resource Locators (URLs)来要求这些档案。同样地就像其它Web伺服器一样,IIS允许客户端传入可以识别身份和档案的URL。当这些应用程式执行时,便动态地产生HTML和其它的资讯,然後传回IIS以及要求这份文件的浏览器上。</span><span  id=Layer229></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>IIS允许浏览器存取档案与应用程式</span><span  id=Layer230></font></p><hr><p><font size=2 color=#3c3c3c face=arial>如图1-11所示,IIS可以使用许多种方式来产生资讯并传回客户端。</span><span  id=Layer231></font></p><br><center><a target=_new href=imagesh/1-11.gif><img border=0 src='imagesl/1-11.gif'></a></center></span><span  id=Layer232><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-11</span><span  id=Layer233>&nbsp;</b></font>IIS提供许多方式来产生要回传到客户端的资讯,范围从读取一个简单的档案到建构一个存取资料库的复杂应用程式。</span><span  id=Layer234></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>对於IIS来说最简单的方案便是从一个一般的档案中读取HTML标注的资料。也有可能执行一个能动态查询资料库来产生HTML的应用程式。IIS支援许多不同的方式来建立这类的应用程式,包含:</span><span  id=Layer235></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Common Gateway Interface</span><span  id=Layer236>&nbsp;</b></font>(</span><span  id=Layer237><font size=2 face=arial color=#3e80d7><b>&nbsp;CGI</span><span  id=Layer238>&nbsp;</b></font>) 允许建立一个应用程式,每当发出一个新要求时,便在另一个行程中执行。</span><span  id=Layer239></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Internet Server API</span><span  id=Layer240>&nbsp;</b></font>(</span><span  id=Layer241><font size=2 face=arial color=#3e80d7><b>&nbsp;ISAPI</span><span  id=Layer242>&nbsp;</b></font>) 允许建立DLL,在必要时载入。</span><span  id=Layer243></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Active Server Page</span><span  id=Layer244>&nbsp;</b></font>(</span><span  id=Layer245><font size=2 face=arial color=#3e80d7><b>&nbsp;ASP</span><span  id=Layer246>&nbsp;</b></font>) 这个技术可让程式设计师建立程式-使用执行在Web伺服器上,相当简单的描述语言,如Visual Basic Scripting Edition,通常称为VBScript。ASP结合了功能强大、容易使用的特性,这也是在IIS建立应用程式最常见的解决方案。</span><span  id=Layer247></li><br></font></ul></font><p><font size=2 color=#3c3c3c face=arial>任何使用这些方案的应用程式都可以建立并使用COM物件,能让应用程式存取资料库、其它应用程式...等等。IIS也和COM+整合在一起,允许应用程式使用它提供的服务,包含交易等等。</span><span  id=Layer248></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>IIS应用程式可以使用COM物件以及COM+服务</span><span  id=Layer249></font></p><hr><p><font size=2 color=#3c3c3c face=arial>由於Web浏览器介面的使用人口大增,跨公用或私有网路的需求,许多新的分散式应用程式是使用Web技术建立的。在Windows 2000 中是透过IIS,以Web为基础的应用程式和IIS如何整合在一起将在</span><span  id=Layer250>&nbsp;<a href=210.htm# target=_new>第十章</span><span  id=Layer251></a>&nbsp;中讨论。</span><span  id=Layer252></font></p><a name=201004><font color=#3e70d7 face=arial size=5><b>管理分散式服务</span><span  id=Layer253></b></font><p><font size=2 color=#3c3c3c face=arial>就像Windows 2000 中的许多观点一样,分散式服务是需要管理的。建立Windows 2000 管理工具的标准解决方案便是建立Microsoft Management Console (MMC) 嵌入式管理单元。虽然MMC也可以用在Microsoft其它的作业系统上,但在Windows 2000 中它是个建立管理工具一致性的解决方案。</span><span  id=Layer254></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>管理工具建立成MMC嵌入式管理单元</span><span  id=Layer255></font></p><hr><p><font size=2 color=#3c3c3c face=arial>一个MMC嵌入式管理单元是一个COM物件,它必须执行在MMC console的控制之下。一个console中可以包含一个或多个MMC嵌入式管理单元,每一个则专注在特殊的工作上,而不同的console则可以因不同的目的建立。举例来说,一个系统管理者可以建立一个console将管理Active Directory所有的管理单元包含进来,而其它的管理者可以将经常使用的元件服务管理单元包含进来以管理COM+应用程式。虽然这并不是Windows 2000 管理上的守则,但我将在本书中适当地提及这些管理单元。</span><span  id=Layer256></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>多个MMC嵌入式管理单元可以组成一个MMC console</span><span  id=Layer257></font></p><hr><a name=201005><font color=#3e70d7 face=arial size=5><b>使用Windows 2000分散式服务</span><span  id=Layer258></b></font><p><font size=2 color=#3c3c3c face=arial>若要了解在Windows 2000 中的分散式服务如何一起运作的就要看看一些范例。在这个范例中将展示这些诉求-一个相当简单的分散式银行系统,一家虚拟的QwickBank公司-这两者底层都是以本章之前描术的银行COM物件为基础。在</span><span  id=Layer259>&nbsp;<a href="#1-6" target=_new>图1-6</span><span  id=Layer260></a>&nbsp;中展示,这个物件有两个介面:IAccount,它的method包含Credit、Debit与GetBalance。另一个介面是ITransfer,只包含一个简单的method,MoveMoney。使用这些method,客户端便可以操纵银行帐户的馀额、检查馀额、在帐户间进行转帐。因为帐户馀额事实上是维护在一个或多个资料库之中的,物件便使用适当的资料库来实行每一个操作。也因为某些操作,如执行ITransfer的MoveMoney,可能会需要对两个资料库有不可分割性的变更需求,因此这些范例应用程式都需要COM+与DTC提供的交易服务。(事实上,应用程式也有可能使用其它的COM+服务,不过在这个简单的范例中并没有提及。) 扮演物件客户端的终端使用者可能是银行行员,以处理顾客的需求,也有可能是顾客自己,透过Internet存取自己的帐户。下面的情节中将示范这两种可能性。</span><span  id=Layer261></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>真正的应用程式会同时使用许多Windows 2000 的分散式服务</span><span  id=Layer262></font></p><hr><font color=#3e72d7 face=arial size=4><b>一个DCOM客户端的范例</span><span  id=Layer263></b></font><p><font size=2 color=#3c3c3c face=arial>第一个情节展示於图1-12。在这个范例中,客户端应用程式(或许是使用Visual Basic或C++撰写的)使用DCOM来存取前述的银行物件。为了达到这个目的,客户端要先使用DCOM在伺服器上建立一个物件。客户端系统使用Active Directory来找到伺服器并建立物件,对应用程式来说这是通透的(图1-2步骤一)。</span><span  id=Layer264></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>一个客户端可以使用Active Directory来决定欲建立物件的地方</span><span  id=Layer265></font></p><hr><br><center><a target=_new href=imagesh/1-12.gif><img border=0 src='imagesl/1-12.gif'></a></center></span><span  id=Layer266><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图1-12</span><span  id=Layer267>&nbsp;</b></font>客户端可以使用DCOM来存取商业逻辑,决定於一个完整应用程式用到的其它服务。</span><span  id=Layer268></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>虽然图1-12中并没有显示,客户端可能会先与DNS伺服器取得连系,以找到正确的网域控制主机,不过最後客户端会向网域控制主机发行一个LDAP查询。接着Active Directory回传欲建立银行物件的伺服器所在位置。</span><span  id=Layer269></font></p><p><font size=2 color=#3c3c3c face=arial>不过此伺服器机

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -