中间件(Middleware)
2011-04-08 10:01:05 阿炯

本站赞助商链接,请多关照。 定义:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之 间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或 OS 环境。

Middleware is computer software that connects software components and applications. The software consists of a set of enabling services that allow multiple processes running on one or more machines to interact across a network. This technology evolved to provide for interoperability in support of the move to coherent distributed architectures, which are used most often to support and simplify complex, distributed applications. It includes web servers, transaction monitors, and messaging-and-queueing software.

中间件,又称中介软件,是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务、面向服务的体系结构 等中应用比较广泛。如数据库、Apache的Tomcat,IBM公司的WebSphere,BEA公司的WebLogic应用服务器以及Kingdee 公司的Apusic等都属于中间件。

严格来讲,中间件技术已经不局限于应用服务器、数据库服务器。围绕中间件,Apache组织、 IBM、Oracle(BEA)、微软各自发展出了较为完整的软件产品体系。(Microsoft Servers是微软公司的服务器产品介绍).中间件技术建立在对应用软件部分常用功能的抽象上,将常用且重要的过程调用、分布式组件、消息队列、事务、 安全、连结器、商业流程、网络并发、HTTP服务器、Web Service等功能集于一身或者分别在不同品牌的不同产品中分别完成。一般认为在商业中间件及信息化市场主要存在微软阵营、Java阵营、开源阵营。阵营的区分主要体现在对下层操作系统的选择以及对上层组件标准的制订。目前主流商业操作系统主要来自Unix,Linux、Apple系统以及微软视窗系 列。微软阵营的主要技术提供商来自微软和机器商业伙伴,Java阵营则来自IBM、Sun、Oracle、BEA(已被Oracle收购)、金蝶 (Kingdee Apusic)及其合作伙伴,开源阵营则主要来自诸如Apache,SourceForge等组织的共享代码。

中间件技术的蓬勃发展离不开标准化,标准的建立有助于融合不同阵营的系统.越来越多的标准被三大阵营共同接受并推广发展。中间件技术的发展方向朝着更广阔范围的标准化,功能的层次化,产品的系列化方面发展。

基于中间件技术构建的商业信息软件广泛的应用于能源、电信、金融、银行、医疗、教育等行业软件,降低了面向行业的软件的开发成本。

中间件是一种计算机软件连接了软件部件或者应用程序。 这种软件有一组服务构成,这些服务包括允许多进程运行在一个或者多个机器上以达到在网络中互相交互的目的。

中间件特点:
满足大量应用的需要
运行于多种硬件和OS平台
支持分布式计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互功能
支持标准的协议
支持标准的接口

中间件可以应用于以下情形,如连接公司 LAN和早期系统、交换两个邮件系统间的信息、支持 web 客户机与数据库服务器交换信息等。通用中间件类型包括:
·企业服务总线(ESB : Enterprise Service Bus):ESB 是一种开放的、基于标准的分布式同步或异步信息传递中间件。通过 XML、Web 服务接口以及标准化基于规则的路由选择文档等支持,ESB 为企业应用程序提供安全互用性。

·事务处理(TP:Transaction Processing)监控器:为发生在对象间的事务处理提供监控功能,以确保操作成功实现。

·分布式计算环境(DCE:Distributed Computing Environment):指创建运行在不同平台上的分布式应用程序所需的一组技术服务。

·远程过程调用(RPC:Remote Procedure Call):指客户机向服务器发送关于运行某程序的请求时所需的标准。

·对象请求代理(ORB:Object Request Broker):为用户提供与其他分布式网络环境中对象通信的接口。

·数据库访问中间件(Database Access Middleware):支持用户访问各种操作系统或应用程序中的数据库。SQL 是该类中间件的其中一种。

·信息传递(Message Passing):电子邮件系统是该类中间件的其中一种。

·基于 XML 的中间件(XML-Based Middleware):XML 允许开发人员为实现在 Internet 中交换结构化信息而创建文档。

