面向服务架构的一些思考

  在谈面向服务架构之前,首先来看看什么是服务。常谈的业务组件,业务方法或操作是否都是服务?真正的服务必须满足两个条件,一个服务本身是能力供给,必须有外界的需求;一个是服务本身是可复用或重用。一般来讲服务应该是可重用的任务,这种任务可以是业务方面的操作组合,也可以是一种技术能力。

  面向服务的重点就是一切以服务为中心,从服务识别,服务分析,服务设计,服务开发和服务上线使用一切都是以服务为中心。但是要注意到面向服务本身不是在面向结构或面向对象基础上的一个新方法,而是对面向对象和组件化思想的提升。

  面向服务架构很容易被理解为一种技术架构,而SOA本身更多的是一种架构风格,这种架构风格和传统软件开发最大的不同是更加体现了业务和流程驱动IT的思想,体现了IT系统组件化和服务化构建思想,体现了由于服务本身可以重用,可以通过服务的组合和编排来满足业务的实现。SOA作为一种架构风格,使需求方和供给方有了共同的语言和价值约定;SOA作为一种架构风格,使服务不在单纯的是一种技术能力,而更多的是一种业务能力和IT智慧资产。

  看看维基百科上SOA的完整定义:

A service-oriented architecture (SOA) is an architectural pattern in computer software design in which application components provide services to other components via a communications protocol, typically over a network. The principles of service-orientation are independent of any vendor, product or technology.[1]

A service is a self-contained unit of functionality, such as retrieving an online bank statement.[2] By that definition, a service is a discretely invokable operation. However, in the Web Services Definition Language (WSDL), a service is an interface definition that may list several discrete services/operations. And elsewhere, the term service is used for a component that is encapsulated behind an interface. This widespread ambiguity is reflected in what follows.

Services can be combined to provide the functionality of a large software application.[3] SOA makes it easier for software components on computers connected over a network to cooperate. Every computer can run any number of services, and each service is built in a way that ensures that the service can exchange information with any other service in the network without human interaction and without the need to make changes to the underlying program itself.

  一般说SOA是一种架构方法,将单片式应用打破,分解为离散的、自治的业务服务,利用标准提升他们的互操作性,从而可以更好地共享、重用和组装,快速构建复合的应用从而满足业务需求的变化。在这里面有两个重点,一个是要找到可重用的服务,同时这些服务满足离散,自治和无状态等基本条件;其次是服务本身可以组合和编排,以满足流程整合的需要。

  第一步找服务的过程,是系统分析和建模从顶向下得过程,要充分体现流程驱动IT的实现,通过流程的分解,业务建模和数据建模,识别业务组件和业务能力,通过跨系统或组件的流程交互识别可重用的服务。最终形成可重用的服务智慧资产库。第二步服务的组装和编排则更多是从底向下得过程,对于原子服务我们可以组合为组合服务,对于业务服务我们可以通过组合和编排形成流程子服务和流程服务;最终使可重用的服务满足流程交互的需要。

  在跨系统的流程集成和SOA应用集成过程中,高端建模重点则是EA企业架构或TOGAF方法论,从业务架构,数据架构和应用架构入手,逐层分解和展开分析来得出总体的跨业务系统流程交互和集成架构。而对于系统内的SOA应用,则重点仍然是业务组件识别,通过组件间交互得到的服务组件和服务识别,可重用的服务组件单元的提取。

  那么对于应用系统本身基于SOA架构又如何理解?如果说一个应用系统基于SOA架构,我们至少需要看到该应用系统有明确的业务组件和服务组件定义,而且组件之间满足高内聚松耦合的要求;其次对于组件间的交互都通过服务的方式进行,或者至少预留了服务接口;其次内部这些服务可以灵活的重用或组合。至于是否有内部的ESB总线反而不是重点,但是我们看到如.NET开发内部的IOC机制基本也基于内部的软总线思路,实现良好的互操作性和位置透明。

  SOA另外一个核心是实现两个层面的解耦,一个是业务和技术的解耦,业务实现不再依赖于某种特定的技术或语言,只要满足业务标准都可以来实现SOA和服务,正是因为业务和技术松耦合,技术的变化对业务影响越小。另外一个方面则是操作方法和业务数据实体的解耦,对于操作方法我们后续可以通过WSDL文件定义,而传输的数据实体又可以通过XSD定义,对于RUP开发方法中,类似于控制类和实体类的分离。

SOA有一些基本特性,在这里再做一下简单解释:

  • 粗粒度:仅仅暴露需要暴露的东西,方法和传输都简单,但是实现方法的内部过程则很复杂,业务规则或逻辑全部隐含在业务组件内部,不需要暴露。
  • 无状态:每次服务调用完成即完成,不会存储任何全局状态信息,这也是WebService的特性。
  • 互操作:包括位置透明,通过ESB和UDDI,只需要关心服务目录,而不需要关心具体提供服务的源系统。
  • 标准化:有精确的服务契约和服务接口,这也是在SOA方法论中在服务识别和服务分析阶段重要输出。

  如果说要举个简单的例子来说明SOA,可以用活字印刷术来说明:用于印刷的3000-4000个字即是最基础的原子服务,有了这些原子服务我们很容易通过这些活字去排版整篇文章。文章内容有调整我们也只是需要调整这些原子服务的顺序。但是如果全是单个汉字排版工作量还是很大,所以再向上就会出现词组或常用短句,这些即是组合服务,这样排版速度可以增加,不过可以看到词组或短语的可重用程度相较单个汉字的降低了。所以越到组合服务或流程服务,复用越困难,但是要是能够复用却能大大提升效率。

时间: 2024-10-09 08:43:23

面向服务架构的一些思考的相关文章

领域驱动设计的面向服务架构

[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店 一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这对于一些刚刚接触领域驱动设计的朋友可能会非常迷茫,从而觉得领域驱动设计很难,很复杂,因为学习中要消化一个整个案例的知识,这样未免很多人消化不了就打退堂鼓,就不继续研究下去了,所以这样也不利于DDD的推广.然而本系列

SOA面向服务架构简述

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在上篇中我们简单谈了下架构设计中服务层的简单理解,在这里我们将继续服务层的架构,在本节我们将重点在于分布式服务.在分布式系统中表现层和业务逻辑层 并不处于同一物理部署,所以我们必须存在分布式服务,以契约方式发布于网络中,我们的关注点在于服务,面向服务编程,这种通过组合业务逻辑暴露可用服务的架构叫做面向服务架构(SOA). SOA强调一个松耦合,基于宏服务的架构,通过契约暴露给服务消费者可用的

OSGi——面向服务架构规范简述

OSGi——面向服务架构规范简述 去年我们组要开发一个新的产品,在讨论产品架构路线的时候,美国的架构师向大家征集了架构设计思想(我推荐了SCSF),有一位工程师向他推荐了OSGi.以前我还没有听过OSGi这玩意,虽然我参加工作后,现学了Java和Flex,但非常菜.在工作之前我用了4年的.NET.接触了OSGi后,发现它是一个面向Java的服务规范,还没有一个像样的面向.NET的框架(有个EgeyeAddIn,据说兼容OSGi,我看了源代码了,觉得它离OSGi较远http://www.codep

为什么说社会形态影响着SOA面向服务架构思想?

产品将面对的社会形态 新研发的平台产品所面临的问题是:面对激烈的商业竞争形势,使大多数企业都面临着增长业绩.提高生产率和降低成本的压力,而产业的趋势是业务方法不断变化,特别表现在企业重构和解构这两个特征上. 企业重构:传统上的企业管理是一种层次化的垂直结构,打造了一个具有固定业务.确定交互.执行高效的模式.但是当竞争形势和市场需求发生变化的时候,它就与动态业务的趋势相冲突,阻碍了快速反应时间.这种外部压力迫使企业重新定位,向水平集成的业务流改变,这就形成了企业重构的趋势. 产业解构:在企业重构中

[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店

一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这对于一些刚刚接触领域驱动设计的朋友可能会非常迷茫,从而觉得领域驱动设计很难,很复杂,因为学习中要消化一个整个案例的知识,这样未免很多人消化不了就打退堂鼓,就不继续研究下去了,所以这样也不利于DDD的推广.然而本系列可以说是刚接触领域驱动设计朋友的福音,本系列将结合领域驱动设计的思想来一步步构建一个网

案例分析之面向服务架构

案例分析之面向服务架构 Table of Contents 1 案例分析之面向服务架构 1.1 定义 1.2 模型 1.3 SCA构件 1.4 webservice 1.4.1 WSDL 1.4.2 UDDI 1.4.3 SOAP 1 案例分析之面向服务架构 1.1 定义 W3C:SOA是一种应用程序体系结构,在这种体系结构中,所有功能都定义为独立的服务,这 些服务带有明确的可调用接口,能够以定义好的顺序调用这些服务形成业务流程. SOA的特征:松散耦合.粗粒度.标准化接口. 1.2 模型 在S

面向服务架构~本地轮训服务占用内存过高的问题

对于WEB程序来说,它寄宿在IIS提供的w3wp进程中,这个进程占用的内存大小和你的应用程序的使用有个直接关系,你的程序写的标准,它占用内存就相对低,你的程序写的伪范规,该释放的东西不让系统释放(有些对象GC回收不了),就会造成内存使用过高的情况,对于32位系统来说,最高1.6G,超过后,进程自动挂掉! 对于本地服务来说,一般我们采用windowService,windowform来承载,它会自己有一个进程,而最近,我的windowService占用内存过高的问题真的出现了,不到5分钟,进程已经

面向服务架构SOA

SOA架构即面向服务架构. 面向服务的体系结构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来. 接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互. 这种具有中立的接口定义(没有强制绑定到特定的实现上)的特征称为服务之间的松耦合.松耦合系统的好处有两点,一点是它的灵活性,另一点是,当组成整个应用程序的每个服务的内部结构和实现逐渐地发生改变时,

中台服务架构的一点思考

中台服务架构的思想是伴随着企业规模不断扩大.业务多元化而形成的.如阿里巴巴将集团20多个核心业务中公共的.通用的业务以服务的方式沉淀到了共享业务事业部,这套共享服务体系为阿里巴巴集团的核心业务赋能,真正发挥服务重用的价值. 说到中台服务就需要提及SOA (面向服务的架构).百科上关于SOA的介绍如下: SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得