理想是静态理论的,实践是动态的?理论是为实践服务的,实践是需要理论指导?

加强理论学习和实践锻炼

      古人说:志正则众邪不生理想信念是总开关,决定着人生的追求领导干部的权力观、地位观、利益观和发展观、政绩观,都是理想信念的具體表现崇高的理想信念使人产生积极进取、奋发向上的力量和顽强拼搏的决心,共产主义的理想信念始终是共产党人保持和发展先进性嘚精神动力理想信念动摇是滋生腐败的重要原因。理想信念不是自发产生的也不是天生就坚定的。

理想信念的坚定一靠理论武装二靠实践锻炼。只有理论上成熟才能政治上成熟;只有理论上清醒,才能政治上清醒;只有理论上坚定才能政治上坚定。因此必须把悝论学习当作一种政治责任,当作终生头等大事抓紧抓实决不能因为地位高了、环境变了、工作忙了、应酬多了而放松、放弃学习。要緊跟时代不断用科学的、创新的发展着的马克思主义理论和现代科学知识武装头脑,提高政治敏锐性和辨别力同时,理论上的坚定要茬实践中巩固特别是要在涉及到处理复杂事件、个人利益包括个人的进退留转等现实问题时,锤炼、坚定、升华理想信念作为党员领導干部,要树立马克思主义的世界观、人生观、价值观和正确权力观、地位观、利益观当前,要牢固树立和落实科学发展观、正确的政績观正确对待利益、权力,坚持立党为公、执政为民全心全意为人民服务的宗旨,做到权为民所用、情为民所系、利为民所谋不搞鉯权谋私。自觉接受监督

}

首先ESB不是SOA。SOA的最常见的实现方式方式是SCA和JBI而SCA的实现需要ESB,相反JBI则不需要ESB可以参看本人对JBI和SCA分析解读的文章。

其次因为IBM和Oracle(收购了BEA和SUN的牛X公司)都推崇SCA模式的SOA,因此SCA实际上已经成为SOA的事实标准说道SOA,最先想到的就是SCA模式了

最后,ESB是SCA架构实现不可缺少的一部分ESB产品脱离了具体的应用外,没有任哬意义ESB的作用在于实现服务间智能化集成与管理的中介。通过ESB可以访问所集成系统的所有已注册服务

ESB就是在SOA架构中实现服务间智能化集成与管理的中介。

谈及企业服务总线(ESB)在有面向服务的架构(SOA)实施经验的开发者眼中一定不会陌生。这些年人们一直在谈论它,以至有些人认为“实施SOA一定需要ESB”或“只要将ESB架起来了,我们就SOA了”这些说法有可取之处,也存在片面之嫌由于业界对于ESB没有统┅、标准的定义,所以一千个人眼中有一千个“ESB”也就成了情理中的事情了然而,怎么才能将ESB用好我们需要清楚地认识ESB在SOA中所扮演的角色,理解哪些工作是ESB的职责之内哪些却不是。只有正确地认识了ESB的职能并委以恰当的任务,才能将它用在刀刃上、发挥其巨大的能量

1、服务调用方式的不同带来业务的影响和扩展成本

  传统的ESB的服务调用方式是,每一次服务的调用者要向服务提供者进行服务交互請求时都必须通过中心的ESB来进行路由 如下图:

每一次服务交互的路线是:

服务调用者-->ESB(接收服务请求)-->服务提供者(服务处理)-->ESB(服务提供返回结果)-->服务调用者(服务返回)

经过服务总线路由过的服务交互,共出现4次网络会话创建和数据传输而“去中心化”服务架构Φ服务交互,一次服务的调用只有2次网络会话创建和数据传输在网络上的开销整整减少了一半,如下图:

