精彩的人生

好好工作,好好生活

BlogJava 首页 新随笔 联系 聚合 管理
  147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks

#

    ESB这个新名词让人感到既时髦又有点儿迷糊,它似乎正在被赋予许多自己不应承载的内容。那么,ESB究竟是什么呢?

    中间件到底是什么东西? 它现在就好比是不断将新思想一股脑儿浇在老方法上的一碗意大利面条。业界不断将更多的调料浇在这碗面条上: 例如企业应用集成、企业信息集成、业务流程管理和面向消息的中间件等模糊概念。

    中间件食谱中的最新成份是时髦名词——ESB(企业服务总线)。ESB现在已经成为一种市场诱惑,因为它承诺提供简单、快速、基于标准的多点集成。如果现在翻开大多数中间件厂商的资料,就会发现有关ESB的文章真是长篇大论,但这些却似乎让新方法与老范例之间的界线更加模糊了。

    其实,ESB就是一种可以提供可靠的、有保证的消息技术的最新方法。ESB中间件产品利用的是Web服务标准和与公认的可靠消息MOM协议接口(例如IBM的WebSphere MQ、Tibco的Rendezvous和Sonic Software的SonicMQ)。ESB产品的共有特性包括:连接异构的MOM、利用Web服务描述语言接口封装MOM协议,以及在MOM传输层上传送简单对象应用协议(SOAP)传输流的能力。大多数ESB产品支持在分布式应用之间通过中间层如集成代理实现直接对等沟通。

    厂商支持ESB的方式虽然各不相同,但是显然这一种类产品的覆盖面非常广泛,包括了传统MOM厂商以及中间件公司,例如Cape Clear、Fiorano、IONA、Polar Lake、SeeBeyond、SpiritSoft、Systinet和Vitria。任何厂商只要支持Java消息服务MOM或JMS API都可以将自己定位于ESB厂商。任何实现新兴Web 服务可靠消息传递(WS-RM)规范的厂商也可以声称自己提供了ESB工具。

    当然,没有一家ESB厂商满足于只提供一条可靠的通道。因此,它们将各种东西投入到他们的ESB大锅里,并且拼命地搅拌和翻炒。MOM、企业应用集成、业务流程管理、集成代理、指挥协调、数据转换、发布与订阅、事件通知、基于内容的路由、事务处理……它们都是ESB,至少厂商们会这么说。

    而企业的IT人员需要的是易于安装、配置、执行和管理的集成产品。他们需要强大的、支持标准的、能实现任意对象之间集成的中间件。他们需要廉价而迅速地集成,而不是费时多年、高风险、耗费大量资金的大型集成。

    今天的ESB产品能够提供这一切吗?恐怕很难。问题的关键并不在于产品本身,而是那些已经在许多企业中扎根的多如牛毛的中间件产品、协议和方法。各公司为中间件和集成应用投入了太多的资金,以致于不可能在一夜之间将它们全部淘汰,再从头开始。实际的集成环境基本上是采用多家厂商的中间件产品,其中许多中间件产品是在特殊战略项目的环境下部署的,或用来集成特定的应用、平台和协议集合。

    因此,大多数的公司并没有单一企业范围的“总线”,而这种总线也不可能很快问世。由于实际应用中的集成需求多得令人眼花缭乱,没有一种ESB产品可以提供单一的解决方案。大多数企业所能做的就是在老环境难以应付的异构性上再覆盖上一层基于标准的集成环境。

    总而言之,ESB术语只是一个有关MOM和基于SOAP的Web服务融合的笼统短语罢了。我们不应该赋予这个术语它所不能承载的更多含意。它只是连接我们整体盘子上中间件肉丸子的一种方法而已。 


    ·相关链接·

    什么是ESB ?

    全称为Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。

    ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。

原文地址:http://www.soft6.com/news/detail.asp?id=12195

posted @ 2006-03-09 10:15 hopeshared 阅读(334) | 评论 (0)编辑 收藏

作者: 务实
Thursday, October 9 2003 2:57 PM


1、  概述
2、  JXTA的设计目标及有关概念
3、  JXTA协议
4、  JXTA应用与发展

一、概述

美国Sun公司自从1995年向世界推出了Java语言以来,每年都会在Java领域里推出新的技术,从JavaCard、J2ME到J2EE、JINI、JavaTV,推动了Java技术的发展和应用。在最近几次的旧金山的JavaOne会议中,JXTA是该公司向业界推出的较新技术。该技术的目的是为P2P的网络应用开发提供一个统一的平台,而且为了鼓励和支持该技术的发展,JXTA项目采用了开放源码的方式,因此吸引了大量业界人士参与到JXTA技术的研究与应用当中,JXTA Community(www.jxta.org)就是人气很旺的一个Java技术研究开发的网站。

JXTA最早起源于2000年的夏天,现在大家把JXTA看成是P2P的平台,JXTA的目标是要解决几个技术与商业上的难题。第一是解决众多P2P系统互不相通的问题。2000年,是P2P突飞猛进的高潮年,但高潮背后却是许多小公司用自己的封闭系统试图在Internet上圈一块地。Sun认为,只有互通才能真正发挥出P2P的优势,就好像IM(Instant Messaging),能互连的人越多,越有价值。所以Sun决定出面发布一个平台,使所有P2P系统都能连接起来,只有Sun这样位置中立、但在技术上有雄存实力被大家认可的公司才有希望做成这一平台。

JXTA的另外一个目的就是找寻一套数量最少、概念最简单的系统构成的“积木”。如果成功,这几块积木就会是今后大家构架信息系统的基本模块,从而帮助人们摆脱像Windows或TCP/IP这样的传统软件带来的包袱。Java、Jini和JXTA像是J的三部曲,Java取自著名咖啡产地名,Jini是genie(精灵) 的谐音,而JXTA则是Juxtapose的缩写。当时BillJoy用grep把所有J打头的英文词找出来,juxtapose跃然纸上,很是巧妙。既表现了P2P或肩并肩的意义,又说明JXTA不局限于P2P。但JXTA与众不同,它是由一系列网络协议构成的,用任何语言都可以实现,并不只限于Java,只有彻底独立于操作系统、网络传输技术以及程序设计语言,才真正达到了跨平台,而这样的技术,最容易受到业界的认同。

JXTA是项目创始人、Sun首席科学家BillJoy二十多年酝酿的结晶,“JXTA技术是网络编程和计算的平台,用以解决现代分布计算尤其是点对点(P2P)计算中出现的问题。”JXTA研究项目,将提供使用户更便捷地访问连接在互联网上的个人电脑资源的新框架,从而进一步拓展互联网的空间。同时JXTA也是Sun的ONE互联网战略的延续,并且将更积极的姿态与Microsoft的.Net战略和Hailstorm计划一争高低。Joy指出,JXTA可能是Sun One平台最简单的一部分,而不是打算将它变成象微软的.Net那样复杂的东西,而且JXTA也将是开放源代码的团体;有别于而微软的Passport和Hailstorm技术都是申请专利的专有技术,Sun希望通过公开JXTA源代码的方式,成为微软最有力的竞争对手,在公开源代码的领域中,Linux和Apache是卓越的成功典范,Sun也希望JXTA能铸造新的成功。

JXTA技术提供了基础性的机制解决当前分布计算应用中面临的问题,实现新一代统一、安全、互操作以及异构的应用。目前它支持基于Java技术的平台和系统。而将来JATX技术将不受到内存的限制而支持更多小型移动设备。JXTA通过Java技术和XML数据表达的结合,提供了强大的功能使得垂直应用得以交互,并且可以克服目前P2P软件中的限制。同时,通过小型、简单、便于开发的构造模块,JXTA将使开发者从建立各自框架的复杂工作得以解放,可以潜心关注于建设各类新颖、创造性的、分布式计算应用。

二、JXTA 的设计目标及有关概念

一)P2P技术

P2P即Peer to Peer,称为对等连接或对等网络,P2P技术主要指由硬件形成连接后的信息控制技术,其代表形式是软件;P2P并不是一个新的概念,因特网上的许多核心协议本身就是P2P的应用程序,因特网的发展过程也说明了这一点,我们可以通过下述特性来描述P2P:

  • Peer知道其他Peer的存在。
  • Peer在一个虚拟的网络中运行。
  • Peer同时具有Client和Server的特点。
  • 多个Peer可以组成为一个Peer组。

