06月 11th, 2008 | by 邓芝 |

ESB分布式的基础–传输层、远程通讯

     ESB作为SOA的基础产品,它的第一个目标就是服务的分布化。提到服务分布,那么必然会想到传输、远程通讯、TCP/IP、SOAP等等概念。
    不久前看到朋友的一篇文章Java远程通讯可选技术及原理, 读完之后,感觉有些概念定义的还不是很清楚。再者最近又准备升级ESB产品,因此就一些想法写出来,和朋友们交流。

归类正名

古人有黑马和白马的逻辑辩论,其目的就是正名。只有把概念定义清楚了,外延画定了,我们在讨论问题的时候,才能避免大象和犀牛一起比较的情况。下面我就平时遇到的一些东西进行简单了归类和定义。

  1. 四层协议:网络通讯的一种模型。参考TCP/IP协议分析-协议分层一文。
  2. 传输协议:四层模型中的第三层–传输层,主要指TCP、UDP。
  3. 应用协议:四层模型中的第四层–应用层,基于TCP/UDP,面向应用开发的高层协议。例如:HTTP、FTP等。
  4. ESB的传输层:它是一个逻辑概念,相对于ESB体系结构来说,解决服务(或系统)交互的一层。可以直接利用第四层协议,例如:SMTP协议,FTP协议等;或者基于第三层、第四层协议定制的解决服务交互的协议,把一个系统的数据+指令传输到另一个系统(可以获取回执,也可以不获取回执),例如:SOAP+HTTP协议,RMI协议,Hessian协议,REST(HTTP + XML方式)的协议,XML+JMS协议;甚至与传输无关的一些交互方式,例如:File协议,内存协议等。
  5. 通讯框架:基于TCP、UDP等开发的面向应用协议的框架。这类框架往往为使用者提供了一套通讯解决方案,允许使用者,定制需要的业务协议。例如:MINA,Netty2 ,Cindy,Grizzly等。其它可参考:Java开源 网络服务器端组件一文。
  6. POJO服务框架:这类框架提供了一种通用调用模式,简化POJO类的服务化问题,它们也提供了很强的扩展机制,允许使用通讯框架、ESB传输层来进行扩展。例如:Spring Remote,JBoss Remote,EJB等。

四层协议的共性

通过分析,可以看到四层协议具有如下特点:

  1. 每一层的职责清晰,专著于本层的关键问题。例如:网络层,它处理路由选择等分组在网络中的活动,而不会关心:与传输媒介的物理接口细节等。
  2. 上层协议利用下层协议来处理更低级的数据传输问题。
  3. 都有连接相关的定义。
  4. 都有数据打包的定义。
  5. 都有marshallers/unmarshallers 上层数据的定义。
  6. 都提供了上层如何使用的方案,发送方,接收方(提供方)。
  7. 由此扩展到应用协议,我们会发现它们要解决的根本问题也都包含这几个方面。因此:通讯层的模式是相对稳定的。

ESB分布式层、JMS、POJO服务框架等分布式产品的一些共性

  1. 明确定义服务标示的概念。例如:ESB产品Mule对服务的定义:vm://hello.service,xfire:http://localhost:8888/hello.service。JBOSS Remote中服务的定义:rmi://localhost:8797/hello.service。
  2. 插件化的传输协议。例如:JBOSS Remote提供了,Socket ,RMI,HTTP等。
  3. 插件化的数据编码和解码。该层与传输相关,而与应用无关。例如:Http协议,有文本型编码,Multipart编码。
  4. 插件化的序列化解决体系,例如:Java对象可以用Hessian方式序列化,可以用XML方式序列化,可以用SOAP方式序列化,可以用Java二进制方式序列化,以Jason方式序列化,甚至自定义的方式序列化。这一层通常解决高级应用层的数据(可能包括指令)的序列化方案。
  5. 有选择的提供数据压缩,数据加密,数据签名等常用方案。
  6. 为POJO层(或者定义为:业务层)提供同步、异步等多种业务交互模式。
  7. 错误处理机制。
  8. 提供专有API,或者与IOC容器、EJB容器整合的解决方案。
  9. 服务定位机制,寻址机制。

ESB分布式层的一种选型

在我们的ESB产品中,分布式层解决了如下问题:

  1. 包含了“ESB分布式层、JMS、POJO服务框架等分布式产品的一些共性“一节中描述的特性。
  2. 一个服务,通过一个端口支持多种协议。例如:通过5200端口,我们提供Hessian协议,WS协议,REST协议,HTTP+XML业务协议的方式。而且可以依据需要进一步定制。
  3. 传输质量的解决,例如:数据重发,超时。
  4. 批量传输数据。
  5. 长连接提升性能。
  6. 软负载。
  7. 大数据传输。
  8. 可靠传输。
  9. 流量监控。
  10. 在通讯框架上,我们选择了MINA。原因:A:文档齐全 B:扩展性好 C:协议层定制方便 D:基于事件模型 E:有HTTP的扩展(AsyncWeb) F:稳定性也不错 H:公司内已经有使用先例 G:Apache在不断升级
  11. 【说明:】群集,远程类装载(JINI特性),服务器组等一些高级特性,由于在我们的SOA化过程中,并没有业务上的需求,因此没有考虑这方面的内容。此外,我们发现,可以通过其它一些简单的技术(软件 + 硬件 + 发布 + OSGI等)来简单获得这些复杂技术提供的基本特性,以满足我们业务的需求。
    对于开发一款通用ESB产品和符合自己企业需要的ESB产品,其出发点是不同的,由此在分布式特性的选择上也必然不会相同,每种产品的特性选择,只要满足了自己的目标和需求即可。不过,有些共性的特性点,无论如何也跑不了的(当然,可以简化方案,例如传输层,可以只有RMI,或者JMS)。

  1. One Response to “ESB分布式的基础–传输层、远程通讯”

  2. By 庞统 on Jun 13, 2008 | Reply

    多读,多吸收

Post a Comment