最早具有中间件技术思想及功能的软件是IBM的CICS,但由于CICS不是分布式环境的产物,因此人们一般把Tuxedo作为第一个严格意义上的中间 件产品。Tuxedo是1984年在当时属于AT&&T的贝尔实验室开发完成的,但由于分布式处理当时并没有在商业应用上获得像今天一样 的成功,Tuxedo在很长一段时期里只是实验室产品,后来被Novell收购,在经过Novell并不成功的商业推广之后,1995年被现在的BEA公 司收购。尽管中间件的概念很早就已经产生,但中间件技术的广泛运用却是在最近10年之中。BEA公司1995年成立后收购Tuxedo才成为一个真正的中 间件厂商,IBM的中间件MQSeries也是90年代的产品,其它许多中间件产品也都是最近几年才成熟起来。国内在中间件领域的起步阶段正是整个世界范 围内中间件的初创时期。东方通科技早在1992年就开始中间件的研究与开发,1993年推出第一个产品TongLINK/Q。而中科院软件所、国防科技大 学等研究机构也对中间件技术进行了同步研究。可以说,在中间件领域,国内的起步时间并不比国外晚多少。

中间件应具有如下的一些特点:
满足大量应用的需要运行于多种硬件和OS平台支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互支持标准的协议支持标准的接口。

由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的主要部分。对于应用软件开发,中间件远比操作系统和网络服务更 为重要,中间件提供的程序接口定义了一个相对稳定的高层应用环境,不管底层的计算机硬件和系统软件怎样更新换代,只要将中间件升级更新,并保持中间件对外 的接口定义不变,应用软件几乎不需任何修改,从而保护了企业在应用软件开发和维护中的重大投资

主要中间件的分类
中间件 所包括的范围十分广泛,针对不同的应用需求涌现出多种各具特色的中间件产品。但至今中间件还没有一个比较精确的定义,因此,在不同的角度或不同的层次上, 对中间件的分类也会有所不同。由于中间件需要屏蔽分布环境中异构的操作系统和网络协议,它必须能够提供分布环境下的通讯服务,我们将这种通讯服务称之为平 台。基于目的和实现机制的不同,我们将平台分为以下主要几类:

远程过程调用(Remote Procedure Call)面向消息的中间件(Message-Oriented Middleware)对象请求代理(Object Request Brokers)

它们可向上提供不同形式的通讯服务,包括同步、排队、订阅发布、广播等等,在这些基本的通讯平台之上,可构筑各种框架,为应用程序提供不同领域内的服务,如事务处理监控器、分布数据访问、对象事务管理器OTM 等。平台为上层应用屏蔽了异构平台的差异,而其上的框架又定义了相应领域内的应用的系统结构、标准的服务组件等,用户只需告诉框架所关心的事件,然后提供 处理这些事件的代码。当事件发生时,框架则会调用用户的代码。用户代码不用调用框架,用户程序也不必关心框架结构、执行流程、对系统级API的调用等,所 有这些由框架负责完成。因此,基于中间件开发的应用具有良好的可扩充性、易管理性、高可用性和可移植性。

中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。

中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂 的应用软件。在众多关于中间件的定义中,比较普遍被接受的是IDC表述的:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技 术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。

IDC对中间件的定义表明,中间件是一类软件,而非一种软件;中间件不仅仅实现互连,还要实现应用之间的互操作;中间件是基于分布式处理的软件,最突出的特点是其网络通信功能。

最早具有中间件技术思想及功能的软件是IBM的CICS,但由于CICS不是分布式环境的产物,因此人们一般把Tuxedo作为第一个严格意义上的中间 件产品。Tuxedo是1984年在当时属于AT&&T的贝尔实验室开发完成的,但由于分布式处理当时并没有在商业应用上获得像今天一样 的成功,Tuxedo在很长一段时期里只是实验室产品,后来被Novell收购,在经过Novell并不成功的商业推广之后,1995年被现在的BEA公 司收购。尽管中间件的概念很早就已经产生,但中间件技术的广泛运用却是在最近10年之中。BEA公司1995年成立后收购 Tuxedo才成为一个真正的中间件厂商,IBM的中间件MQSeries也是90年代的产品,其它许多中间件产品也都是最近几年才成熟起来。

1998年IDC公司对于中间件有一个定义,并根据用途将其划分为6个类别。如今所保留下来的只有消息中间件和交易中间件,其他的已经被逐步融合到其他 产品中了,被包裹进去了,在市场上已经没有单独的产品形态出现了。例如,当时有一个叫屏幕数据转换的中间件,其主要是针对IBM大机终端而设计产品,用于 将IBM大机终端的字符界面转化为用户所喜欢的图形界面,类似的东西当时都称为中间件。但随着IBM大机环境越来越少,但是盛行一时的此类中间件如今已经 很少再被单独提及。

