这是一个多层的架构:靠上的是门户及中间件层(中间层包含信息集成及业务流程等),靠下的是业务系统及基础架构(如数据库等)。 上层与下层的交互,以及各业务系统之间的交互,需要通过企业服务总线ESB来完成。但在实际的项目中,我们看到ESB通常变成摆设,这主要有以下几个原因:
ESB能做什么?大部分IT人员认为ESB可以实现数据传输,同时可以进行传输协议及数据格式的转换。没错这是ESB最基本的功能,但是如果仅仅是基于这样一种定位,就没有必要用ESB,因为使用现有的技术完全可以实现这些功能。
那么应该如何来定位ESB呢?答案是:解决系统之间的紧耦合问题。即将下图所示的,系统之间网状的紧耦合的交互方式,变成松耦合的总线交互方式。
2.对于实施ESB的方法论不清楚
要想ESB实施取得好的效果,最重要的是建立服务路由规范。
上图是一个带服务路由组件的ESB架构图,他是如何实现系统之间的松耦合的?假设A系统需要将信息发送给D系统,A系统只需要开发一个接口,向ESB发送该信息。然后ESB将信息传输给D系统的接口,实现数据交互。
这里有一个问题,ESB是如何知道应该调用D系统的接口,而不是调用另外一个系统的呢?
大部分的用户在实施ESB的时候,采用的是由A系统将目标系统的信息以参数的形式传给ESB,这样ESB就知道应该调用哪个系统的接口了。这是最直接,也最容易实现的方式,但这样系统又变成紧耦合了,因为A系统必须知道要将数据发给哪个系统。如果A系统需要将同一信息发送给E系统,则必须修改A系统的接口代码。
因此要实现松耦合, A系统除了知道要交互的数据本身以外,不应该知道目标系统的信息。再回到之前的问题:ESB如何知道应该调用的目标系统接口呢? 答案就是服务注册及映射。首先需要将A系统的接口、及B系统的接口在ESB上进行注册,其次需要在ESB上做个映射,即将A系统的指定接口,映射到B系统的指定接口。ESB就知道接口之间的调用关系了。 再回到之前的业务场景,A系统目前只需要将B系统发送信息,将来A系统需要将该信息发送给E系统,这时只需要在ESB上增加一个映射关系即可。而A系统不需要做任何代码级的修改。这样ESB就可以根据服务注册及映射信息,进行服务的路由了,从而实现了系统之间的松耦合交互。
实际上按这种方式实施ESB还有很多好处,将在后续文章中进行讨论。