SOA到底是什么?

 

  关于此的好的、坏的想必你都已经了解得很多了。本篇文章会抛开商家们的流言蜚语,用一种简单易懂的方式来阐述面向服务编程。这会是你所看到关于SOA的独一无二的介绍。
    在日常业务中有些事物并不时常改变,比如说美国加油站一直以来都在用加仑为单位销售汽油,餐馆依然使用菜单,牙科医生还是会每六个月就销售一次清洁用品。每种业务都会有一些方面不时常变动,而这部分往往占据了是业务的绝大部分。我们就称这些为核心业务功能(_core business functions)。
业务中的也存在一些常常变化的事物。价格、税率、货品分类、新产品、新市场策略、广告、新业务领域、新领域的客户等等。的确,为了生存,企业必定要变化,而且是快速的变化。不过,至关重要的是要那些变化影响不到核心业务功能。
软件开发人员早就明白变化快速的软件模块要与保持不变的部分相分离的道理。这项原则在独立的程序或系统之中有时称作是共同封闭原则。而运用在企业的信息管理系统之中就成了SOA
    SOA是把保持不变的核心业务功能剥离成一个个独立的服务的实践。这些服务是被多个展现层程序所调用的粉饰了的方法。展现层程序是那些容易变化的程序,用来展示数据给用户或是从用户处接收数据。
我们通过思考Internet上的商铺来帮助搞明白。客户通过浏览器来与商铺站点的展现程序相交互。展现程序解析了客户的操作,然后调用一些像是获取当前分类的数据或是为注册客户要求的服务。请注意,这些服务并不知道正在与web站点交互。他们就像是与厚客户端交互,或是3270的绿屏界面(3270IBM的一种大型机系统,其上应用程序常以绿屏的终端形式出现,因而常称作绿屏应用程序)。他们只是简单返回那些web系统可能会用到的数据,并将其格式标准化。
    SOA其实也就是这些了,其余部分就是一些细节。在最高的抽象层面上,SOA就是将频繁变化与不常变化的元素分离, 仅此而已。但为什么这一点会变得那么重要?
    让我们再来看看Internet上的商铺。它展现给用户一个分类,从而使得用户能够将物品移入或是移出一个购物车,并且最终实现订购。这些内容的展现却很善变,市场人士喜欢令其时常变化。比如说,他们可能会想把购物车比作是边框上的滚动栏。他们想要或多或少的在产品列表上的附加说明。他们想要不同的配色,字体和布局方式。确实他们想要appletsJStart ClientsAjax,以及无数其他的展现选择。可是所有的这些都与封装为服务的核心业务功能毫无关系。无论展现层的风吹雨打,这些获取分类以及注册流程却固定不变。这就是为何分离显得这么重要。它确保了信息处理在展现的飘摇不定中得到保护。
   不过展现并非唯一易变的,业务功能也是一样。再次考虑下我们的商铺,或许在销售产品中需要增加一种优质红酒。而销售烟酒则需要验证消费者的年龄。假定我们有了能提供验证的Service。而每当有烟酒订单的时候,这个Service就会调用到。呼叫此service的决定并非来自于展现层,当然也不属于业务。而是某种特定手续所需的业务过程。业务过程变动就像是兔子跳动那样躁动不安。如果业务成长了,他们会为其业务流程增加更多的步骤以及分支。处理过程中需要调用到的那些服务无序改变,可是处理的过程却需要。因此,我们就需要将业务过程从展现层以及业务service中分离出来。如果它出现在单一的程序中,Smalltalk语言对这样的分离有个称谓,就叫做Mode-View-Controller
    值得注意的是,这么多的技术都殊途同归的与SOA有着关联。这是因为SOA并非什么特定的技术,而是某种将优化的业务功能于易变的过程与展现相解藕的方法学。这就是企业软件的MVC
在我下一篇关于此的blog之中,我们会进入细节层面,并来关注这些服务是如何被构建的以及展现与过程的解藕是如何实现的。

