SOA之我见

SOA已然是企业级开发的必定之路。有人会问:我们有了OOP,还须要SOA吗?好吧我承认,这个问题也困扰了我非常久。现现在我得出的结论是:OOP是OOP,SOA是SOA。

OOP是指面向对象程序设计。是指程序开发中的编程思想或者是编程设计方法。它的产生是为了弥补面向过程开发的缺陷,用现代人的思维方式编敲代码的方法。

SOA(面向服务的体系结构Service Oriented Architecture)是大型分布式系统的架构模式,它让架构师站在了一个全新的角度理解企业级架构的开发。

SOA本质上是一种架构模式,它与面向对象相比,它是一个粗粒度、松耦合的组件架构模式。它的产生,也是随着生产关系的变化,不适应生产力发展的须要。

面对公司陈旧的老系统,能够用一个词来形容鸡肋(食之无味,弃之可惜)。

企业是要生存的,不可能全然丢弃老系统,去开发一个全新的系统。况且在新的系统,也会变成将来的老系统。推倒重来,不是一个长久的解决的方法,正途是须要与老系统进行整合。这样,SOA就登场了。

那么OOP与SOA的关系,你可能也有点儿明确了。SOA的内部实现。可能会使用OOP实现,但这不是肯定的。SOA内部全然能够採用其它设计方法进行实现。所以OOP关注的是程序设计层次。SOA关注的是架构模式层次,它希望通过服务化,来实现系统集成,解决信息孤岛。

ESB

谈了这么久的SOA。那么什么是ESB呢?ESB是SOA的重要实现手段。

大家应对各种各样详细的需求。也就对SOA有了行业性的理解,结果就是现现在各种各样的ESB产品。这些ESB都致力于解决各行各业的问题。

ESB的表现形式尽管有非常多,可是从宏观作用上来讲是一致的。

它能实现于各系统见的协议转换、数据装换、动态路由功能。

我也仅仅是接触过几个ESB的产品:Mule ESB、Jboss ESB以及Shuttle ESB。关于再详细的关于ESB的东西。我也仅仅能是谈下自己的理解。由于这些产品,功能各异,側重的实现不一。

Mule ESB以轻量级著称。它是基于实际需求的整合问题而设计实现的。它能轻松的与眼下的系统进行整合,并且非常easy进行再扩展。它标榜可以解决一切信息孤岛问题。用一位同事的话来形容:Mule就是一个大杂烩,它里面什么都有,所以可以完毕各种格式数据的转化;

Jboss ESB比較重量级,它必须部署到Jboss的应用server中,并且它主要专注于与Jboss产品的整合。

Shuttle ESB是.NET平台基于事件的项目。

这是一个比較新的开源项目。我眼下项目中,就负责这一块的开发与研究。

我会在后文中。着重介绍Shuttle ESB在我们项目中的应用。

与此同一时候,我在网上也找了一些资料,也看了非常多官网,发现大家都说的都有道理,并且它们都是致力于不同行业问题的不同解决方式。总结起来。ESB主要起到例如以下作用:

使系统更便于扩展,添加系统灵活性

如上图所看到的,这就是ESB的基本思路的一种实现。

不管是系统内部的服务调用,还是系统间的调用。都会走ESB这条服务总线。不管哪一个系统,都之和ESB有关系,减少系统间的耦合性,便于系统的功能扩展。

这里发挥的是ESB强大的连通性。整合老系统也是应用了该思想。这个消息通道,也是一个服务中介,为各系统提供基础的服务支持。

这么看来,似乎ESB应该是统一的,不应该有那么多产品的出现,实则不然。

实际需求中,业务逻辑是复杂的,一种ESB产品内不可能包括对每一个系统都通用的服务。

详细到消息、事件,详细实现也不可能做到面面俱到。

服务编排

多个服务进行编排形成新的服务。

ESB支持一个直观形式定义新服务的流程。SOA有两个核心组件:一个是ESB。一个是BPEL。ESB是基础设施,BPEL是业务流程驱动下服务的集成与整合。离开SOA。ESB将失去全部连接的服务,而不过一个总线。Bobby做过一个比喻:路是没有不论什么价值的,除非你利用它把一个东西从一个地方一道还有一个地方。离开SOA,ESB就像一个没人通行的道路。

架构设计的考虑

ESB作为一条总线。插入系统之中。所以,就要求ESB具有无状态。高吞吐量的特点。

所以,怎样给ESB减肥,也是一款成功产品在架构设计中,必定要考虑的问题。

只是,ESB的使用,要注意系统的性能问题。记得GXPT项目中,系统间的通信採用的是Webservice,Webservice的效率就已经非常低了,中间再走一层ESB的话,无疑会减少系统的性能,这些在系统架构。必须考虑进去。

智能路由——ESB的更多相关文章

  1. 消息智能路由组件SmartRoute

    消息传递在软件开发过程中是一件很常见的事情,而在不同的场景所使用消息传递方式也有所不同,在对象之间制定相关接口方法和对象结构,对于进程之间可能使用内存共享或一些通讯产品,在不同服务器之的消息通讯则使用 ...

  2. beego 0.9.0 中智能路由AutoRouter的使用方法及源码解读

    了解beego的开发者肯定知道,beego的路由设计来源于sinatra,原来是不支持自动路由的,每一个路由都要自己配置的,如: type MainController struct { beego. ...

  3. idou老师教你学Istio05: 如何用Isito实现智能路由配置

    要介绍istio请求路由,我们不由得先从pilot 和 envoy开始谈起. 在服务网格中,Pilot管理和配置所有的envoy实例.在pilot中,你几乎可以配置所有的关于流量导向规则及其他故障恢复 ...

  4. x86主机搭建家庭智能路由系统 ---- 设计篇

    组件简介 Proxmox: 基于Debian的虚拟化系统,支持OpenVZ和KVM. pfSense: 基于FreeBSD的开源路由系统. FreeNAS: 开源NAS系统. shadowsocks: ...

  5. x86主机搭建家庭智能路由系统 ---- Proxmox虚拟化实现一机多用

    Proxmox VE简介 Proxmox VE(Proxmox Virtual Environment) 是一款完全开源虚拟化管理平台,可以管理QEMU/KVM虚拟机和LXC容器.事实上它只是一个前端 ...

  6. Shuttle ESB

    Shuttle ESB(六)——在项目中的应用 如果说你认真看了前面几篇关于ESB的介绍,我相信,在这一篇文章中,你将会找到很多共鸣. 尽管,市面上开源的ESB确实非常之多,像Java中的Mule E ...

  7. 面向服务的体系结构(SOA)——(2)ESB介绍及职责

    企业服务总线(Enterprise Service Bus)是SOA的基础设施,之所以这么说是因为要达到SOA的目标(增强灵活性)就必须有调用服务的方法,ESB的存在有效的保证了消费者能够调用供应者提 ...

  8. ESB概述

    ESB概念的提出: 企业有大量的异构的业务系统,这些系统之间需要通过web service来交互数据,这样的话可以想象系统直接的交互关系是蜘蛛网状的,是难以维护的.这时候提出了ESB,每个业务系统只需 ...

  9. 对ESB概念的理解(转)

    http://www.ibm.com/developerworks/cn/webservices/0811_magy_esb/ 什么是 ESB?ESB 严格来说不是某一个产品,而是一种框架,设计模式. ...

随机推荐

  1. SQL函数简述

    数字函数ABS 取绝对值 POWER 乘方 LN 10为底数取幂SQRT 平方根 EXP e的n次乘方 LOG(m,n) m为底数n取幂数学运算函数:ACOS ATAN ATAN2 COS COSH ...

  2. (转)CSS 禁止浏览器滚动条的方法

    1.完全隐藏 在里加入scroll="no",可隐藏滚动条:    这个我用的时候完全没效果,不知道是什么原因!不过好多人说这么用可以,大概是用的位置不一样吧   2.在不需要时隐 ...

  3. (转)div+css 布局经验 - 最简单的 = 最不变形的(原创技巧)

    站酷几年了 一直饱受其恩泽 尤为感激 一直想奉献些什么 但是苦于水平 苦于奔波 今天静下心来 为大家奉献下 自己的div+css 经验 ,以下观点只代表 深海个人立场 希望为初学者提供一条" ...

  4. asp.net获取ip地址的方法

    在ASP中使用 Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的I ...

  5. silverlight .net后台 设置visifire控件图表样式 属性说明

    .net后台 代码: 如图 Chart chart = new MyCharts();  //图表            //chart.Watermark = false;  //没好使       ...

  6. Jboss基础及简单的应用

    初学Jboss,对于Jboss的基础认识以及配置做一些记录 Jboss基础: JBoss是什么–基于J2EE的应用服务器–开放源代码–JBoss核心服务不包括支持servlet/JSP的WEB容器,一 ...

  7. [Mac] 使用Mac时的一些技巧

    这篇博客就用来记录自己在使用Mac时学来的一些技巧吧! 1. 如何开启 Sticky key (在屏幕上显示输入的控制键)   就是这个东西啦,就是在视频演示的时候让别人看到自己按了什么控制键. 在s ...

  8. 从配置文件中读取数据获取Connection

    配置文件 db.driver=com.mysql.jdbc.Driver db.url=jdbc\:mysql\://localhost\:3306/mybase db.user=root db.ps ...

  9. Linux上安装JDK

    1.下载rpm文件并安装 rpm -ivh jdk-7u51-linux-x64.rpm 2.修改/etc/profile文件,增加以下配置 export JAVA_HOME=/usr/java/jd ...

  10. 在js中使用json

    在js中使用json var obj = {     "1" : "value1",     "2" : "value2" ...