SOA中概念的输理

 

        因为SOA概念是源自当前已有的技术,如Web service,但又高于技术本身,因为其是架构问题,是设计问题,必定表明人在里面的重要作用,基础设施再好也只是把程序员从重复、复杂、底层的工作中解脱出来,软件成败的关键在于设计。SOA由来已久,本身就是技术的集大成者,概念、理念自然就多,同时对概念也没有一个标准的一致性。以下是我个人在学习过程中,总结的几个容易混淆的概念,现拿出来梳理,一是对自己学习的总结,二也希望帮助后学者少走不必要的弯路。

       (一)编排与编导

             我们知道,SOA最重要的思考就是复用服务,那么复用服务,是靠组合现有的服务来达到快速响应变化,增加企业敏捷性的。服务的组装并不是服务的简单堆砌,服务间是需要协调才能更好地共同完成一定的功能。

             编排(orchestration)和编导(choreography)是常用于描述“服务协调”的术语。虽然它们在中文的含义中区别并不大,但其实区别挺大的。

   编排涉及到服务协同,整个服务间的关系如下: 

 咋一看还以为是网络的星型连接图吧,编排涉及到的是服务调度的安排,其中编排服务做为中央的总控机构,犹如局域网中的Hub,各个被协调的服务间的消息传递都要经过它来进行转发或被该Hub修改,才能通讯.

而编导则相对来说服务间的通讯更分散,每个被协调服务不需要将消息都往Hub.这种处理基于某种每个被协调服务都知晓的规则,并且可能对于每个被协调服务来说都建立了本地的配置文件.其交互图如下:

这就是两者的区别.下面我将进一步从稍微低层来学习Web service中的Endpoint,但不一定就绝对正确,这是因为SOA本身比较凌乱,同一个概念在不同的上下文,在不同的人理解中都有不同的意思,所以本人也只能从自己的角度来阐述这些概念而已. 

Endpoint,其实就是一个定位服务的信息,在运行时提供了访问服务所必须的地址细节.如果某个服务在两台机子上,那么它就有两个Endpoint.这种情形下,可以认为Endpoint与service的位置一致.Endpoint同时又与实现无关,这里涉及到OS(操作系统)的工作了,当在endpoint处OS接收到进入的数据时,OS会将数据发向实现代码,可以看做是实现代码在该endpoint监听.而当OS接受到出去的数据时,它将这些数据传输到指定的服务去。

既然谈到服务,必然会与服务的设计相关联,服务一般来说要是stateless的,这个与Spring之父在<Expert One-on-One J2EE Development without EJB>一书中强调的一致,服务层是要尽量保证无状态,这样不管是开发,维护,还是将来部署cluster,都是很有好处的,这里不多说.那么是stateless和statefull,这里我也是经过自己的学习和总结来整理的,里面会有很多我个人编程的经历联系,当然不一定正确,但至少可以帮助理解.所谓stateless指对服务的调用不依赖于前一个调用的结果,可以联想到C语言里的局部变量,每次进入C语言函数的时候里面的局部变量都是从头再来,这和C语言中的静态变量相对,静态变量则可以保存前一次调用处理的结果,从而影响下一次调用的逻辑.这种类似于static变量的形式影响服务实现逻辑的形式自然就是statefull了.那么我们就要思索,既然专家推荐了使用stateless了, 为什么还要statefull呢?我们知道每种技术都有出现的理由,专家告诉我们只是大多数情况这么做,并没有说不能怎么做,要看具体问题了.statefull一般用于要多步完成服务调用的时候,在每次调用之间的信息保存继续向下一步传递,就产生了会话信息.

  以上是本人的愚见,有不对,请专家给予指正,谢谢大家支持!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值