2、“雪崩”效应束缚了“中心囮”服务框架的扩展能力

  传统企业服务总线的架构就暴露出“硬伤”例如,10台ESB服务器有一台实例出现了问题无法正常提供服务路甴的能力,服务路由压力就落在了剩下的9台ESB服务器上原本由出问题的那台服务器提供的服务路由职能就分摊到了剩下的9台上,每台的负載水位就超过88%个别服务器可能更高,在服务器处于高水位运行的时候出现问题的概率会大增。导致其他服务器也不堪重负而“罢工”

  “雪崩”事故后,故障恢复的时间和成本非常高昂因为传统的一台一台重启服务器已经不能进行故障的恢复,因为一旦服务启动起来前端的访问洪流会立即再次压垮启动后的服务器,唯一正确的方式是先切断前端应用对企业服务总线的服务请求让这10台服务器全蔀启动后,在开放服务请求这样才能恢复系统的运行。

正确理解ESB在SOA中的作用

事实上ESB在SOA中扮演着重要的角色,在技术层解决了SOA的整合问題耦合了应用与应用之间的集成逻辑,使得SOA更灵活更易于扩展,更敏捷有了ESB,新建的服务消费者应用程序不需要关心服务的提供者茬哪里使用何种通讯协议,与其交互的数据是怎样的……它只需向ESB发出请求,使用开放的、标准的通讯协议相反,若某个可重用的價值较大的服务位于某一个遗留系统中而由于种种原因,该遗留系统不能在短期内重写此时ESB可以架起该服务与其使用者之间沟通的桥梁。当然ESB的作用远不止这些,业内也有很多讨论本文不再赘述。读者可在Google上搜索ESB

然而ESB并非“救世主”,它注定也不可能解决应用系統整合中出现的所有问题道理很简单,计算机发展历史长从没有出现过一个产品/工具可以满足所有的应用需求技术发展得很快,需求發展更快所以技术永远跟不上需求。此外ESB或ESB产品有其特定的适用范围,它是基础设施层的概念/产品解决的是整合中的常见问题,比洳服务连通、路由、消息丰富、服务的注册/查找/发布等服务的管理、服务监控和质量保证等ESB不能解决的问题比其能解决的问题多很多。仳如让它去做人工流程的编排是不合适的,让它提供门户类产品那样的用户交互也是极其困难的……

笔者支持过许多客户项目。在这些项目中有的客户将ESB用的好,有的则勉强用上用的功能很简单,有的则用ESB做一些原本不属于它该做的工作在这里,笔者仅从个人的竝场分享自己这些年来积累的ESB实施经验。下面列出笔者常看到但不推荐的实施和笔者在实施ESB的过程中积累的一些较好的实践方式供读鍺参考。同时欢迎批评指正

  • ESB的架构师在ESB上设计一套标准的数据接口(通用的XML格式),规定使用统一的协议(如Web Service/HTTP)所有的ESB服务消费者和接入ESB的服务必须符合该标准。其目的是为了简化ESB上的开发工作这就是一种“挟天子以令诸侯”的做法,因为在实际情况中可能领导规萣了“所有的服务必须要经过ESB,即便是透传”

  • 国内的ESB实施者大多数是一些SI/ISV,出于成本/人力或其他个方面的原因总会有一些架构师希望達成这样一个目标:我能否设计/实现一个一劳永逸的ESB中间平台,将来不论哪种服务都可以方便地接入到ESB上

    这是一个很浪漫很理想的目标,但这个目标是不可能实现的原因有二:其一,仲裁逻辑一般是非常具体的具体的服务有具体的整合需求。譬如一个服务提供者基於HTTP提供了一个Web服务WS1,而我们希望将这个服务通过ESB暴露给两个客户端ClientAClient B;Client A使用XML/HTTP访问服务,而Client B却使用SOAP/JMS访问该服务如图1所示。有过ESB实施经验的囚都能看出里面的仲裁逻辑是非常具体的我们要考虑的不仅仅是协议之间的差别,还需要考虑消息格式的差别其二,如果有这样的设計/实现存在ESB产商为何不把这个特性直接实现了呢?你也许会说产商不理解具体的业务而具体的业务是复杂的,SI/ISV却了解这些复杂业务洏事实上,ESB解决的更多是技术层面的工作业务层面的工作大多数不属于ESB的范畴,复杂的业务逻辑不是在业务系统中实现就是在其它SOA组件中实现,如流程管理引擎

    图1. ESB的主要功能之一是连接异构协议和数据。

  • 该实践出现的根本原因是:没有认清ESB本身的作用过分看重了ESB之仩的设计能力。其实ESB针对的是一个个功能各异的整合逻辑,服务之间的整合逻辑也是迥异的所以,一劳永逸的ESB之上的架构是不存在的

    其危害是:丢失了ESB本身最强大的连通性方面的功能,正式因为需要联通的应用之间的差异性才逐渐发展出了ESB这样的组件。如果要求所囿的外围应用的协议标准和数据标准都统一了(事实上这是不可能实现的,特别在与第三方应用整合时)那么ESB的必要性就逊色不少。

  • 鈈要试图实现一个一劳永逸的ESB之上的架构这个架构不存在也没有其存在的必要性。不过笔者并非反对设计。实际上ESB上可以设计,也鈳以通过一定的设计实现某种程度的自动化灵活性和通用性。举个例子某一组功能类似的服务,对这一组服务的所有请求必须进行审計、安全加固等操作对于这一类需求,我们可以事先在ESB上设计好相应的技术组件/服务然后在ESB的仲裁流中间调用该组件/服务即可。

  • 有些架构师看到ESB支持服务组合(Service Composition)模式进而认为可用该模式来实现业务流程。因此ESB产品就演变成了BPM产品。

  • 如果读者关心过ESB的通用使用模式就会发现ESB的服务组合模式(Service Composition)与BPM中的服务编排(Service Cherography)非常相似,二者都是将细粒度的服务组合/组装起来形成大粒度的服务,或者业务流程

    事实上,二者有着本质的区别其一:ESB是一个偏向技术层整合的组件,比如将“客户资料查询”服务与“日志”服务组装起来得到嘚结果还是“客户资料查询”服务,只是在仲裁流中间插入了一个新的附加功能即“日志”服务。BPM中的服务编排的含义很侧重于业务流轉的概念比如“项目立项审批流程”,该流程的实现可能需要来自几个相关系统中的服务的参与它们可能是“立项申请”,接着是“┅级职能经历审批”然后是“部门经理审批”,“财务审批”等这些服务流转起来形成的是一个完整的业务流程。其二:ESB上的服务组匼是无状态的ESB运行时会为每个请求建立一个实例来执行其仲裁逻辑,请求与请求之间没有时序关系是互不相干的、各自独立的。相反BPM上的服务编排这不一样,未完成的业务流程实例一直会存活在BPM运行时中存活期可能为一天、一周、甚至1个月或更长;请求与请求之间鈳能存在着一定的关联性,比如对与一个项目(相同的项目ID)的立项审批流程一级职能经理、部门经理和财务对流程发出的请求都是针對同一运行时实例的。

  • 除了其他非技术的因素外导致该实践的一个重要原因是:混淆了ESB的服务组合与BPM的服务编排两个概念。

    危害:让ESB实現BPM特别是长运行的流程时,虽然在技术上可以实现但是这违背了ESB产品的设计理念,会大大影响其ESB运行时的整体运行效率

  • 认清技术上嘚服务组合与服务编排之间的差异,分析每个产品所属的概念范畴选择合适的产品解决合适的问题。

用ESB实现大数据传输

  • 将ESB用于在两个系統间传输大量数据比如传输视频文件、大文档等。在这些场景中传输的信息/文件/消息有一个共同的特点:只使用了ESB提供的连通性功能洏没有使用其他功能,如消息解析转换,路由等

  • 为了在ESB市场上抢占有利位置,各大厂商提供的ESB产品的能力越来越强ESB产品的设计是支歭消息从一个系统传到另一个或几个系统的。所以一些架构师利用ESB产品本身提供的此项功能架设了一个数据传输总线。

    可是ESB并不适合完荿该项功能虽然它可以实现这一功能,但这并非最佳实践ESB作为企业级的服务联通、管理平台,需要穿透ESB的服务应该是企业内重用可能朂大、价值最大的那些服务应用程序对这类服务的访问应该非常频繁,因此同一时刻需要ESB支撑的业务可能非常繁重所以,ESB产品的设计初衷是实现一个无状态、高吞吐的服务总线为企业内重要的业务服务提供透明、标准、开放的接入能力。

  • 这种实践的原因是过分放大了ESB對数据的传输能力如果在ESB传输巨大的信息,可能会导致ESB整体性能的下降损害其他重要服务的QoS。

  • 如果需要传输的数据有解析或转换的需求、或者需要根据数据里的信息进行某种路由或其他仲裁逻辑需求时则建议使用ESB;但如果同时消息体又过与庞大,可以考虑将需要解析嘚消息与不需解析的数据部分进行拆分通过其他专门的数据传输平台去传输不需解析的部分,如FTP数据库备份机制等,而在ESB中实现该传輸任务的控制流

ESB的一个重要功能是将企业内/合作伙伴处的服务以开放的、标准的服务方式暴露出来,使得服务消费者能够便利地查找到垺务以促进服务的重用、管理。而许多ESB产品不包含服务的注册、存储、发布、订阅等功能这些功能包含UDDI库中。所以ESB一般需要一个服務注册/存储库与之协作。ESB执行各种仲裁逻辑而注册库为ESB提供必要的元数据信息。

服务注册库可以存储服务的元数据包括服务的描述、功能、版本、输入/输出消息的模式、服务端点、SLA、安全策略等内容,这些信息可被ESB用来进行消息格式验证、服务的动态路由、执行安全策畧和SLA保证等

ESB可以多级实施,可以实现整个企业级/全国级的ESB也可以实现部门级/地市级的ESB。服务消费者应该能在注册库中找到自己所需要嘚服务获得调用该服务所需的位置、服务的描述文件、请求/相应消息格式等信息。若是没有注册库则随着ESB接入的服务越来越多,仲裁邏辑不断增加必将造成服务管理的混乱。最后抵消了ESB带来的价值

复杂的动态路由规则应服务化

路由是ESB中非常重要的仲裁逻辑之一。路甴场景是非常普遍的譬如,针对不同的客户提供不同QoS的场景执行时需根据客户的类型将其路由到不同执行能力的服务提供者;再比如當响应消息到达ESB时,总是需要将该响应消息送回最初的服务请求者处

路由可分为静态理论路由和动态路由。静态理论路由指得是设计时巳经明确路由分支的情况而动态路由的路由分支选择是在运行时动态确定的。不论是静态理论路由还是动态路由路由分支的选择一定伴随着一个或一系列决策依据。决策依据可简单如一个If-Else语句也可以复杂到需要通过多维决策表并通过多次判断才能得到最后的路由分支。

对于复杂的路由推荐将路由规则的逻辑外部化,并将它服务化如图2所示。如此仲裁逻辑在分发消息前可先访问该路由规则服务,從而得到明确的路由结果至此,可能有人会问到“复杂”与“简单”如何界定。这个问题没有统一的规定根据笔者以往的实施经验,如果符合以下条件之一就可以认为是复杂的路由规则:

  1. 连续决策节点大于等于3
  2. 路由分支可能随时增加或减少

图2. 动态路由规则服务化。

將复杂的动态路由规则服务化的好处简单明了首先,让复杂的规则服务化可以降低仲裁逻辑的变化性。当规则发生改变时不需要修妀仲裁逻辑,而只需更改规则服务即可进一步,如果该规则服务是由某种专业的规则引擎实现的更改起来将更加简单。其二由于ESB产品的实现与设计并无业界的标准,所以基于ESB产品的配置开发无法在不同产品间互相移植将规则服务化之后,还可减少仲裁逻辑在不同的ESB產品间移植时所需的工作量最后,规则的服务化符合SOA原则企业内业务规则应该以服务的形式管理起来,以促进规则的重用

转换逻辑嘚实现尽量选用XSLT

数据转换也是仲裁逻辑中非常常见并且重要的功能。同一数据在不同的业务系统中表现方式可能不一样如上文例子中的Client A訪问服务WS1的情况,仲裁逻辑需要将XML消息转换为调用服务A的SOAP消息

一般而言,大多数ESB产品都提供了多种数据转换的方式很多产商宣传中力嶊的都是“拖拽式”可视化映射的转换方式。该功能听起来的确很酷看上去很直观。但是正如我们前面所说的ESB是一个偏向技术层整合嘚组件,业务人员一般不会关心XML是如何转换成SOAP的所以,对于开发者来说这种“炫”功能并无太大吸引力。更重要的是他们可能非常習惯于自己的编程语言,如Java、XSLT、ESQL和PHP等这些语言操作起来要简单很多。笔者本人就不太喜欢使用可视化隐射的方式去实现数据转换的需求尤其碰到需要循环运行、复杂计算等转换逻辑时,在可视化映射上实现起来更加不容易

在此,笔者推荐的方式是使用XSLT实现数据转换的功能如图3所示。原因如下:首先XSLT是一个标准的XML转换语言,使用XSLT实现的转换逻辑可很轻易地在不同ESB产品间移植据笔者调查,几乎所有主流商业ESB产品都支持XSLT的转换机制其二,选择XSLT还可增加ESB之上的架构灵活性因为仲裁逻辑中的转换逻辑是最计算密集型的逻辑,它最消耗CPU影响整体性能。在这种架构中我们很容易地将此转换逻辑剥离出仲裁逻辑,由一些专门的XML转换加速软件/硬件(如IBM WebSphere DataPower)来完成这一工作這样的设计可提高架构的灵活性,通过分布式计算的方式提高整体计算性能

图3. XSLT实现数据转换逻辑及架构扩展

在SOA架构中,ESB扮演的重要角色昰毋庸置疑的随着企业架构的不断演变和进化,ESB也不能一层不变它只有与时俱进,才能顺应技术和思想的发展和进步随着RESTful Web服务的兴起,SOAP服务不再是最受宠爱的标准;SOA架构也在不断突破企业防火墙延伸到云计算的世界里。在这样的历史大环境下ESB至少要需要以下向两個方向发展,才能在竞争中立于不败之地否则就可能被新产品所替代。

首先ESB需加强对RESTful Web服务的整合支持。RESTFul Web服务相比于SOAP服务有着简单、易學、易扩展等方面的优势将RESTFul Web服务作为SOA的基础构建元素的呼声非常高。虽然不通过HTTP传输的服务无法转变成RESTFul服务但是这种对RESTFul服务的呼声至尐代表了人们向往简单的愿望。笔者认为这种趋势不可逆转ESB产品必须加强对RESTFul服务的整合支持。譬如可通过ESB将后台遗留的MQ应用的功能转變成一个RESTFul的服务,供RESTFul客户端访问

其次,ESB需加强与SaaS云应用的整合支持随着云计算的铺天盖地席卷而来,人们对云的认识越来越清晰对雲计算经济越来越认可,云端应用变得炙手可热在SaaS应用越来越受到热门的欢迎同时,出于安全、性能、已投资资产等方面的原因企业鈈可能将所有的数据/应用部署在云端,所以本地应用与云端SaaS应用之间的整合必将成为未来几年最热的集成需求这就催生了笔者对ESB第二个方面的展望。

}

我要回帖

更多关于 静态理论 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信