免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13773 | 回复: 11
打印 上一主题 下一主题

ESB产品架构之愚见 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-31 12:52 |只看该作者 |倒序浏览
本帖最后由 feiyang10086 于 2010-12-31 12:54 编辑

ESB产品架构之愚见



1       主要概念
SOA :英文全称是 Service-oriented architecture ,现在概念比较的不统一,主要由以下几种定义

1. W3C :可以调用的一系列组件,其接口描述可以发布和发现。
2. CBDI :一组策略,实践和框架,支持将应用程序功能作为一组服务在与能够调用,发布和发现的服务使用者相关的粒度发布; 这组服务是使用接口的单一标准形式从实现抽象出来的。
3. Gartner: 面向服务的体系结构是一种客房机/ 服务器软件设计方法,其中的应用程序由软件服务和软件服务的使用者(也称为客户机或服务请求方)组成。SOA 与更为通用的客户机/ 服务器模型不同,其定义强调软件组件间的松散偶合及对独立接口的使用。
4. IBM :面向服务的体系架构(Service Oriented Architecture,SOA )是一个建设企业IT 架构的架构风格。采用面向服务的原则,达到业务与支持业务的信息系统的紧密结合。
5. BEA :面向服务的体系架构是一个IT 战略,将企业应用中分散的功能组织成为支持互操作、基于标准的服务。这些服务可以被组合及快速重用以满足业务需求。



ESB : 全称为 Enterprise Service Bus ,即企业服务总线

BPM : Business Process Management 业务流程管理

2       概述
ESB 的存在主要是为了整合企业内部的应用,使一个企业能的应用能合为一体,而不是成为一个个独立的应用。可以说 ESB 企业内所有的服务的中心点,其他的系统间的交互都要通来 ESB 来完成。为此他的质量属性的重要性依次是这样的,可用性、性能、可修改性、可测试性、易用性。它门描述可以参看下面的 2.1 章节

为了完成这些属性,我们可以从企业域, 部门 域, ESB 内部视角三个层次来进行说明。因为 ESB 除了高可用性和性能之外,高可伸缩性也很重要,在实际的应用过程中,你可以进行对整个结构进行裁减,在开始时,你可能只要一个部门域,一个部门域内支持水平扩展,当到了瓶颈后,你可能会部署多个部门域,这样做到这时你可以把他看成一个垂直扩展。

2.1     ESB 的质量属性
第一位:可用性

    ESB 是企业内应用之间及对外第三方系统之间交互的集中点,他集中的管理了交互的所有服务。他还有服务查找,管理,审计,监控,分析,等功能。当一个 ESB 服务出现了故障,它就将会影响企业内的所有应用的正常运行。所以,可用被性放在了第一位。

第二位:性能

随着企业内部整合的推进,ESB 内部的服务交易量应该不会是个小数,高性能对于一个ESB 的应用也是非常重要的。

第三位:可修改性

因为 SOA 的企业治理是一个循序渐进的过程,在ESB 部署的开始之初,很难对交易的量上有一个准确的估计,对性能的扩展性有比较高的要求。

在实际的生产运维过程中,我们还是会常常发现,服务可能会出现这样或那样的问题。为了让使用这个服务的应用能正常的使用,快速的修改和部署,是一个很重要的问题。

ESB 的项目是随着SOA 的企业治理而进行一次次的迭代过程,这也就意味这可修改性在ESB 中的重要性。

第四位:可测试性

   ESB 的上线既然是一个迭代的过程,服务会根据SOA 理念的深入而增加。在迭代的过程中,要保证以前的服务能顺利的通过,可测试性是一个很重要的保障。

企业内应用的交易,应该只面向ESB ,它们要交互并不需要知道这个服务在哪里或是给谁使用。这时,ESB 的测试就是一个很大的问题,因为这支交易在开始的时候,你可能并不知道他会在哪里被使用,但我们至少要保证这支交易基本上是正确的,这样才能便于使用。

第五位:易用性

    易用性,这当然是要提高一个服务的开发效率,能快速的开发和部署一个服务。因为他对生产上的活动没有影响,在这里它只能放在第五位


3       企业域视图
在大多数据情况下,如果你的交易量不大,你大可以只使用一个部门域来支撑整个企业内的服务。但如果只是一个 ESB 的部门域的话,是没有办法支撑后来交易量的年年增长的。虽然我们的每一个部门域,都可以自行进行水平的扩展,但这还是有一个度,如果超过这个度后,你就只能使用垂直扩展,这种扩展方式当然没有水平扩展来得廉价,但他能支撑更大的交易量。

在企业域中,最大的特点就是有多个部门子域,每个部门子域都是高度自治的。他们可以独立的处理域内各个系统的整合,只有当需要别的域的服务时,他才会请求其他的域。为了防止部门域之间变成一个蜘蛛网,这里我们引入了企业域管理器,来统一管理域内的服务与及对这些部门域进行必要的监控。

在企业域管理器中主要有以下的几个组件:

l  企业服务查找注册组件:这个组件一般情况下是独立部署的,而且应该有很高的可用性,在理想状态下,应该可以查找到所有部门域中的所有交易。跨域的交易都需要通过这个组件来查找到对应域的服务。

l  监控组件:这个组件可以查看各个部门域内的运行情况。




图表 3 ‑ 1