(原文链接网址: http://blog.objectmentor.com/articles/2007/04/11/what-is-soa-really; Robert C. Martin的英文blog网址: http://blog.objectmentor.com/ 

作者简介:Robert C. MartinObject Mentor公司总裁,面向对象设计、模式、UML、敏捷方法学和极限编程领域内的资深顾问。他不仅是Jolt获奖图书《敏捷软件开发:原则、模式与实践》(中文版)(《敏捷软件开发》(英文影印版))的作者,还是畅销书Designing Object-Oriented C++ Applications Using the Booch Method的作者。MartinPattern Languages of Program Design 3More C++ Gems的主编,并与James Newkirk合著了XP in Practice。他是国际程序员大会上著名的发言人,并在C++ Report杂志担任过4年的编辑。

下面是一些网友的见解:  

SOA不仅仅是一个概念,更是一种分析的思路和方法。想搞清楚什么是SOA,我想,首先要搞清楚什么是S,也就是服务,什么是服务?从技术上服务是一个可以被调用的方法或者实体。但是业务上呢?比如,在银行做一个转账动作,细分下来,可能会有几个动作,一个是验证账户密码和有效性,另一个是执行转账,第三是打印相应的凭证,哪么,什么是服务呢?把三个动作合并起来也可以算是一个服务,三个单独分开也可以作为三个独立的服务被调用。怎样定义服务的粒度才是最重要的。这可能对编程人员来说可能感觉差不多,但是,对于整个架构师来说就很重要了,服务的粒度太粗,就会导致无法复用,也就失去了服务化的意义了,服务的粒度太小,整个项目的实施难度就会加大,甚至于变得无法实现。
    所以,对于一个新的系统来说,如果说是符合或者基于SOA的,就必须要提供一组服务的列表以及服务的规范,这是最重要的部分。可能在以前的设计方法上,可能就是直接设计功能和流程,很少考虑所谓服务的复用性和标准型。当然,这些东西在各个行业里面是没有一定的规范的,需要的是业务经验。也就是说,SOA系统里面,我们看到的应该是一组服务以及服务的调度流程。整个设计的方法发生了改变。
    所以,你要知道一个系统是不是真的SOA,首先问他有没有服务列表和服务的规范。至于这些服务能发布到什么ESB平台上,反而不重要了。个人所见,抛砖引玉。

                                                      —————    fantasyxx

 

 

SOA是一个面向服务体系架构,是一个用于整合业务流程和支持IT基础设施的框架,通过对其中作为安全、标准化的组件—服务的复用和组合来解决业务优先级的改变问题 。SOA作为IT的一个大的变化,业务驱动的价值诉求,非常清晰。通过总结和继承过去IT实践的成败得失,SOA将其首要目标定位为敏捷性,即通过建立一个灵活的IT来帮助业务快速应变,引领创新
    SOA能够集成企业的整个业务,并能动态的处理业务需求的变更。从企业系统使用角度,我们可以分为三个部分:potal平台、B2B (Business to Business)、设备(device)。portal平台是用于系统的一些展现和观察,包括系统更改和设置。用户可以根据自己的权限,实现个性化的操作(如:igoogle),它可以单独使用单个服务,也可以是处理某个业务流程。Portal应用平台是敏捷性的有效体现,它忽略了底层的应用技术和平台。B2B主要用于和合作伙伴进行业务交流,对于外部数据的交换,基于一种发现机制注册和存储(Registry & repository),它负责找到合适的服务,并且存储服务的功能描述,让web服务及时被发现部署,这就能保证系统根据业务需求寻找解决方案。设备可能来源于外边客户终端,有可能是内部的一些硬件应用,主要对数据进行手机和展现。按系统的应用层次分,SOA可分为四个主要层次:服务消费、业务流程、服务层(webservice layer)、应用技术层。其中主要给SOA提供敏捷支持的是处于服务层webservice,Webservice(或者web服务)是指可以通过使用标准的网络技术访问的网络接口,这个接口连接应用功能模块 。作为抽象的接口层,webservice 把执行特定语言代码的应用组件(application functionality)和平台(platform)相隔离。同时,这就意味着任何支持webservice 的语言都可以访问应用组件。
   webservice是基于WS-*( the second-generation Web services specifications)标准设计的。WS-*提供了寻址、消息的可靠性、服务的关联、策略、安全等一系列的规范。所设计出来的服务具有可重用性、可组合性、松耦合性等,这些特性给业务的敏捷性带来的根本的改变。

 

                                             ————wangqiangnju

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值