从因特网的发展来看,目前已经完全有可能开发新的P2P应用程序来补充和取代现有的集中式应用程序,文件共享程序和聊天程序的成功已经吸引了许多程序员加入P2P程序的开发。而且随着技术的发展,P2P所面临的安全、控制和网络使用的问题将逐步解决。P2P系统可以提供如下功能:

  • Peer的独立控制能力----用户将变得非常强大,可以创建自己的组和虚拟网络,而且可以非常容易地发布自己的资源。
  • 可靠性----P2P系统是任何人都可以获得的可靠系统。
  • 扩展性----P2P系统的用户数量可以急剧膨胀,可以与最大的集中式系统媲美。
  • 性能----各种资源之间可以协同工作来有效地解决问题。

P2P是一种基于互联网环境的新的应用型技术,主要为软件技术,P2P网络应用发展可能要涉及到4个方面关键技术:

1) 对于互联网上众多计算机,P2P应用比其他应用要更多考虑那些低端PC的互联,它们不具备服务器那样强的联网能力,同时对于以往的P2P应用技术,现在的硬件环境已经更为复杂,这样在通信基础方面,P2P必须提供在现有硬件逻辑和底层通信协议上的端到端定位(寻址)和握手技术,建立稳定的连接。涉及的技术有IP地址解析、NAT路由及防火墙。

2) 在应用层面上,如果两个Peer分别代表两家不同的公司,而且它们已经通过互联网建立连接,那么一方的信息就必须为另一方所识别,所以当前互联网上关于数据描述和交换的协议,如XML、SOAP、UDDI等都是一个完善的P2P软件所要考虑的。

3) 有通信就要有安全保障,加密技术是必须要考虑的。

4) 其他需考虑的有如何设置中心服务器,如何控制网络规模等。

与P2P相关技术,有许多其他的技术被称做P2P,或者与P2P相关,或者可以被当作P2P使用,主要是以下几方面内容:

  • JINI技术;
  • 软件代理(Agent)技术;
  • JXTA的竞争者(Gnutella和Freenet等);
  • Web Services技术。

二)JXTA设计目标及层次结构

1、JXTA设计目标

首先,JXTA是为了构建P2P网络而制订的一组协议,是处理构建P2P网络所碰到的问题的解决方法,JXTA标准协议规范介绍如下:

    “JXTA由六个协议组成,这些协议是专为特定的、分布式的、对等的网络计算而设计的。使用这些协议,Peer可以互相合作来建立自我组织、自我管理的对等组,而不必关心它们在网络中所处的位置(在网络边缘或者防火墙的后面),并且也不需要集中的管理机构。”

   因此JXTA的核心是六个协议,其次,JXTA是P2P应用程序开发的运行平台;目前JXTA首先推出了基于Java的参考实现,提供了支持六个协议的Java API,JXTA还将推出包括C语言在内的其他编程语言的API,JXTA在设计时有如下几个目标:

  • 操作系统无关
  • 语言无关
  • 为P2P应用提供服务和基础

    从本质上讲,JXTA的目标是希望在任何设备,从台式机到PDA、汽车、洗衣机等设备都可以支持P2P编程。这里有几个概念上的目标,它们包括:

  • 使用组来组织Peer并且在组内提供服务和应用的环境。
  • 组可以使用认证和验证方式来控制组内的访问权限。
  • 通过网络来发布关于Peer和网络资源的信息。
  • 通过系统来发布各种请求。   
  • 提供一个基础平台,供Peer之间做路由和通信。在防火墙或者其他障碍后面的Peer之间的通信也是这个目标中很关键的一部分。
  • 提供一种机制允许Peer之间可以彼此监视状态和资源。

    除此之外还有一些其他目标,例如加密、支持不同的通信协议、易用性、稳定性和性能等,所有这些目标在设计JXTA协议和最初的Java API时,都被考虑到,另外,开发人员和Sun公司的管理者还考虑了以下目标:

  • 系统应该允许任何设备直接加入到JXTA网络中去。
  • 系统应该允许ISP对网络上的Peer进行集中管理。
  • 系统应该支持数字产品版权的管理,例如购买的软件、音乐CD、电影等。
  • 封装和抽象一些特定的核心功能,以便产生出商业方面的应用。

从上面列出的目标可以看出两点,首先要让企业觉得使用JXTA可以使自己对系统进行控制,原因在于大部分P2P系统没有集中式的管理,所以在应用中不受企业的欢迎;其次,对于硬件或者软件提供商来说,JXTA系统需要能够创造出利润。

    根据以上这些目标,JXTA被设计成企业可以接受的、容易维护的、健壮的,并且能够满足任何P2P应用的概念。

2、JXTA的层次结构

JXTA由三层组成,如图1所示。第一层是JXTA核心层,它包含了服务所需要的核心功能;第二层是服务层,它提供了访问JXTA协议的接口;第三层是应用层,它使用服务来访问JXTA网络和JXTA提供的功能。这样的设计和一个标准的操作系统比较相似,标准的操作系统包括核心操作系统、服务和应用程序。

                                   图1 JXTA的层次结构

各层的说明如下所示:

  • 核心层(JXTA Core):这一层封装了最根本的东西,包括Peer、对等组、Peer发现、Peer通信、Peer监视和相关的安全原语。
  • 服务层(JXTA Services):这一层包括对于P2P网络不是必需的、但很通用的功能,如查找、共享、索引、代码缓存和内容缓存的机制。
  • 应用层(JXTA Application):这一层包括了应用JXTA服务开发出来的完整的P2P应用程序,例如myJXTA,JXTA-CAD等应用程序。

三)JXTA有关概念

  在JXTA网络中,有一些概念是需要熟悉和理解的,它们是从JXTA协议中提出的一系列的专有名词。

  1、Peer(对等机)

  Peer是一个虚拟的通信点。在一台计算机或者设备上可以有很多个Peer,一个Peer并不是一个用户,因为一个用户可以有多个Peer,同一个设备上也可以有多个Peer(在测试的时候经常用到)。因为Peer不等同于用户,所以需要将用户和Peer抽象出来并分离开。

  Peer与特定的网络服务联系得很紧,在JXTA的参考实现中,Peer可以使用网络提供的基本服务,例如rendezvous(集合点服务),router(路由服务),gateway(网关服务)等,这些基本服务又可以提供搜索和通信服务,一般来说,并不是所有的Peer都使用这些服务,它们只使用这些服务的一部分。

  2、PeerGroup(对等组)

  对等组是一种组织Peer并且发布组内的特定服务的方式。对等组可以被创建、加入和退出,在一个组里还可以更新一个组成员的关系,由于一些原因,对等组需要对成员关系进行一些限制,例如为了通信的安全、隐私的考虑等。这里使用一种协议来认证,它专门收集信息并判断其是否符合成员关系的要求。

 对等组为应用程序提供了一种环境,例如对某个话题感兴趣的Peer可以组成一个组,并且在组内使用一个聊天服务来讨论。这样,聊天的信息就会限制在那些加入到这个组内的成员之间。并且,对于想加入到这个组的Peer,可以使用成员ID来进行认证;没有这个ID的Peer不能够加人到组内,也就不能够使用组内的聊天服务,也可以把对等组看成一个虚拟的私人网络VPN,一个VPN只允许几个计算机之间互相交流,而不允许因特网上其他的成员加入,由于VPN使用了加密的方式,对于偷听者他们不能够理解组内的谈话,对等组也可以限制Peer的加入,同样也可以对谈话消息加密。

  3、Endpoint(端点)

 在JXTA应用中,端点是最基本的通信方法。一个端点就是实现了特定通信协议的Peer的地址。一个Peer可以有多个端点,这样可以通过不同的协议来与其他Peer通信。

 端点不一定要是物理地址,端点可以允许物理地址发生变化。端点的一个简单例子 就是一个IP地址加上一个端口。通过使用这些值,可以打开一个流并且与目标Peer通信。然而,JXTA在流的基础之上又放置了一层,称之为Pipe(管道)。这样,不是将一个流连接到一个地址,而是把一个管道连接到端点上。端点和管道的好处在于,不用去关心Peer所使用的真正的地址和协议是什么。使用抽象出来的端点和管道,可以为创建P2P应用提供强大的功能并降低复杂性。由于管道使用通信协议来连接,端点描述了协议和连接的所需要的信息。因此端点可以描述HTTP、TCP、BEEP以及其他可以支持的通信协议。

 一个Peer可以支持一个或者多个端点。通过使用多种协议,Peer可以提供更有效率的方法。也就是说,如果两个Peer都在防火墙的后面,可以直接通过它们的TCP端点来通信;如果两个Peer要穿过防火墙去通信,则需要使用HTTP的端点。

 4、Pipe(管道)

 管道是Peer之间的虚拟通道,通常,我们认为对等通信是单个的通信连接,但是也并不是总是这样的,因为防火墙和其他障碍的存在,许多Peer并不能直接连接,这时,管道更像一个在多种通信协议之上的虚拟层,可以通过起网关作用的Peer对通信提供中继支持。

 管道是JXTA最基本、最重要的特性,它提供了一种很好的方案,使得Peer在大多数网络情况下都可以通信,而不用去管防火墙或者其他的障碍,即使你不知道另外一个Peer的位置以及它所使用的协议等信息,通过管道仍然可以与之通信;管道作为一种抽象的方法,隐藏了一些细节,比如在多个连接的时候可能会有多个Peer参与进去,管道也可以重新定位,找到原来的Peer。在JXTA的参考实现中,有几种常用到的管道,它们是:

  • 单向异步----这种管道只用来做单向通信。管道是异步的,消息到达时可能不是顺序的。这是JXTA平台上最基本的一种类型的管道。
  • 同步的请求/应答----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它们发送时候的顺序。
  • 成批发送----用来发送大量的数据。
  • 流传送----通过流可以更有效地传送诸如声音、视频等大量的数据。
  • 双向----它是两个单向异步管道的组合。   
  • 单向同步----所有发出的信息都会收到一个应答消息,消息到达的顺序是按照它们发送时候的顺序。
  • 单向可靠安全的管道----所有发出的信息都会收到一个应答消息,并且这些消息都是加密的。

管道还可以分成以下两种类型:

  • 点到点类型----点到点的管道连接两个不同的Peer。可以使用多个起网关作用的Peer来创建连接。
  • 传播类型----将一个Peer连接到多个目标Peer。

    现有的JXTA参考实现已经提供了单向异步管道、单向可靠安全管道和双向的管道。    JXTA和传统的网络是非常不同的,大多数网络协议或者没有地址,或者有一个固定的地址,而JXTA抽象出一个概念叫做端点,用来作为地址。一个Peer可以有多个端点,Peer可以通过一种或者多种协议例如TCP、HTTP等进行通信,所以可以使用多个端点,JXTA使用多种传输协议的目的是为了在与其他Peer通信时可以选择最好的方式。如果一个Peer在企业的防火墙的后面,可以使用HTYP来与防火墙之外的Peer通信,还可以使用TCP来与防火墙内局域网内部的Peer通信,通过灵活使用多个传输端口,对特定的Peer使用特定的协议,以得到最好的速度和响应。

5、AdvertiSement(广告)

     一个广告就是一个XML文档,它用来描述JXTA的消息、Peer、对等组或者服务等。广告都遵守编码、标签和内容的标准,广告用来交换JXTA网络上可以获得的任何信息。例如,一个Peer创建了名称为“MyChat”的对等组后,就可以使用IP多播方式把广告发布到本地的JXTA网络;也就说,子网中的每一个Peer都会收到一份广告的副本,此外广告还会被发送到集合点去。

    Peer使用一种叫做集合点(Rendezvous)的特殊Peer来发现网络上其他地方的广告。集合点Peer可以存储广告并且支持搜索。Peer可以使用对等组的名字或者其他属性来搜寻该对等组广告。有了对等组的广告,其他的Peer就可以使用广告中的XML来实例化并加入到“MyChat”这个对等组中。一旦成为对等组的成员之后,Pear可以使用对等组的环境所提供的服务。

    广告实际上是P2P网络中的“名片”,P2P网络中的任何资源,包括Peer、对等组、管道等都可以用广告来描述,目前是在P2P网络中标志资源,并且可以相互找到; 大多数JXTA广告的编码是使用UTF-8,它是对Unicode的一种ASCII编码方式,UTF-8使用的是8位编码,Unicode使用的是16位编码,因此可以节省一半的空间,只有在消息体中间可能会使用到完全的Unicode编码,在消息体里可以指定使用Unicode或者其他的字符集作为编码方式。

6、Message(消息)

    在JXTA中,有两种方式来处理消息。一种是使用XML格式,数据都遵循XML标准被包装到消息里;另外一种是使用二进制格式。尽管希望对所有的JXTA消息都使用XML格式,可是由于大量的消息需要传送,使用XML格式的消息会导致效率较低,而且由于消息通常是在程序之间传送的,所以可以规范的消息内容使用二进制的格式;对于其他的仍然采用XML格式。

    在一个XML协议中使用二进制消息看起来似乎不太合理,但事实上使用二进制消息,除了可以得到紧凑的格式之外还有很多其他优点。首先数据可以使用一些标准技术进行压缩,对文本等数据的压缩可以节省大量的传输时间;另外,许多消息本身就是二进制的格式,例如文件共享程序中共享的文档可能就是二进制的,因此可以直接使用二进制的格式;还有一个问题就是加密,为了加密可以把数据转化成为二进制,然后直接使用二进制的消息来传输。

7、Rendezvous Peer(集合点)   

    一个集合点首先是一个Peer,而且是一个能够处理来自其他Peer请求的Peer。集合点也可以将请求委托给其他Peer,当然那些Peer也必须是集合点。使用集合点的一个主要目的就是为了方便在本地网络之外搜索广告。集合点通常拥有更多资源,并且可以存储大量的有关它周围Peer的信息。

    集合点也可以作为搜索的传递者。集合点可以转发发现请求到其他的集合点(原集合点通过与其他Peer的广告交互而得到了被转发集合点的信息)。每一个集合点如果本身没有被请求的信息它都会转发该请求。

                          图2 通过集合点进行Peer搜索的过程

   图2说明了一个典型搜索过程。远程搜索从Peer1开始,它首先通过IP多播(IP Multicast)询问本地的Peer2和Peer3,Peer2和Peer3很可能和Peerl处于同一个局域网内,所以很快收到了搜索请求。接下来,如果Peer2和Peer3没有所搜索的特定资源,搜索将通过集合点进行,Peer1会向它的集合点Peer发出搜索请求,如果该集合点Peer也没有所需的广告信息,该集合点Peer会向它所知道的集合点Peer发出搜索请求。需要注意的是,除了和提出查询请求的Peer处于同一局域网内的Peer收到查询请求外,在局域网外只有集合点才会收到查询请求。

    IP多播(IP Muhicast)是一个一到多的消息传输协议。IP多播用来发送数据的副本到一组地址。在P2P应用程序中,IP多播有两个好处。首先,因为多播使用一个组地址而不是使用IP地址,一个Peer可以在不知道接收者地址的情况下发送消息。这样做的结果是在多播网络中的所有Peer都可以响应发出请求的Peer,将有关查询的结果信息、甚至是自己的IP地址(用于与请求Peer直接通信)发送回去。

    IP多播的第二个好处是减少使用带宽。因为所有的Peer都可以看到一个单一的消息,没有必要向每一个Peer发送消息的一个副本。当发送大量的数据到一组Peer时,这一点是非常重要的。使用多播的一个缺点是一些防火墙和路由器会阻塞多播的消息。在因特网提供商之间通过因特网主干网可以支持多播消息,不过这种服务是需要额外付钱的。还存在其他IP多播的障碍,比如个人防火墙、子网路由器。这就是为什么JXTA不是仅仅支持IP多播的原因。一般情况下,只要在防火墙后能够支持多播对于大多数的P2P网络就足够了。你可以这样来利用本地的多播,先将消息发送到每一个网络的某一个特定的Peer上,然后该Peer又通过本地的多播将消息发送给本地的Peer。

    只有集合点允许进行超出局域网的搜索。一个Peer可以选择成为一个集合点,但这不是必须的,作为集合点好的一面是集合点可以缓存的形式保留从其他集合点得到的查询结果的副本;不好的一面是,该Peer将占用很多的内存和带宽。由于请求数量可能很多并且大量的广告数据会消耗很多的计算机资源,在这种情况下我们可以选择将计算机作为专用的集合点。集合点同时可以作为企业内部网的网关和路由器,其效果和使用传统的路由器是一致的。在每一个子网内也需要使用一个集合点,是否选择使用专用的集合点Peer取决于安全性的要求和使用的P2P应用的范围。P2P网络的拓扑结构需要通过多个的例子来进行测试并且需要定期监控。特别要注意的是:当P2P网络的服务在大量Peer上存有副本时,P2P网络的效率更高。有些时候并不是额外的集合点就可以提高网络的效率。

    当一个Peer在搜索广告时或者是其他服务使用集合点机制来路由消息时,集合点才被使用,因此一个Peer对集合点的需要不是持续的;为了能够更好地发挥作用,一个连接到因特网的集合点最好尽可能地暴露给网络上的多个Peer,在防火墙内把所有的Peer都配置为集合点不一定能够发挥很大的作用。

8、RouterPeer(路由Peer)

    JXTA中的一个路由Peer是一个支持Peer端点协议的Peer,不是所有的Peer都需要实现该协议,因为和传统的网络路由器一样,我们只需要少数几个路由器去支持一个大网络,JXTA路由器和传统的路由器非常相像,最主要的区别是P2P不是非常固定并且包括了很多非静态地址。

    9、GatewayPeer(网关Peer)

    JXTA中的一个网关Peer是一个作为通信中继的Peer。网关Peer和集合点的不同之处在于,网关是用来在Peer间传递消息,而集合点是用来传递请求的,网关Peer就像是无线电转发器或者说是Peer间的一个中介,它传递消息,因为有防火墙、NAT设备和代理服务器的存在,网关对网络的连通具有决定性的作用,网关可以存储消息,并且等待希望得到这些消息的接收者来收集它们。

    网关的存在是因为因特网非常混乱。混乱的原因是有各种各样的用于防止Peer间通过公用访问方法通信的安全保障和障碍物,另一个原因是各个Peer所支持的协议是不同的,一些Peer可能使用TCP,另一些可能使用HTTP。在无线情况下,我们需要使用无线应用协议(WAP),网关尽可能多地支持这些协议,因此它可以作为不同类型协议间的中介,JXTA目前支持TCP和HTTP,不过对其他协议的支持正在开发中。

    在因特网上网关是与大多数安全机制交互的关键,防火墙、代理服务器和NAT设备是主要的安全屏障。

图3 通过网关对等机进行Peer间的通信

 

图3说明网关Peer2是怎样作为Peer1和Peer3之间的交互接口的。网关将从Peer1来的TCP消息转换成HTTP消息传递给Peer3。当消息从Peer1发出时,是通过TCP发往网关Peer2,网关Peer2存储了这个消息,直到Peer3向它发出获得消息的HTTP请求。


三、JXTA协议

有六个协议构成了JXTA的核心,JXTA通过这六个协议来完成Peer之间的通信,彼此之间的资源的发布和发现,信息的传递和路由,协议本身并不是应用程序,需要添加更多的代码来开发有用的应用,协议隐藏了很多细节,这样使得编写JXTA应用程序比从空白开发P2P应用要容易得多。

    JXTA在JXTA协议规范中定义了它的协议。此规范描述了Peer间如何通信和交互,它并未描述实现的细节或如何编写P2P应用程序,下面是JXTA协议的列表,其中包含了协议名称的首字母缩略词,这六个协议如图4所示。

图4 JXTA的核心协议

 

    1、对等机发现协议Peer Discovery Protocol(PDP):主要用来发布自己的广告信息,并且从其他Peer处获得广告。PDP允许一个Peer发现其他Peer的广告(包括Peer广告、对等组广告、服务广告,或者是管道广告)。该协议通过指定一种广告类型(如Peer、对等组)、一个XML标签名、一个匹配这个XML标签所表示数据的字符串来定义查询。它使用Peer Resolver Protocol来发送和传播搜索广告的请求。

    2、管道绑定协议Pipe Binding Protocol(PBP):允许Peer之间建立虚拟的通信通道。

该协议首要关注的是通过Peer端点路由协议提供的路由连接Peer。它使用Peer Resolver  Protocol来发送和传播搜索广告的请求。

    3、对等机信息协议Peer Information Protocol(PIP):用来获得其他Peer的状态信息,包括更新时间、状态等等。该协议有时被用做ping命令,有时被用来获得一个Peer的基本状态信息,PIP消息的正文是自由格式的,它允许询问特定的Peer信息。此外,这种能力可以被扩展以提供控制能力,它使用Peer Resolver Protocol来发送和传播搜索广告的请求。

    4、对等机解析协议Peer Resolver Protocol(PRP):允许Peer发送更一般的请求,并可以接收到该请求的回应;同时可以将请求分发到组内的一个或者多个匹配的处理器,Peer解析协议是一个基础通信协议,它按照一种请求/响应格式来进行,要使用这个协议,需要提供一个查询的Peer和一个包含能被目标Peer理解的XML请求消息,该协议被用来支持JXTA中的其他协议(PDP、PBP和PIP),而且允许传播查询,例如,如果一个Peer收到一个查询并且不知道答案,解析协议就会将该查询发送给别的Peer。

    5、端点路由协议Peer Endpoint Protocol(PEP):通过该协议Peer以发送消息的形式获得一条路由路径。它使用Peer间的网关来建立一条包含一个或多个适合建立管道的管道协议组成的通路。管道绑定协议借助此Peer列表来建立Peer间的路由。一般情况下传统的路由器和DNS服务器会因为防火墙、代理服务器和NAT设备等原因而无法建立连接,而端点路由协议通过寻找网关来穿越诸如防火墙等障碍来建立连接。端点路由协议还可以同时帮助相互不支持对方使用协议的Peer进行通信。例如,如果你连接支持TCP的Peer-A和只支持HTTP的Peer-B,端点路由协议既可以选择一个可以支持此传输的网关,又可以选择多个并且相互协议兼容的一组网关。

    6、集合点协议Rendezvous Protocol(RVP):通过该协议Peer可以对一个服务订阅或者被订阅。集合点协议负责在JXTA对等组内传播消息,它为Peer在组内接收和发送消息并且控制消息如何传播定义了一个基本的协议。

    从编写P2P应用程序的角度而言,可以简单地划分上述协议的主要用途:

  • Peer Discovery----搜索资源
  • Peer Resolver----一般查询服务
  • Peer Information----监控
  • Pipe Binding----可寻址的消息传递
  • Rendezvous----消息传播
  • PeerEndpoint----路由
四、JXTA的应用与发展

一)JXTA的应用

1、即时通信和文件共享(myJXTA)

myJXTA是在J2SE平台上的一个JXTA演示程序,主要为展示JXTA项目和P2P的一些概念,它提供了一些功能,诸如安全的一对一的交谈、组内的交谈、组内文档的共享、搜索和下载等。myJXTA使用JXTA平台的核心服务,完成发现组、加入组和创建组的功能;还有在两个Peer 间创建连接,完成一对一的交谈;或者在组内建立连接,完成组内的交谈以及组内文件的搜索和下载。该程序的主要目的是未了展示基于JXTA协议的P2P的工作方式。

2、网络游戏(Chess)

    JXTA技术已在许多游戏应用方面得到了展示,一个互动式的国际象棋比赛的应用程序使用JXTA来传递两个棋手间的对奕过程,并将它展现给观众,国际象棋游戏和“tic-tac-toe"游戏都可以用来展示JXTA在小型设备上的应用,一个游戏者可以创建一个新的JXTAPeer组并邀请全世界其他游戏者加入他的游戏,当然也可以限制他人进入他的游戏组。

3、协同工作

JXTA技术已经展示它在协同工作应用程序中的能力。用JXTA开发出来的集成开发环境可以允许一个以上的开发者同时开发一个软件程序;另外一个协作式的JXTA应用程序允许几个人同时编辑同一个电子数据表。其他JXTA项目中开发的合作开发工具包则利用了JXTA进行会话、共享浏览和文件共享。

    由于具有通话功能,JXTA技术在合作开发中拥有这样一个优点:一个应用程序的开发不需依赖于服务器或其他中央管理系统。JXTA处理新发现的节点,并保证路线通畅,在用户和交互式应用程序间交换消息。

4、聊天程序

JXTA非常适合编写聊天程序,而且可以有多种实现方法,包括完全的集中式、代理方式到完全非集中式。而且一个非常有意思的情况是,用JXTA来实现一个集中式的聊天程序非常困难,而实现完全非集中式的聊天程序反而简单,因为JXTA平台本身已经完全解决了底层Peer之间的发现和通信问题。在现有的JXTA项目中已经有许多聊天程序的例子,包括myJXTA应用程序(原先称为InstantP2P)、JXTA shell中的Talk命令、HotWire应用程序和其他几个编程指南。

5、JXTA 社区

JXTA是一个开放源代码的项目,它是由JXTA社区http://www.jxta.org在推动发展。在这个站点上可以获取最新的JXTA文档和程序代码,而且你可以注册并加入到正在进行中的JXTA项目,参与并推动项目的进展;这些项目分类存放,为用户展示了JXTA各方面的功能;此外,站点上还有邮件列表,都是JXTA开发人员和P2P参与者就感兴趣的问题的讨论。

二)JXTA的发展

1、各种语言的实现

目前JXTA只有Java的实现版本,以至于大家谈到JXTA都认为它是用Java开发的一套P2P框架,而忽略了JXTA的实质只是一套独立于各种平台和语言的协议。因此在各种语言上实现JXTA成为一项非常重要的工作。只有这样,因特网上的用各种各样语言实现的应用软件就可以只需改写网络部分的代码而转换到JXTA平台上来。这不但大大地节省了工作量,而且将会吸引大量因为各种原因无法采用Java语言的软件加入到JXTA中来,从而大大促进JXTA协议的发展。现在正在进行的其他语言的实现有C,Perl,Python,Smalltalk等等,显然这还远远不够,也许我们将来需要看到用Pascal,VB,C#实现的版本。

2、各种平台的实现

跨平台,这是Java已经实现了的目标,但是并不表示JXTA就无事可做,一个真正的P2P网络不仅仅是包括PC这个大家目前已经熟悉的设备,它还应该包含各种现在以及将来能够连到因特网上的设备。头一个目标显然是PDA和手机这种移动设备,JXTA for J2ME以及PocketJxta都已经在进行中,而且已经可以使用;但是,我们还要考虑到将来的各种设备,这其中主要是各种各样的嵌人式设备。如果这些设备都运行JXTA平台,那么我们将看到一个真正的P2P世界。

3、各种应用

有好的应用,一个平台是不可能流行起来的。目前在jxta.org上登记的应用开发项目有多个,相比现实世界中的各种网络软件的数目,这个数字实在是很小。目前的JXTA应用主要集中在即时通信和文件共享上面,这似乎成了P2P的代名词。但是如果只局限于这些应用,JXTA的应用范围将会很有限。

4、Service

Service在JXTA中扮演着极其重要的角色,所有JXTA协议的实现都是以Service的形式存在着的。除了几个核心服务外,目前JXTA上有多个关于Service的项目正在开展着,从某种程度上来说,Service比Application更重要;如果没有好的Service,也就产生不了多少好的应用,在这些进行中的Service中,Search是其中关键的环节,在没有中心服务器的P2P网络中,如何有效地进行查找成为一个关键问题,与此同时,还需做到尽可能地减少占用的带宽。

作者:务实,多年从事J2EE网站及应用系统项目的开发和应用。

原文地址:http://www.zdnet.com.cn/developer/tech/story/0,3800067013,39174505-9,00.htm









posted @ 2006-03-08 17:54 hopeshared 阅读(585) | 评论 (1)编辑 收藏

Web service到底是什么;在什么情况下你应该使用Web service。

分布式应用程序和浏览器

研究一下当前的应用程序开发,你会发现一个绝对的倾向:人们开始偏爱基于浏览器的瘦客户应用程序。这当然不是因为瘦客户能够提供更好的用户界面,而是因为它能够避免花在桌面应用程序发布上的高成本。发布桌面应用程序成本很高,一半是因为应用程序安装和配置的问题,另一半是因为客户和服务器之间通信的问题。

传统的Windows富客户应用程序使用DCOM来与服务器进行通信和调用远程对象。配置好DCOM使其在一个大型的网络中正常工作将是一个极富挑战性的工作,同时也是许多IT工程师的噩梦。事实上,许多IT工程师宁愿忍受浏览器所带来的功能限制,也不愿在局域网上去运行一个DCOM。在我看来,结果就是一个发布容易,但开发难度大而且用户界面极其受限的应用程序。极端的说,就是你花了更多的资金和时间,却开发出从用户看来功能更弱的应用程序。不信?问问你的会计师对新的基于浏览器的会计软件有什么想法:绝大多数商用程序用户希望使用更加友好的Windows用户界面。

关于客户端与服务器的通信问题,一个完美的解决方法是使用HTTP协议来通信。这是因为任何运行Web浏览器的机器都在使用HTTP协议。同时,当前许多防火墙也配置为只允许HTTP连接。

许多商用程序还面临另一个问题,那就是与其他程序的互操作性。如果所有的应用程序都是使用COM或.NET语言写的,并且都运行在Windows平台上,那就天下太平了。然而,事实上大多数商业数据仍然在大型主机上以非关系文件(VSAM)的形式存放,并由COBOL语言编写的大型机程序访问。而且,目前还有很多商用程序继续在使用C++、Java、Visual Basic和其他各种各样的语言编写。现在,除了最简单的程序之外,所有的应用程序都需要与运行在其他异构平台上的应用程序集成并进行数据交换。这样的任务通常都是由特殊的方法,如文件传输和分析,消息队列,还有仅适用于某些情况的的API,如IBM的"高级程序到程序交流(APPC)"等来完成的。在以前,没有一个应用程序通信标准,是独立于平台、组建模型和编程语言的。只有通过Web Service,客户端和服务器才能够自由的用HTTP进行通信,不论两个程序的平台和编程语言是什么。

什么是Web Service

对这个问题,我们至少有两种答案。从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Web service 的应用程序叫做客户。例如,你想创建一个Web service ,它的作用是返回当前的天气情况。那么你可已建立一个ASP页面,它接受邮政编码作为查询字符串,然后返回一个由逗号隔开的字符串,包含了当前的气温和天气。要调用这个ASP页面,客户端需要发送下面的这个HTTP GET请求:

http://host.company.com/weather.asp?zipcode=20171

返回的数据就应该是这样:

21,晴

这个ASP页面就应该可以算作是Web service 了。因为它基于HTTP GET请求,暴露出了一个可以通过Web调用的API。当然,Web service 还有更多的东西。

下面是对Web service 更精确的解释: Web services是建立可互操作的分布式应用程序的新平台。作为一个Windows程序员,你可能已经用COM或DCOM建立过基于组件的分布式应用程序。COM是一个非常好的组件技术,但是我们也很容易举出COM并不能满足要求的情况。

Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。

新平台

Web service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。在传统的分布式系统中,基于界面(interface)的平台提供了一些方法来描述界面、方法和参数(译注:如COM和COBAR中的IDL语言)。同样的,Web service平台也必须提供一种标准来描述Web service,让客户可以得到足够的信息来调用这个Web service。最后,我们还必须有一种方法来对这个Web service进行远程调用。这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。下面几个小节就简要介绍了组成Web service平台的这三个技术。

XML和XSD

可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。

XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,还是64位?这些细节对实现互操作性都是很重要的。W3C制定的XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web service平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合Web service标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。在第二章中,我们将深入XSD,学习怎样转换自定义的数据类型(例如类)到XSD的类型。

SOAP

Web service建好以后,你或者其他人就会去调用它。简单对象访问协议(SOAP)提供了标准的RPC方法来调用Web service。实际上,SOAP在这里有点用词不当:它意味着下面的Web service是以对象的方式表示的,但事实并不一定如此:你完全可以把你的Web service写成一系列的C函数,并仍然使用SOAP进行调用。SOAP规范定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAP。SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。第三章我们会讨论SOAP,并结识SOAP消息的各种元素。

WSDL

你会怎样向别人介绍你的Web service有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的Web service的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Web service的时候,他们的工具(如Visual Studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的Web

service。解决方法是:用机器能阅读的方式提供一个正式的描述文档。Web service描述语言(WSDL)就是这样一个基于XML的语言,用于描述Web service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应Web service的代码。

原文地址:http://lsz.c1c5.com/lsz/article.asp?id=55
posted @ 2006-03-08 17:47 hopeshared 阅读(352) | 评论 (0)编辑 收藏





2000上怎么做DNS

原文地址:http://ez.sm.fj.cninfo.net/ntclub/server/dns/dns-1.htm

安装 DNS 服务器

打开 Windows 组件向导。
在“组件”中,单击“网络服务”,然后单击“详细信息”。
在“网络服务的子组件”中,选择“域名系统 (DNS)”复选框,单击“确定”,然后并单击“下一步”。
在“文件复制来源”中,键入 Windows 2000 分配文件的完整路径,然后单击“确定”。
所需的文件被复制到硬盘上,重新启动系统后就可以使用服务器软件了。

注意

要从桌面上打开 Windows 组件向导,请单击“开始”,指向“设置”,并单击“控制面板”。
控制面板打开时,双击“添加/删除程序”,然后单击“添加/删除 Windows 组件”。

某些 Windows 组件要求在使用之前进行配置。如果安装了一个或多个这样的组件但没有配置它们,当您单击“添加/删除 Windows 组件”时会显示一个需要配置的组件列表。要启动“Windows 组件向导”,请单击“组件”。
强烈推荐您手动配置计算机以使用静态 IP 地址。
安装 DNS 服务器之后,您可以确定如何管理此服务器及其区域。尽管可以使用文本编辑器对服务器引导和区域文件进行更改,但并不推荐使用这种方法。DNS 控制台简化了这些文件的维护工作,而且应在可能的时候使用。一旦使用基于控制台的文件管理,则不推荐手动编辑这些文件。
在使用 Active Directory 集成的区域的地方,不能使用基于文件的区域管理。
将 DNS 服务器引导和区域数据写入文本文件时,Windows 2000 DNS 服务器使用被传统 BIND 4 服务器识别的 Berkeley Internet Name Domain (BIND) 文件格式,而不是最新的 BIND 8 格式。

如何设置DNS服务器

原文地址:http://qdbbs.qlsh.net/printpage.asp?BoardID=21&ID=10122

目标
  (1)假设本机拥有一个 "192.168.0.51"的IP地址,现在想要让它与"ylwl.cn"、"www. ylwl.cn"和"ftp. ylwl.cn"三个域名对应起来,则需按后面的步骤建立相关的DNS映射记录。
  (2)假设本机还拥有如"192.168.0.90"和"192.168.0.91"的IP地址,也想要让它们分别和"www.enanshan.com"及"nanshan.363.net"两个域名对应起来。
    
    目标(1)的实现
  (1)首先确保本机已安装了DNS服务,则便可以选"开始→程序→管理工具→DNS"打开DNS控制台管理器。
  (2)在DNS管理器中,在"SERVER"(服务器名)上单击右键,选"新建区域"以进入新建区域向导中。


  (3)当向导提示到要让选择"区域类型"时,此处应选"标准主要区域";而在"正向或反向搜索区域中"应选"正向搜索区域"。各步选择之后都是单击"下一步"继续。
  (4)随后系统会询问"区域名",则在"名称"后的文字框中输入"ylwl.cn";接着向导进入到"区域文件"提示窗口中,默认的,系统会自动选中"创建新文件,文件名为"一项,并在其后的文字框中自动填有"ylwl.cn.dns"("ylwl.cn"部分即为上步所输入的"区域名")的名字。

  (5)再根据系统提示选择其默认各项之后即可完成此区域的建立。此时在DNS管理器左边的"树"栏中的"SERVER→正向搜索区域"里即可以看到"ylwl.cn"区域。
  (6)接着在"ylwl.cn"区域上单击右键,选"新建主机",在其后的对话框中的"名称"处输入主机名"www","IP地址"处输入IP地址"192.168.0.51",再单击"添加主机"按钮,即成功地创建了主机地址记录"www.ylwl.cn",在"新建主机"窗口再选"完成"便可回到DNS管理器中。

  (7)再在"ylwl.cn"区域上单击右键,选"新建别名",在其后的对话框中的"别名"处输入"ftp","目标主机的完全合格的名称"中输入"www.ylwl.cn"(或用"浏览"逐步选择),最后"确定"即可为"www.ylwl.cn"建立一个名为"ftp. ylwl.cn"的别名记录。
  (8)再用和上步相同的方法相同的方法来为"www.ylwl.cn"建立一个名为"ylwl.cn"的别名记录,所不同的是,它建立时"名称"一栏不用填,保持为空即可!
  (9)以上全部记录建立好之后,就可以在DNS管理器中看到相关的DNS映射记录表。如果在"查看"菜单中勾选中"高级"一项,则表中"类型"一项就会由中文名(比如"主机")改显示为其英文名称(比如"A")。

  (10)剩下的工作就是检验工作的成效了!在Windows 2000的命令行提示符下(在"开始→运行"中输入"cmd"进入)用"ping 域名"的命令行去测试,如果所建立的域名"www.ylwl.cn"、"ylwl.cn"和"ylwl.cn"均能显示出连接的四行如"Reply from 192.168.0.51: bytes=32 time<10ms TTL=128"的响应,则恭喜你成功了!
    
     目标(2)的实现
  (1)先把"enanshan.com"看作"区域"建立好之后,再在其下建立"www"的"主机",将其IP地址对应到"192.168.0.90"即可。
  (2)再把"363.net"看作"区域"建立好之后,再在其下建立"nanshan"的"主机",将其IP地址对应到"192.168.0.91"即可。
  (3)具体的*作和验证方法请参照此前的相关内容施行。

posted @ 2006-03-06 10:23 hopeshared 阅读(572) | 评论 (0)编辑 收藏

原文:http://ldapman.org/articles/intro_to_ldap.html

原文作者:Michael Donnelly

翻译:Brimmer

如果你在计算机行业工作,那么对LDAP可能早有耳闻了。想深入地了解LDAP吗?那么可以好好地读一下这篇文章。这篇介绍性的文章是一系列介绍如何在企业中设计、实现和集成LDAP环境的文章的头一篇。主要是先让你熟悉一下LDAP的基本概念,那些比较困难的细节问题将放到以后讨论。在这篇文章中我们将要介绍:

什么是LDAP?

什么时候该用LDAP存储数据?

LDAP目录树的结构

单独的LDAP记录

作为例子的一个单独的数据项

LDAP复制

安全和访问控制

现在LDAP技术不仅发展得很快而且也是激动人心的。在企业范围内实现LDAP可以让运行在几乎所有计算机平台上的所有的应用程序从LDAP目录中获取信息。LDAP目录中可以存储各种类型的数据:电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表,等等。通过把LDAP目录作为系统集成中的一个重要环节,可以简化员工在企业内部查询信息的步骤,甚至连主要的数据源都可以放在任何地方。如果OracleSybaseInformixMicrosoft SQL数据库中已经存储了类似的数据,那么LDAP和这些数据库到底有什么不同呢?是什么让它更具优势?请继续读下去吧!

什么是LDAP?

LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。

怎么使用LDAP这个术语呢?

在日常交谈中,你可能会听到有些人这么说:“我们要把那些东西存在LDAP中吗?”,或者“从LDAP数据库中取出那些数据!”,又或者“我们怎么把LDAP和关系型数据库集成在一起?”。严格地说,LDAP根本不是数据库而是用来访问存储在信息目录(也就是LDAP目录)中的信息的协议。更为确切和正式的说法应该是象这样的:“通过使用LDAP,可以在信息目录的正确位置读取(或存储)数据”。但是,也没有必要吹毛求疵,尽管表达得不够准确,我们也都知道对方在说什么。

LDAP目录是数据库吗?

就象SybaseOracleInformixMicrosoft的数据库管理系统(DBMS)是用于处理查询和更新关系型数据库那样,LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一种类型的数据库,但是不是关系型数据库。不象被设计成每分钟需要处理成百上千条数据变化的数据库,例如:在电子商务中经常用到的在线交易处理(OLTP)系统,LDAP主要是优化数据读取的性能。

LDAP目录的优势

现在该说说LDAP目录到底有些什么优势了。现在LDAP的流行是很多因数共同作用的结果。我在这里说的不过是一些基本的原因,请你注意一下这不过是一小部分原因。

可能LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。

LDAP协议是跨平台的和标准的协议,因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。实际上,LDAP得到了业界的广泛认可,因为它是Internet的标准。产商都很愿意在产品中加入对LDAP的支持,因为他们根本不用考虑另一端(客户端或服务端)是怎么样的。LDAP服务器可以是任何一个开发源代码或商用的LDAP目录服务器(或者还可能是具有LDAP界面的关系型数据库),因为可以用同样的协议、客户端连接软件包和查询命令与LDAP服务器进行交互。与LDAP不同的是,如果软件产商想在软件产品中集成对DBMS的支持,那么通常都要对每一个数据库服务器单独定制。

不象很多商用的关系型数据库,你不必为LDAP的每一个客户端连接或许可协议付费。

大多数的LDAP服务器安装起来很简单,也容易维护和优化。

LDAP服务器可以用“推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。如果要在DBMS中使用相同的复制功能,数据库产商就会要你支付额外的费用,而且也很难管理。

LDAP允许你根据需要使用ACI(一般都称为ACL或者访问控制列表)控制对数据读和写的权限。例如,设备管理员可以有权改变员工的工作地点和办公室号码,但是不允许改变记录中其它的域。ACI可以根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由LDAP目录服务器完成的,所以不用担心在客户端的应用程序上是否要进行安全检查。

LDAP对于这样存储这样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新。例如,这些信息存储在LDAP目录中是十分有效的:

l        公司员工的电话号码簿和组织结构图

l        客户的联系信息

l        计算机管理需要的信息,包括NIS映射、email假名,等等

l        软件包的配置信息

l        公用证书和安全密匙

什么时候该用LDAP存储数据?

大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此,当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化,大多数的LDAP目录服务器并不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储电话号码是一个很好的选择,但是它不能作为电子商务站点的数据库服务器。

如果下面每一个问题的答案都是“是”,那么把数据存在LDAP中就是一个好主意。

l        需要在任何平台上都能读取数据吗?

l        每一个单独的记录项是不是每一天都只有很少的改变?

l        可以把数据存在平面数据库(flat database)而不是关系型数据库中吗?换句话来说,也就是不管什么范式不范式的,把所有东西都存在一个记录中(差不多只要满足第一范式)。

最后一个问题可能会唬住一些人,其实用平面数据库去存储一些关系型的数据也是很一般的。例如,一条公司员工的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。一个简单的判断方法:如果可以把保数据存在一张张的卡片里,就可以很容易地把它存在LDAP目录里。

LDAP目录树的结构

LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉,也就很容易掌握LDAP目录树这个概念了。就象DNS的主机名那样,LDAP目录记录的标识名(Distinguished Name,简称DN)是用来读取单个记录,以及回溯到树的顶部。后面会做详细地介绍。

为什么要用层次结构来组织数据呢?原因是多方面的。下面是可能遇到的一些情况:

l        如果你想把所有的美国客户的联系信息都“推”到位于到西雅图办公室(负责营销)的LDAP服务器上,但是你不想把公司的资产管理信息“推”到那里。

l        你可能想根据目录树的结构给予不同的员工组不同的权限。在下面的例子里,资产管理组对“asset-mgmt”部分有完全的访问权限,但是不能访问其它地方。

l        LDAP存储和复制功能结合起来,可以定制目录树的结构以降低对WAN带宽的要求。位于西雅图的营销办公室需要每分钟更新的美国销售状况的信息,但是欧洲的销售情况就只要每小时更新一次就行了。

刨根问底:基准DN

LDAP目录树的最顶部就是根,也就是所谓的“基准DN”。基准DN通常使用下面列出的三种格式之一。假定我在名为FooBar的电子商务公司工作,这家公司在Internet上的名字是foobar.com

o="FooBar, Inc.", c=US

(以X.500格式表示的基准DN

在这个例子中,o=FooBar, Inc. 表示组织名,在这里就是公司名的同义词。c=US 表示公司的总部在美国。以前,一般都用这种方式来表示基准DN。但是事物总是在不断变化的,现在所有的公司都已经(或计划)上Internet上。随着Internet的全球化,在基准DN中使用国家代码很容易让人产生混淆。现在,X.500格式发展成下面列出的两种格式。

o=foobar.com

(用公司的Internet地址表示的基准DN

这种格式很直观,用公司的域名作为基准DN。这也是现在最常用的格式。

dc=foobar, dc=com

(用DNS域名的不同部分组成的基准DN

就象上面那一种格式,这种格式也是以DNS域名为基础的,但是上面那种格式不改变域名(也就更易读),而这种格式把域名:foobar.com分成两部分 dc=foobar, dc=com在理论上,这种格式可能会更灵活一点,但是对于最终用户来说也更难记忆一点。考虑一下foobar.com这个例子。当foobar.comgizmo.com合并之后,可以简单的把“dc=com”当作基准DN。把新的记录放到已经存在的dc=gizmo, dc=com目录下,这样就简化了很多工作(当然,如果foobar.comwocket.edu合并,这个方法就不能用了)。如果LDAP服务器是新安装的,我建议你使用这种格式。再请注意一下,如果你打算使用活动目录(Actrive Directory),Microsoft已经限制你必须使用这种格式。

更上一层楼:在目录树中怎么组织数据

UNIX文件系统中,最顶层是根目录(root)。在根目录的下面有很多的文件和目录。象上面介绍的那样,LDAP目录也是用同样的方法组织起来的。

在根目录下,要把数据从逻辑上区分开。因为历史上(X.500)的原因,大多数LDAP目录用OU从逻辑上把数据分开来。OU表示“Organization Unit”,在X.500协议中是用来表示公司内部的机构:销售部、财务部,等等。现在LDAP还保留ou=这样的命名规则,但是扩展了分类的范围,可以分类为:ou=people, ou=groups, ou=devices,等等。更低一级的OU有时用来做更细的归类。例如:LDAP目录树(不包括单独的记录)可能会是这样的:

    dc=foobar, dc=com

        ou=customers

            ou=asia

            ou=europe

            ou=usa

        ou=employees

        ou=rooms

        ou=groups

        ou=assets-mgmt

        ou=nisgroups

        ou=recipes

单独的LDAP记录

DNLDAP记录项的名字

LDAP目录中的所有记录项都有一个唯一的“Distinguished Name”,也就是DN。每一个LDAP记录项的DN是由两个部分组成的:相对DNRDN)和记录在LDAP目录中的位置。

RDNDN中与目录树的结构无关的部分。在LDAP目录中存储的记录项都要有一个名字,这个名字通常存在cnCommon Name)这个属性里。因为几乎所有的东西都有一个名字,在LDAP中存储的对象都用它们的cn值作为RDN的基础。如果我把最喜欢的吃燕麦粥食谱存为一个记录,我就会用cn=Oatmeal Deluxe作为记录项的RDN

l         我的LDAP目录的基准DNdc=foobar,dc=com

l         我把自己的食谱作为LDAP的记录项存在ou=recipes

l        我的LDAP记录项的RDN设为cn=Oatmeal Deluxe

上面这些构成了燕麦粥食谱的LDAP记录的完整DN。记住,DN的读法和DNS主机名类似。下面就是完整的DN

cn=Oatmeal Deluxe,ou=recipes,dc=foobar,dc=com

举一个实际的例子来说明DN

现在为公司的员工设置一个DN。可以用基于cnuidUser ID),作为典型的用户帐号。例如,FooBar的员工Fran Smith(登录名:fsmith)的DN可以为下面两种格式:

uid=fsmith,ou=employees,dc=foobar,dc=com

(基于登录名)

LDAP(以及X.500)用uid表示“User ID”,不要把它和UNIXuid号混淆了。大多数公司都会给每一个员工唯一的登录名,因此用这个办法可以很好地保存员工的信息。你不用担心以后还会有一个叫Fran Smith的加入公司,如果Fran改变了她的名字(结婚?离婚?或宗教原因?),也用不着改变LDAP记录项的DN

cn=Fran Smith,ou=employees,dc=foobar,dc=com

(基于姓名)

可以看到这种格式使用了Common NameCN)。可以把Common Name当成一个人的全名。这种格式有一个很明显的缺点就是:如果名字改变了,LDAP的记录就要从一个DN转移到另一个DN。但是,我们应该尽可能地避免改变一个记录项的DN

定制目录的对象类型

你可以用LDAP存储各种类型的数据对象,只要这些对象可以用属性来表示,下面这些是可以在LDAP中存储的一些信息:

l        员工信息:员工的姓名、登录名、口令、员工号、他的经理的登录名,邮件服务器,等等。

l        物品跟踪信息:计算机名、IP地址、标签、型号、所在位置,等等。

l        客户联系列表:客户的公司名、主要联系人的电话、传真和电子邮件,等等。

l        会议厅信息:会议厅的名字、位置、可以坐多少人、电话号码、是否有投影机。

l        食谱信息:菜的名字、配料、烹调方法以及准备方法。

因为LDAP目录可以定制成存储任何文本或二进制数据,到底存什么要由你自己决定。LDAP目录用对象类型(object classes)的概念来定义运行哪一类的对象使用什么属性。在几乎所有的LDAP服务器中,你都要根据自己的需要扩展基本的LDAP目录的功能,创建新的对象类型或者扩展现存的对象类型。

LDAP目录以一系列“属性对”的形式来存储记录项,每一个记录项包括属性类型和属性值(这与关系型数据库用行和列来存取数据有根本的不同)。下面是我存在LDAP目录中的一部分食谱记录:

  dn: cn=Oatmeal Deluxe, ou=recipes, dc=foobar, dc=com

  cn: Instant Oatmeal Deluxe

  recipeCuisine: breakfast

  recipeIngredient: 1 packet instant oatmeal

  recipeIngredient: 1 cup water

  recipeIngredient: 1 pinch salt

  recipeIngredient: 1 tsp brown sugar

  recipeIngredient: 1/4 apple, any type