3.1     元素
3.1.1  企业域管理器
3.1.1.1        企业服务查找注册组件
这个是企业域管理器的核心组件,使用他来管理整个企业内的所有服务,这个组件应该有以下几个功能。

l  服务注册:注册服务的地址,服务的说明。

l  服务版本管理:可以管理个服务的版本。

l  服务客户端代码的生成,根根服务的地址和说明生成服务的客户端,一般是 java 版本。

l  服务路由表的查找:主要是为了查找对应的服务的地址,而且可以对服务路由进行推送。

l  服务的使用方注册:你要请求其他的域的服务,你就需要告诉服务查找注册组件,这样就可以通过此组件找到此服务的使用路径,从而当服务进行更改后,可以有效的通告相对应的交系域。

3.1.1.2 监控组件
这个组件可以查看各个部门域内的运行情况,并在部门域的运行超过伐值时进行相应的预警,必要时,操作域内流控来操作交易。具体的功能如下:

l  查看各个部门域内的运行情况。如硬件资源,交易信息,流控信息,配置信息。

l  对资源使用情况进行预警

l  根据情况操作部门域内的配置参数,比如流控的配置参数。

l  定时收集各个域内的信息,保存后,为报表、决策分析等提供信息支持。

3.1.2  部门域
部门域是整个企业域内的一个个的 ESB 结点,每个部门的域内会根据项目群,或者根据部门来进行划分,在各个部门域内都有一个 ESB 的应用,通过这个 ESB 来整合整个部门内的服务和应用。这个元素我们将会在部门域的视角中祥细进行阐述。

  
3.2     场景
3.2.1  子域间交互
所有的服务都会被注册到企业管理器的服务查找组件中,这个组件拥这些服务的描述和服务的地址信息。一个具体的流程可以查看序列图(图表 3 ‑ 2 ),部门域 A 如果要发起一个跨域的服务请求,那就必须要使用企业域管理器的服务查找组件,通过这个组件的路由表来获取此服务的服务方的部门域 B 的服务的地址后,才能请求对应的部门域 B 。

为了提高性能,在这个场景里,我们也可以在启动的时候就去取对应的路由表信息,然后缓存起来,通过缓存来找到部门域 B 的地址,但这样有一个注意点,那就是当部门域的改变了服务的地址后的通知部门域 A 的策略问题,我们可以有下以几种策略

l  服务查找组件进行推送

l  如果服务请求地址出错,重新请求服务查找组件

l  定时清空路由缓存

  

评分

参与人数 1可用积分 +5 收起 理由
duanjigang + 5 谢谢开启第一帖!

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2010-12-31 13:45 |只看该作者
现在忙些,等回家假期仔细拜读楼主的文章,对我来说,很新颖的话题

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
3 [报告]
发表于 2010-12-31 13:46 |只看该作者
顶,写得不错!

论坛徽章:
0
4 [报告]
发表于 2011-01-01 21:55 |只看该作者
惭愧,楼主的文章看了两遍,没有怎么看懂,呵呵,能不能结合一些实际的例子来讲解下?谢谢
好几年前听IBM的博士讲SOA,一直就是云里雾里的听不太懂:wink:

论坛徽章:
0
5 [报告]
发表于 2011-01-02 18:44 |只看该作者
能否结合实例讲讲啊?

有些概念似乎很容易明白,但是一时也想不到如何实现。

论坛徽章:
0
6 [报告]
发表于 2011-01-02 19:14 |只看该作者
能否结合实例讲讲啊?

有些概念似乎很容易明白,但是一时也想不到如何实现。
kiss2003 发表于 2011-01-02 18:44



    呵呵,我和别人在怀疑楼主是不是转载的文章,举不来例子。
这个想法是不是很邪恶

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
7 [报告]
发表于 2011-01-02 19:14 |只看该作者
回复 4# duanjigang


本质上说是用来异构系统集成的一个技术。一是提供一个异构系统间通讯的手段,二是提供一个发布系统服务的手段。
系统间对象的传递以前更多的用dcom,cobol等二进制方式。SOA(或者说ESB)的基础是XML。它的优势是描述性、可读、跨平台等特性。把二进制数据表达为文本数据。
较大的问题是处理xml的性能。
不好理解?就想象C 里面的struct、函数签名用xml描述。

论坛徽章:
0
8 [报告]
发表于 2011-01-02 19:18 |只看该作者
回复 7# gvim


    呵呵,谢谢!有没有一些小的实例,先学习下:wink:

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
9 [报告]
发表于 2011-01-02 19:41 |只看该作者
本帖最后由 gvim 于 2011-01-02 19:44 编辑

回复 8# duanjigang

这玩意概念不复杂啊。
本地比如一个系统,用C#(或java)编写的
{
    class phone
    {
        color color("black");
        productor prod("apple");
    }

    phone iphone;
}

产生对象iphone的XML描述

<phone name="iphone">
    <productor prod="apple" />
    <color color="black" />
</phone>

将这个XML发给远端系统比如一个C处理的系统,解析XML之后实例化一个iphone的对象。

这里的重点是两个系统是异构系统,信息的表示是同构的XML文本。本质就是进程间通讯,只是一切用文本描述。

论坛徽章:
0
10 [报告]
发表于 2011-01-08 11:41 |只看该作者
基本上ESB都被当成一个前置机使用了,要各个系统都遵守这个规则很难
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP