我将只回答一个问题,基于我以前的经验 - 看看这个
中间件,它被大公司所采用 - 中间件有一个目的 - 将不同语言编写的分离系统粘合在一起,以便它们可以相互交互并简化业务流程 - 我有过使用经验,Entera在UNIX系统上创建了一个中间层,使用C编写的进程通过PowerBuilder编写的前端与主机系统(DB2,COBOL)进行交互(我没有透露公司名称!)。
从我给出的描述中,Entera是一个托管许多东西的中间件 - 无论字节序格式如何,都能够平稳地集成数据流,不同语言能够与中间件代理(代理是遵循'The Open Group'的
CORBA或
DCE进程,它监听特定端口)通信,并由
IDL指定,使进程显得像是本地的 - 如果您熟悉Microsoft .NET Framework下的Remoting术语,那么您就不会远离目标!中间件生成在编译时链接的存根,并管理进程的创建,将其托管到一个端口,运行时进行多线程处理,并且现代前端(例如.NET、Java、PowerBuilder甚至是不可言说的VB6...好吧...VB.NET适用于纯粹主义者)可以通过打开到特定IP地址上指定端口的连接,并使用生成的存根直接与之交互。
显然,从所描述的内容中,您可以看出遗留系统如何焕发新生命,因此该过程的可伸缩性,主要的缺点是成本因素,可能会达到数千美元。使用主机作为其后端处理系统进行计费/发票的大公司,可以显然负担得起这样一种昂贵的产品 - 对他们来说,这似乎就像把几分钱扔进水池中一样...由于使用中间件延长了业务流程并为其注入新的生命力,可以将业务延长多年而不必担心附着在其上的'遗留'标签。
顺便说一下,我曾经作为我的信息系统学士论文的一部分进行了这项工作,其中涵盖了这个商业前端。Sourceforge上有一个名为
FreeDCE的开源版本的中间件,但开发工作已经减少或停止。
编辑:
@cocotwo:正如你所说,中间件就像是一种管道工具...根据我所知,消息导向的中间件并不常见,因为我想象这些进程(函数)需要被调用,就像它们在前端应用程序域内本地可见一样,以便于易于互动。
使用消息可能比RPC调用更具有优势,因为消息会排队在一个安全保持区中,在网络断开连接时进行数据缓存,以允许前端继续运行...这对于“更新特定计费/发票编号的状态”等实例非常有用-通过中间件的单向写入数据到后端。
好的,大公司将拥有先进的系统基础设施,技术人员将全天候负责确保数据流顺畅,因此必须考虑到这一点。我曾经与IBM Global Support合同合作的公司合作,以确保最大的98.999999%的正常运行时间,同时采用热插拔/平衡集群/镜像系统...
而对于RPC,如果发生断开连接,则必须重新启动前端或处理断开事件。这确实取决于消息排队中间件是否实时处理每个消息,并立即将结果传递回前端...
这就是每个(消息排队和RPC相关的中间件)各自拥有其优点和缺点的地方...还有成本控制因素,如支持、最大正常运行时间、开发工作量和培训-这在这里非常重要,因为中间件实际上是私有的(尽管遵循“开放组”布局/标准),并且通过脚本将整个事物粘合在一起非常复杂。