请注意上面每一种配料都作为属性recipeIngredient值。LDAP目录被设计成象上面那样为一个属性保存多个值的,而不是在每一个属性的后面用逗号把一系列值分开。

因为用这样的方式存储数据,所以数据库就有很大的灵活性,不必为加入一些新的数据就重新创建表和索引。更重要的是,LDAP目录不必花费内存或硬盘空间处理“空”域,也就是说,实际上不使用可选择的域也不会花费你任何资源。

作为例子的一个单独的数据项

让我们看看下面这个例子。我们用Foobar, Inc.的员工Fran SmithLDAP记录。这个记录项的格式是LDIF,用来导入和导出LDAP目录的记录项。

  dn: uid=fsmith, ou=employees, dc=foobar, dc=com

  objectclass: person

  objectclass: organizationalPerson

  objectclass: inetOrgPerson

  objectclass: foobarPerson

  uid: fsmith

  givenname: Fran

  sn: Smith

  cn: Fran Smith

  cn: Frances Smith

  telephonenumber: 510-555-1234

  roomnumber: 122G

  o: Foobar, Inc.

  mailRoutingAddress: fsmith@foobar.com

  mailhost: mail.foobar.com

  userpassword: {crypt}3x1231v76T89N

  uidnumber: 1234

  gidnumber: 1200

  homedirectory: /home/fsmith

  loginshell: /usr/local/bin/bash

属性的值在保存的时候是保留大小写的,但是在默认情况下搜索的时候是不区分大小写的。某些特殊的属性(例如,password)在搜索的时候需要区分大小写。

让我们一点一点地分析上面的记录项。

dn: uid=fsmith, ou=employees, dc=foobar, dc=com

这是FranLDAP记录项的完整DN,包括在目录树中的完整路径。LDAP(和X.500)使用uidUser ID),不要把它和UNIXuid号混淆了。

  objectclass: person

  objectclass: organizationalPerson

  objectclass: inetOrgPerson

  objectclass: foobarPerson

可以为任何一个对象根据需要分配多个对象类型。person对象类型要求cncommon name)和snsurname)这两个域不能为空。persion对象类型允许有其它的可选域,包括givennametelephonenumber,等等。organizational Personperson加入更多的可选域,inetOrgPerson又加入更多的可选域(包括电子邮件信息)。最后,foobarPerson是为Foobar定制的对象类型,加入了很多定制的属性。

  uid: fsmith

  givenname: Fran

  sn: Smith

  cn: Fran Smith

  cn: Frances Smith

  telephonenumber: 510-555-1234

  roomnumber: 122G

  o: Foobar, Inc.

以前说过了,uid表示User ID。当看到uid的时候,就在脑袋里想一想“login”。

请注意CN有多个值。就象上面介绍的,LDAP允许某些属性有多个值。为什么允许有多个值呢?假定你在用公司的LDAP服务器查找Fran的电话号码。你可能只知道她的名字叫Fran,但是对人力资源处的人来说她的正式名字叫做Frances。因为保存了她的两个名字,所以用任何一个名字检索都可以找到Fran的电话号码、电子邮件和办公房间号,等等。

  mailRoutingAddress: fsmith@foobar.com

  mailhost: mail.foobar.com

就象现在大多数的公司都上网了,FoobarSendmail发送邮件和处理外部邮件路由信息。Foobar把所有用户的邮件信息都存在LDAP中。最新版本的Sendmail支持这项功能。

  Userpassword: {crypt}3x1231v76T89N

  uidnumber: 1234

  gidnumber: 1200

  gecos: Frances Smith

  homedirectory: /home/fsmith

  loginshell: /usr/local/bin/bash

注意,Foobar的系统管理员把所有用户的口令映射信息也都存在LDAP中。FoobarPerson类型的对象具有这种能力。再注意一下,用户口令是用UNIX的口令加密格式存储的。UNIXuid在这里为uidnumber提醒你一下,关于如何在LDAP中保存NIS信息,有完整的一份RFC。在以后的文章中我会谈一谈NIS的集成。

LDAP复制

LDAP服务器可以使用基于“推”或者“拉”的技术,用简单或基于安全证书的安全验证,复制一部分或者所有的数据。

例如,Foobar有一个“公用的”LDAP服务器,地址为ldap.foobar.com,端口为389Netscape Communicator的电子邮件查询功能、UNIX的“ph”命令要用到这个服务器,用户也可以在任何地方查询这个服务器上的员工和客户联系信息。公司的主LDAP服务器运行在相同的计算机上,不过端口号是1389

你可能即不想让员工查询资产管理或食谱的信息,又不想让信息技术人员看到整个公司的LDAP目录。为了解决这个问题,Foobar有选择地把子目录树从主LDAP服务器复制到“公用”LDAP服务器上,不复制需要隐藏的信息。为了保持数据始终是最新的,主目录服务器被设置成即时“推”同步。这些种方法主要是为了方便,而不是安全,因为如果有权限的用户想查询所有的数据,可以用另一个LDAP端口。

假定Foobar通过从奥克兰到欧洲的低带宽数据的连接用LDAP管理客户联系信息。可以建立从ldap.foobar.com:1389munich-ldap.foobar.com:389的数据复制,象下面这样:

  periodic pull: ou=asia,ou=customers,o=sendmail.com

  periodic pull: ou=us,ou=customers,o=sendmail.com

  immediate push: ou=europe,ou=customers,o=sendmail.com

“拉”连接每15分钟同步一次,在上面假定的情况下足够了。“推”连接保证任何欧洲的联系信息发生了变化就立即被“推”到Munich

用上面的复制模式,用户为了访问数据需要连接到哪一台服务器呢?在Munich的用户可以简单地连接到本地服务器。如果他们改变了数据,本地的LDAP服务器就会把这些变化传到主LDAP服务器。然后,主LDAP服务器把这些变化“推”回本地的“公用”LDAP服务器保持数据的同步。这对本地的用户有很大的好处,因为所有的查询(大多数是读)都在本地的服务器上进行,速度非常快。当需要改变信息的时候,最终用户不需要重新配置客户端的软件,因为LDAP目录服务器为他们完成了所有的数据交换工作。

安全和访问控制

LDAP提供很复杂的不同层次的访问控制或者ACI。因这些访问可以在服务器端控制,这比用客户端的软件保证数据的安全可安全多了。

LDAPACI,可以完成:

l        给予用户改变他们自己的电话号码和家庭地址的权限,但是限制他们对其它数据(如,职务名称,经理的登录名,等等)只有“只读”权限。

l        给予“HR-admins”组中的所有人权限以改变下面这些用户的信息:经理、工作名称、员工号、部门名称和部门号。但是对其它域没有写权限。

l        禁止任何人查询LDAP服务器上的用户口令,但是可以允许用户改变他或她自己的口令。

l        给予经理访问他们上级的家庭电话的只读权限,但是禁止其他人有这个权限。

l        给予“host-admins”组中的任何人创建、删除和编辑所有保存在LDAP服务器中的与计算机主机有关的信息

l        通过Web,允许“foobar-sales”组中的成员有选择地给予或禁止他们自己读取一部分客户联系数据的读权限。这将允许他们把客户联系信息下载到本地的笔记本电脑或个人数字助理(PDA)上。(如果销售人员的软件都支持LDAP,这将非常有用)

l        通过Web,允许组的所有者删除或添加他们拥有的组的成员。例如:可以允许销售经理给予或禁止销售人员改变Web页的权限。也可以允许邮件假名(mail aliase)的所有者不经过IT技术人员就直接从邮件假名中删除或添加用户。“公用”的邮件列表应该允许用户从邮件假名中添加或删除自己(但是只能是自己)。也可以对IP地址或主机名加以限制。例如,某些域只允许用户IP地址以192.168.200.*开头的有读的权限,或者用户反向查找DNS得到的主机名必须为*.foobar.com

这不过是让你了解一下可以对LDAP目录进行怎样的访问控制,实际上真正实现起来需要做的工作比这多得多。在以后的文章中我会详细地讨论访问控制。


原文地址:http://www.linuxaid.com.cn/engineer/brimmer/html/LDAP.htm

posted @ 2006-02-20 10:39 hopeshared 阅读(376) | 评论 (0)编辑 收藏

仅列出标题
共30页: First 上一页 19 20 21 22 23 24 25 26 27 下一页 Last