2000年前后,互联网盛行起来,随之产生了一个新的东西,就是应用服务器。实际上,交易中间件也属于是应用服务 器,为了区分,人们传统的交易中间件称为分布交易中间件,因它主要应用在分布式环境下,而将新的应用服务器,称为J2EE中间件,到目前为止,这都是市场 上非常热门的产品。

EAI概念出来之后,市场上又推出了一些新的软件产品,例如工作流、Portal等,但从分类上不知道怎么归 类,向上不能够划归应用,往下又不能归入操作系统,于是就把它归入了中间件,如此中间件的概念更加扩大了。目前,市场上对于中间件,各家的说法不一,客观 上也导致了理解上的复杂性。

如今,市场上又推出了很多新的概念,例如三层结构、构件、Web服务,其中风头最劲的当属SOA(面向服 务的架构)。实际上,他们都不是一个产品,而是一种技术的实现方法,是开发一个软件的一种方法论。我们知道,最早软件开发方法就是编程、写代码的,其缺点 在于无法复用,为此提出了构件化的软件开发方法,通过把编程中一些常用功能进行封装,并规范统一接口,供其它程序调用,例如我们开发一个新软件,可能要用到构件1、构件2、构件3,那么,我们只要对其进行本地组装,就可以得到我们想要的应用软件。在互联网得到普及重视之后,软件开发方法在构件化基础上又有 新发展,核心思想是软件并不需要囊括构件,所需要的仅仅是构件的运行结果,例如编写一个通信传输软件,就可以到网上寻找构件,并提出服务请求,得到结果后返回,而不需要下载构件并打包,这就是现在所说的SOA。想要现实SOA,就要规范构件接口,同时还要规范构件所提交的服务结果,如此,新的软件开发的思 想才能够行的通。但SOA并不是一个产品,而是一种思想方法,而实现这种方法的基础,如今看来只有中间件。

国内在中间件领域的起步阶 段正是整个世界范围内中间件的初创时期。东方通科技早在1992年就开始中间件的研究与开发,1993年推出第一个产品TongLINK/Q。而中科院软件所、国防科技大学等研究机构也对中间件技术进行了同步研究。可以说,在中间件领域,国内的起步时间并不比国外晚多少。

主要中间件的分类
中间件分类(IDC的分类):大致可分为六类:终端仿真/屏幕转换中间件、数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件

中间件所包括的范围十分广泛,针对不同的应用需求涌现出多种各具特色的中间件产品。但至今中间件还没有一个比较精确的定义,因此,在不同的角度或不同的层次上,对中间件的分类也会有所不同。由于中间件需要屏蔽分布环境中异构的操作系统和网络协议,它必须能够提供分布环境下的通讯服务,我们将这种通讯服务 称之为平台。基于目的和实现机制的不同,我们将平台分为以下主要几类:
远程过程调用中间件(Remote Procedure Call)

面向消息的中间件(MesSAge-Oriented Middleware)

对象请求代理中间件(object RequeST Brokers)

它们可向上提供不同形式的通讯服务,包括同步、排队、订阅发布、广播等等,在这些基本的通讯平台之上,可构筑各种框架,为应用程序提供不同领域内的服 务,如事务处理监控器、分布数据访问、对象事务管理器OTM等。平台为上层应用屏蔽了异构平台的差异,而其上的框架又定义了相应领域内的应用的系统结构、 标准的服务组件等,用户只需告诉框架所关心的事件,然后提供处理这些事件的代码。当事件发生时,框架则会调用用户的代码。用户代码不用调用框架,用户程序也不必关心框架结构、执行流程、对系统级API的调用等,所有这些由框架负责完成。因此,基于中间件开发的应用具有良好的可扩充性、易管理性、高可用性和 可移植性。

下面,针对几类主要的中间件分别加以简要的介绍。

1、远程过程调用
远程过程调用是一种广泛使用的分布式应 用程序处理方法,一个应用程序使用RPC来“远程”执行一个位于不同地址空间里的过程,并且从效果上看和执行本地调用相同。事实上,一个RPC应用分为两 个部分:server和Client。server提供一个或多个远程过程;client向server发出远程调用。server和client可以位 于同一台计算机,也可以位于不同的计算机,甚至运行在不同的操作系统之上,它们通过网络进行通讯。相应的stub和运行支持提供数据转换和通讯服务,从而屏蔽不同的操作系统和网络协议。在这里RPC通讯是同步的,采用线程可以进行异步调用。

在RPC模型中,client和server只要具备 了相应的RPC接口,并且具有RPC运行支持,就可以完成相应的互操作,而不必限制于特定的server。因此,RPC为client/server分布 式计算提供了有力的支持。同时,远程过程调用RPC所提供的是基于过程的服务访问,client与server进行直接连接,没有中间机构来处理请求,因 此也具有一定的局限性。比如,RPC通常需要一些网络细节以定位server;在client发出请求的同时,要求server必须是活动的等等。

2、面向消息的中间件
MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可在分布 环境下扩展进程间的通信,并支持多通讯协议、语言、应用程序、硬件和软件平台。目前流行的MOM中间件产品有IBM的MQSeries、BEA的 MessageQ等。消息传递和排队技术有以下三个

主要特点:
通讯程序可在不同的时间运行 程序不在网络上直接相互通话,而是间接地将消息放入消息队列,因为程序间没有直接的联系。所以它们不必同时运行。消息放入适当的队列时,目标程序甚至根本不需要正在运行;即使目标程序在运行,也不意味着要立即处理该消息。

对应用程序的结构没有约束 在复杂的应用场合中,通讯程序之间不仅可以是一对一的关系,还可以进行一对多和多对一方式,甚至是上述多种方式的组合。多种通讯方式的构造并没有增加应用程序的复杂性。

程序与网络复杂性相隔离
程序将消息放入消息队列或从消息队列中取出消息来进行通讯,与此关联的全部活动,比如维护消息队列、维护程序和队列之间的关系、处理网络的重新启动和在网络中移动消息等是MOM的任务,程序不直接与其它程序通话,并且它们不涉及网络通讯的复杂性。

3、对象请求代理
随着对象技术与分布式计算技术的发展,两者相互结合形成了分布对象计算,并发展为当今软件技术的主流方向。1990年底,对象管理集团OMG首次推出对 象管理结构OMA(ObjECt Management Architecture),对象请求代理(Object Request Broker)是这个模型的核心组件。它的作用在于提供一个通信框架,透明地在异构的分布计算环境中传递对象请求。CORBA规范包括了ORB的所有标准 接口。1991年推出的CORBA 1.1 定义了接口描述语言OMG IDL和支持Client/Server对象在具体的ORB上进行互操作的API。CORBA 2.0 规范描述的是不同厂商提供的ORB之间的互操作。

对象请求代理(ORB)是对象总线,它在CORBA规范中处于核心地位,定义异构环境下对象透明地发送请求和接收响应的基本机制,是建立对象之间 client/server关系的中间件。ORB使得对象可以透明地向其他对象发出请求或接受其他对象的响应,这些对象可以位于本地也可以位于远程机器。 ORB拦截请求调用,并负责找到可以实现请求的对象、传送参数、调用相应的方法、返回结果等。 client对象并不知道同server对象通讯、激活或存储server对象的机制,也不必知道server对象位于何处、它是用何种语言实现的、使用什么操作系统或其他不属于对象接口的系统成分。

值得指出的是client和server角色只是用来协调对象之间的相互作用,根据相应的场 合,ORB上的对象可以是client,也可以是server,甚至兼有两者。当对象发出一个请求时,它是处于client角色;当它在接收请求时,它就 处于server角色。大部分的对象都是既扮演client角色又扮演server角色。另外由于ORB负责对象请求的传送和server的管 理,client和server之间并不直接连接,因此,与RPC所支持的单纯的Client/Server结构相比,ORB可以支持更加复杂的结构。

4、事务处理监控
事务处理监控(Transaction processing monitors)最早出现在大型机上,为其提供支持大规模事务处理的可靠运行环境。随着分布计算技术的发展,分布应用系统对大规模的事务处理提出了需 求,比如商业活动中大量的关键事务处理。事务处理监控界于client和server之间,进行事务管理与协调、负载平衡、失败恢复等,以提高系统的整体 性能。它可以被看作是事务处理应用程序的“操作系统”。总体上来说,事务处理监控有以下功能:
进程管理,包括启动server进程、为其分配任务、监控其执行并对负载进行平衡。

事务管理,即保证在其监控下的事务处理的原子性、一致性、独立性和持久性。

通讯管理,为client和server之间提供了多种通讯机制,包括请求响应、会话、排队、订阅发布和广播等。
事务处理监控能够为大量的client提供服务,比如飞机定票系统。如果server为每一个 client都分配其所需要的资源的话,那server将不堪重负(如图2所示)。但实际上,在同一时刻并不是所有的client都需要请求服务,而一旦 某个client请求了服务,它希望得到快速的响应。事务处理监控在操作系统之上提供一组服务,对client请求进行管理并为其分配相应的服务进程,使 server在有限的系统资源下能够高效地为大规模的客户提供服务。

四、面临的一些问题
中间件能够屏蔽操作系统和网络协 议的差异,为应用程序提供多种通讯机制;并提供相应的平台以满足不同领域的需要。因此,中间件为应用程序了一个相对稳定的高层应用环境。然而,中间件服务 也并非“万能药”。中间件所应遵循的一些原则离实际还有很大距离。多数流行的中间件服务使用专有的API和专有的协议,使得应用建立于单一厂家的产品,来自不同厂家的实现很难互操作。有些中间件服务只提供一些平台的实现,从而限制了应用在异构系统之间的移植。应用开发者在这些中间件服务之上建立自己的应用 还要承担相当大的风险,随着技术的发展他们往往还需重写他们的系统。尽管中间件服务提高了分布计算的抽象化程度,但应用开发者还需面临许多艰难的设计选 择,例如,开发者还需决定分布应用在client方和 server方的功能分配。通常将表示服务放在client以方便使用显示设备,将数据服务放在server以靠近数据库,但也并非总是如此,何况其它应 用功能如何分配也是不容易确定的。

五、中间件的现状与发展趋势
伴随着互联网技术的发展和全球经济一体化时代的来临,企业应用开始从局部自治的单业务种类、部门级应用向企业级应用转变,并促进了企业应用集成、企业间动态电子商务等网络信息系统技术的发展。网络信息系统的目标 就是把分布在各处的多个局部自治的异构信息系统通过网络集成在一起,以实现信息资源的广泛共享、集约化管理和协调工作,其中需要解决的一个关键问题就是如 何将各局部自治的系统联合成为能够发挥综合效能并能够不断成长的大系统,为此,出现了对构建网络信息系统基础支撑平台的强烈需求。中间件的概念在这样的背 景下形成和发展。

为了直观地把握中间件(middleware)的基本概念,可以将网络和系统软件之上、应用系统之下的广袤疆域都视做中间件 的领地,中间件被概括地理解为起承上启下作用的应用支撑平台。应用的“多态性”、系统软件的复杂性,都需要依赖各种类型的中间件在其中运筹、调和。中间件 的核心作用是通过管理计算资源和网络通信,为各类分布式应用软件共享资源提供支撑。广义地看,中间件的总体作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。

本文从技术、产品和市场等角度对2004年我国中间件发展现状进行了回顾和分析,通过总结目前网络应用中出现的一些新趋势,提出了中间件技术下一步发展的一些挑战性问题,并总结了中间件产品和市场的一些新特点。

1. 发展现状
1.1. 技术现状
中间件技术是在克服复杂网络应用的共性问题中不断发展和壮大起来的,这些问题可以归纳为四个方面:
1、从计算环境来看:中间件面对的是一个复杂、不断变化的计算环境,要求中间件技术具有足够的灵活性和可成长性;

2、从资源管理的角度来看:操作系统和数据库管理系统管理的是有限资源,资源种类有限,资源量也有限,而中间件需要管理的资源类型(数据、服务、应用)更丰富,且资源扩展的边界是发散的;

3、从应用支撑角度来看:中间件需要提供分布应用开发、集成、部署和运行管理的整个生命周期的总体运行模型;

4、从应用的角度来看:利用中间件完成的往往是复杂、大范围的企业级应用,其关系错综复杂,流程交织。例如客户关系管理系统需要集成多个企业内部应用,而供应链管理则涉及企业之间的应用集成。

因此,由于网络应用的复杂性,特别是分布、异构和自治等特点,决定了中间件技术和产品的形态多样性。目前的中间件技术已经形成一个丰富的谱系, 并正在向上(应用框架和普适服务)和向下(融合操作系统、数据库管理系统的功能)两个方向不断延伸,并在向更宽广的应用领域拓展。

在国内,国防科技大学、北京大学、北航、中科院软件所、东南大学等大学和院所很早就投入到中间件技术的研究中,并形成了一系列的成果。在国家发改委、信息产 业部电子发展基金和国家科技部863计划和政府其他基金资助下,通过各项目研究单位和国内骨干软件企业多年的不懈努力,国内在基础中间件领域已经形成丰富 的技术积累,并在CORBA技术(国防科技大学与中创软件)、消息中间件技术(中科院软件所)、J2EE应用服务器(北京大学)、Web Service(北航)等方面在技术上基本与国外保持同步发展的水平。

以CORBA技术为例,国防科技大学与中创软件以对象管理组织发布的 CORBA及MDA标准体系为依据,并结合J2EE、XML、Web Service等标准,对ORB、CORBA 构件模型及其运行支撑技术、企业协同框架(CCA)、EAI Profile等进行了深入的研究,近3年在国内一级刊物和国际会议上发表50多篇文章,向对象管理组织(OMG)提交9项标准提案,已经从标准跟从阶段 进入参与阶段,研究论文和成果在国际上得到广泛引用,国防科技大学CORBA研究成果StarBus并获得国家科技进步二等奖。

1.2. 产品与市场现状
中间件作为基础软件的重要组成,业已与操作系统、数据库齐头并进,在世界范围内呈现出迅猛发展的势头,已经形成一个巨大的产业。目前,中间件在国内整个 软件行业中应该是发展速度最快的市场之一。中国软件产业经过20年的发展,很多部门的信息化建设都走过了关键业务应用和部门级应用的阶段,现在开始向企业 级应用转变。所谓企业级应用,最为人们所重视的就是各类信息资源之间如何关联、整合、协同、互动和按需服务,这些都是中间件能够发挥巨大作用的空间所在。 当然,中国软件产业整体上还比较弱,整个社会信息化的程度无论在广度、深度方面都还不够,这些自然也限制了国内软件产业及中间件的市场规模。随着国家信息 化建设的不断深入,社会对应用软件,特别是对网络应用起支撑作用的中间件产品的巨大需求是不争的事实,国内中间件的市场才刚刚开始启动,存在巨大的发展机 会和空间。

目前,网络应用中间件逐渐在基础中间件、应用中间件、应用框架等三个层面形成激烈的产品竞争和市场竞争格局。从三个方面的产品来分 析,国外厂商仍然占主导地位,主流厂商包括IBM,BEA,ORACLE,HP,Iona等,而一些新型的中间件公司,如 Tibco,webMethod,Vitria也开始携其应用集成中间件或业务流程管理中间件进入中国市场。而国内一些规模较大的软件公司也开始进入此领 域,形成了包括中创软件商用中间件、金蝶Apusic、东方通科技、中关村科技、中和威等在内的一批中间件专业厂商,东软、用友、信雅达等应用集成商也大 量投入中间件产品的研发,国产中间件已经形成了比较完整产品体系,例如,中创软件、中和威推出了基于CORBA标准的通信中间件产品;中创软件、金蝶软件、东方通科技等公司分别推出了遵循J2EE规范的应用服务器产品;中创软件、中科院软件所、东方通科技推出了消息中间件产品;中创软件推出了符合OMG 标准的企业应用集成套件InforEAI;此外,还有大量的公司投入到中间件开发平台和构件库的建设中。国产中间件已经广泛成功应用于我国政府、交通、金 融、证券、保险、税务、电信、移动、教育、军事等行业或领域的信息化建设,并成为大型应用系统建设不可缺少的一环。

同国外厂商比较,国内中间 件厂商的整体实力还存在很大的差距。如果仅仅从产品的功能上看,我们似乎并不比别人缺什么,但围绕中间件产品从研发到成功应用的全周期来看,我们还缺很多 东西,暂时也很难对国外产品形成真正的竞争威胁。应该说国内中间件产品的成熟度应该是没有问题的,但要市场普遍接受国产中间件产品,却还有一个相当长的过 程。以中创软件Infor系列中间件为例,我们提供的产品可在各类主流操作系统平台和主流数据库上稳定可靠地运行,并可与通行的各种开发工具紧密融合,产 品都具备丰富的系统管理功能,并已经在大量行业中获得了成功应用经验,即使如此,要真正形成具有号召力的中间件品牌,还有艰巨的路需要一步步去走。同国外 优秀中间件产品相比,我们还有大量需要借鉴和学习的地方,例如在产品的发展方向把握、持续开发能力、产品化工作、市场运作等方面,我们都还要继续加强,不 断完善。当然,国内中间件厂商及其产品也具有非常明显的优势,我们贴近国家信息化的现实需求,已经积累了丰富的领域问题和中间件应用经验,我们的中间件产 品可以在实用性和易用性方面更加贴近本地化市场需求,在技术支持和服务方面也具有相当的优势。

1.3. 现状分析
综合产业界的发展情况,我国中间件产业在2004年呈现出如下发展特点:
技术多样化:中间件已经成为网络应用系统开发、集成、部署、运行和管理必不可少的工具。由于中间件技术涉及网络应用的各个层面,涵盖从基础通讯、数据访问、业务流程集成到应用展现等众多的环节,因此,中间件技术呈现出多样化的发展特点。

产品平台化:由于传统的中间件技术门槛较高,学习周期较长,已经不能适应信息化建设对中间件的广泛应用需求。为此,中间件产品从解决网络计算中的关键问 题开始向一体化平台方向发展,以提高中间件产品的使用便利性,更全面地满足各种网络应用软件所要求的可靠性、可伸缩性和安全性的需要。

应用普及化:中间件技术已经是成熟的技术。我国大型信息化建设项目采纳中间件已经成为一种自然、例行的举措。中间件的广泛使用,也进一步促进了应用框架技术的丰富和发展,并为建立企业信息化业务基础架构奠定了基础。

2. 应用需求的新特点与中间件技术走向
由于网络世界是开放的、可成长的和多变的,分布性、自治性、异构性已经成为信息系统的固有特征。实现信息系统的综合集成,已经成为国家信息化建设的普遍 需求,并直接反映了整个国家信息化建设的水平,中间件通过网络互连、数据集成、应用整合、流程衔接、用户互动等形式,已经成为大型网络应用系统开发、集 成、部署、运行与管理的关键支撑软件。

随着中间件在我国信息化建设中的广泛应用,中间件应用需求也表现出一些新的特点:
可成长性:Internet是无边界的,中间件必须支持建立在Internet之上的网络应用系统的生长与代谢,维护相对稳定的应用视图

适应性:环境和应用需求不断变化,应用系统需要不断演进,作为企业计算的基础设施,中间件需要感知、适应变化,提供对下列环境的支持:
■ 支持移动、无线环境下的分布应用,适应多样性的设备特性以及不断变化的网络环境
■ 支持流媒体应用,适应不断变化的访问流量和带宽约束
■ 在DRE(DIstributed Real-time Enbeded)环境下,适应强QoS的分布应用的软硬件约束
■ 能适应未来还未确定的应用要求

可管理性:领域问题越来越复杂、IT应用系统越来越庞大,其自身管理维护则变得越来越复杂,中间件必须具有自主管理能力,简化系统管理成本。
■ 面对新的应用目标和变化的环境,支持复杂应用系统的自主再配置
■ 支持复杂应用系统的自我诊断和恢复
■ 支持复杂应用系统的自主优化
■ 支持复杂应用系统的自主防护

高可信性:提供安全、可信任的信息服务
■ 支持大规模的并发客户访问
■ 提供99.99%以上的系统可用性
■ 提供安全、可信任的信息服务


生成唯一ID的方法盘点

在现代分布式系统中,生成唯一 ID 是一个非常重要的环节,尤其在高并发、跨服务的场景下。在此探讨几种常见的生成唯一 ID 的方式,详细列举它们的特性、优点、缺点,以及适用场景。

1、UUID
UUID(Universally Unique Identifier)是 128 位长的 ID,通过一定的算法生成,通常以 36 个字符的格式展示,如 "550e8400-e29b-41d4-a716-446655440000"。

UUID 非常适合分布式系统中需要生成全局唯一 ID 的场景。

特性
唯一性:基于随机数和时间戳组合,生成全局唯一的 ID。
无序性:UUID 是随机生成的,不具有时间排序性。
性能:UUID 的生成速度较快,适合高并发环境。

优点
非常适合分布式系统中的全局唯一 ID 生成。
无需依赖中央节点,生成 ID 简单易用。

缺点
长度较长(36 个字符),不适合用于显示在 UI 上。

不具备时间排序特性。

适用场景
分布式环境中生成全局唯一 ID,例如用户 ID、订单 ID 等。
    
2、雪花算法
雪花算法(Snowflake)是 Twitter 开发的唯一 ID 生成算法。它生成 64 位的整型 ID,分为:1 位符号位、41 位时间戳、10 位机器 ID 和 12 位序列号。

这样可以保证在分布式环境中生成唯一的、有序的 ID。

特性
唯一性:由时间戳、机器 ID 和序列号组成,保证了全局唯一性。
排序性:ID 基于时间戳生成,具备时间排序特性。
性能:生成速度非常快,适用于高并发环境。

优点
ID 紧凑,适合用于数据库的主键或分布式系统的唯一 ID。
生成的 ID 有序,方便插入有序数据库。

缺点
需要配置机器节点 ID,部署时稍微复杂。

适用场景
分布式系统中需要有序的唯一 ID,如订单号、用户 ID 等。

3、ULID
ULID(Universally Unique Lexicographically Sortable Identifier)是一种可排序的唯一 ID 生成方案。它的目标是提供一种比 UUID 更具可读性和排序性的唯一 ID。

特性
唯一性:基于时间戳和随机数的组合,保证全局唯一性。
排序性:ID 基于时间戳生成,具备排序特性。
可读性:使用 26 个字符的 Base32 编码,较 UUID 更紧凑。

优点
具备时间有序性,方便插入有序数据库。
紧凑且易读,适合展示和日志记录。

缺点
在极高并发场景下,存在理论上的碰撞可能。

适用场景
需要排序且唯一的 ID,如消息队列、日志 ID 等。

4、短 ID
shortid 是一种用于生成简短、唯一 ID 的工具,适合需要短链或验证码的场景。生成的 ID 是 7-14 个字符,包含字母、数字、特殊字符。

特性
唯一性:基于随机数生成,具有较高的唯一性。
无序性:生成的 ID 无时间排序特性。
可读性:短 ID 的长度适中,便于展示。

优点
生成的 ID 短小,适合在 UI 和用户交互中展示。
不依赖中央节点,适合单机使用。

缺点
不具备排序特性,不能用于需要时间顺序的场景。

适用场景
短链接、验证码、临时文件名等场景。

5、XID
xid 是一种轻量级的全局唯一 ID 生成方案。长度为 20 个字符,包含 4 字节的 Unix 时间戳、5 字节的全局唯一机器 ID 和 3 字节的计数器。

特性
唯一性:通过时间戳、机器 ID 和计数器组合,保证全局唯一性。
排序性:ID 具备时间排序性,适合检索和排序。
性能:生成 ID 速度非常快。

适用场景
分布式系统中需要紧凑唯一 ID,如数据库主键、消息队列等。

6、KSUID
ksuid 是一种可排序的唯一 ID,27 字节的 Base62 编码字符串,包含时间戳信息,方便时间排序。

特性
唯一性:基于时间戳、随机数生成,全局唯一。
排序性:具备时间排序特性,适合检索和排序。
可读性:27 字符的 Base62 字符串,适合展示和日志记录。

适用场景
需要唯一且具备时间排序特性的场景,如日志、消息队列等。

7、Sonyflake
sonyflake 是一种高效、分布式的唯一 ID 生成算法,生成的 ID 是 64 位整数,由时间戳、机器 ID 和序列号组成。

特性
唯一性:基于时间戳、机器 ID 和序列号,确保唯一性。
排序性:具备时间排序特性。
可扩展性:支持自定义机器 ID 位数和时间戳精度。

适用场景
高性能分布式环境,如订单号、日志序列。

小结

方法特性有序性长度适用场景
UUID全局唯一无序长(36)分布式环境、标识符
Snowflake全局唯一、排序有序中(64位)高性能分布式系统
ULID全局唯一、可排序有序中(26)日志、消息队列
XID全局唯一、时间排序有序中(20)分布式数据库主键
KSUID全局唯一、时间排序有序中(27)日志、消息队列
ShortID简短唯一无序短(7-14)短链接、验证码
Sonyflake高性能、全局唯一、排序有序中(64位)分布式系统


在选择唯一 ID 生成方式时,需要根据业务需求、系统架构、性能要求等方面综合考虑,合理选择合适的唯一 ID 生成策略,以保障系统的稳定和高效运行。