出处:http://kb.cnblogs.com/page/510698/

从纵向到横向

  传统业务系统的构建更多的是竖井式的纵向思想,这个主要是从单个业务系统孤立来看都是垂直应用。那么SOA架构的视角是从整个企业应用架构环境来看,思想的核心转变就是从传统的纵向独立构建模式转变为横向从底朝上逐层构建模式,在这个构建模式中首先是底层的资源层(独立的业务组件),然后是服务层,再上面才是应用层和门户展现层。这种横向思维模式的驱动力本身在端到端的流程支撑和分析,没有这种横向思考模式的转变很难构建出来真正企业全局意义上的SOA架构风格。

  从交换到共享

  为何很多企业做了多年的SOA最后仍然仅仅是一个接口平台或者数据交换平台,其核心的原因还是集成关注的是接口和数据交换,其本质思维还是点对点的思维模式。而共享则关注的是组件本身的可重用服务识别和能力开放,首先思考的是可重用的服务能力的开放而不是点对点的数据集成和交换。同时在转换到共享能力开放的时候,将从原来数据集成的时候数据多点落地,转化为新服务共享模式下的仅仅能力按需调用。业务间的协同和交互各个组件之间关注更多的是能力的消费和调用,而不是一定要底层同步和传递数据。这个思考的转变才能从大量的数据服务为主的集成模式,转化为数据服务+业务服务能力提供的服务共享模式。

  从系统到组件

  对于一个企业完整的应用架构来说,前面已经写过很多文章再强调整个企业就是一个大的业务系统,而不是孤立建设了多个业务系统。对于原来的业务系统本身已经转变为业务组件下层到资源层和服务层,而上层的应用本身仅仅是服务的组合,流程的编排。只有这种构建模式上层的应用才可能真正灵活的根据需求进行组合和组装,当业务流程和需求发生变化的时候仅仅是组件或服务的重新组合。

  对于一个新业务需求的产生,我们要看到有可能会产生新的业务组件,也有可能仅仅是底层服务的组合就能够实现新的业务需求或流程。这个的核心区别就在于,新增加的业务需求是否存在自己为Owner的核心业务对象产生,如果有这些核心业务对象产生很可能新需求本身会规划为一个新的业务组件。但是当一个业务需求本身不产生核心业务对象的时候,那么这个需求的满足很可能通过已有业务组件的提供的能力即可。例如我们在规划电商客户服务模块的时候,这个模块可能仅仅是已有的客户关系管理,订单管理,物流管理,财务管理等各个业务组件能力的进一步组合即可完成客户服务。从这个意义上说客户自服务本身不是业务组件,而是已有业务组件的服务组合和编排,形成的一个新的应用能力单元。

  

  从集成到集中

  可以讲这个思想是SOA和云思想的一个重要集成点,即对于遗留系统的集成和重构我们考虑的更多的是集成和已有的遗留系统服务能力的抽取。但是如果是全新的构建企业内部的完整应用架构,那么就必须要考虑很多共性的技术组件和基础数据本身就不属于任何一个上层业务系统,而是属于公共平台层的内容。既然属于平台层的内容就应该集中化的模式进行构建,然后再将能力开放和暴露出去。集中化的构建是云和平台的思想,而服务最终的开放和暴露是SOA的思想,两者得到很好的融合演进。

  从系统外转到系统内

  如果一个企业的SOA架构仅仅应用在业务系统间,那么就很难叫做完整的SOA化。只有将SOA的架构思想应用到业务系统内部的时候,才可能形成完整的组件化和服务化构建模式。即业务系统本身也是多个松耦合的业务组件构成的,业务组件本身才是最小的可以独立管理,独立进行设计,开发,测试,部署和运维的管理单元。组件之间本身交互需要通过粗粒度的服务进行以保证组件本身的高内聚性,由于组件本身松耦合并可以灵活的组合,那么原来规划的业务系统边界逐渐就没有存在的意义。只有这样从企业全局思考角度才能够形成一个完整的SOA参考架构模式。对于遗留系统集成这点比较难,但是对于全新的IT系统规划和建设就必须一开始采用这种模式和思考方法进行,否则即使应用了SOA中间件还是烟囱式的系统架构。

  从同步到异步

  单独将这点拿出来谈逐渐该点的重要性。其原因就是一个SOA架构我们更希望的是各个组件和模块之间的完全松耦合,任何一个模块出现故障不至于马上影响到其它模块,从这个意义上来看如果全部是同步服务模式则很容易出现问题,提供服务的模块宕机各个消费模块马上受到影响。而基于消息中间件的异步消息和服务模式可以较好的解决这个问题,即通过消息中间件的异步和重试机制真正实现了服务消费方和提供方之间的解耦,对于业务应用来说只需要保证最终的一致性即可。包括现在谈到的EDA时间驱动架构,CEP复杂事件处理很多都是异步消息模式思想的应用。即在定义服务的时候能够用异步模式尽量用异步模式以实现真正的解耦。

  在引入了异步模式后会出现一个新的问题,即需要我们异常日志的分析和记录清晰和全面,并提供后台异常信息的实时预警能力,否则将出现很多时候出现了服务消费和调用异常而没有及时发现的问题。

对SOA架构思想的一些说明(转)的更多相关文章

  1. 基于AgileEAS.NET企业应用平台实现基于SOA架构的应用整合方案-开篇

    开篇 系统架构的文章,准备在这段时间好好的梳理和整理一下,然后发布基于AgileEAS.NET平台之上的企业级应用架构实践,结合具体的案例来说明AgileEAS.NET平 台之上如何进行系统的逻辑架构 ...

  2. SOA架构设计经验分享—架构、职责、数据一致性

    阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DD ...

  3. 论SOA架构的几种主要开发方式

    转: http://blog.csdn.net/chenleixing/article/details/44926955  面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络 ...

  4. SOA架构设计(转发)

    阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DD ...

  5. 论SOA架构的几种主要开发方式【转】

           面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署.组合和使用.服务层是SOA的基础,可以直接被应用调用,从而有效控制系 ...

  6. [转]SOA架构设计经验分享—架构、职责、数据一致性

    阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DD ...

  7. [转]论SOA架构的几种主要开发方式

    面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署.组合和使用.服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理 ...

  8. 【转】SOA架构设计经验分享—架构、职责、数据一致性

      1.背景介绍       最近一段时间都在做系统分析和设计工作,面对的业务是典型的重量级企业应用方向.突然发现很多以往觉得很简单的问题变得没有想象的那么容易,最大的问题就 是职责如何分配.论系统架 ...

  9. 软件架构中的SOA架构有哪些特点?

    面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互. SOA是一 ...

随机推荐

  1. Centos6-7安装Python3.5以及SSL的编译安装,识别https

    Python3中无法导入ssl模块的解决办法 如果你发现在python3脚本运行过程中发现涉及到ssl模块都无法运行的情况下.那么需要进行如下步骤 第一步: yum install openssl o ...

  2. Java 基本数据类型最大值极限和最小值极限

    想知道 Java 基本数据类型最大值极限和最小值极限,写个小程序就很容易知道. 测试 Integer, Long, Float 和 Double 的最大值和最小值,代码如下: public stati ...

  3. Hadoop MapReduce任务的启动分析

      正常情况下,我们都是启动Hadoop任务的方式大概就是通过hadoop jar命令(或者写在shell中),事实上运行的hadoop就是一个包装的.sh,下面就是其中的最后一行,表示在其中执行一个 ...

  4. Linux的内存管理机制

    原文作者:技术成就梦想 链接:http://ixdba.blog.51cto.com/2895551/541355 一 物理内存和虚拟内存          我们知道,直接从物理内存读写数据要比从硬盘 ...

  5. python学习 (三十) python的函数

     1: 函数参数默认值 def method1(p1 = , p2 = ): // 函数有两个参数,并且都有默认值 return p1 + p2 print(method1()) print(meth ...

  6. USB驱动程序之概念介绍学习笔记

    现象:把USB设备接到PC 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有"驱动程序",为何能 ...

  7. 【UVA】10391 Compound Words(STL map)

    题目 题目     分析 自认已经很简洁了,虽说牺牲了一些效率     代码 #include <bits/stdc++.h> using namespace std; set <s ...

  8. [POJ] Palindrome

    Palindrome Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 62102   Accepted: 21643 Desc ...

  9. linux find中的-print0和xargs中-0的奥妙

    默认情况下, find 每输出一个文件名, 后面都会接着输出一个换行符 ('n'), 因此我们看到的 find 的输出都是一行一行的: 比如我想把所有的 .log 文件删掉, 可以这样配合 xargs ...

  10. requests模块session处理cookie 与基于线程池的数据爬取

    引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如: #!/usr/bin/ ...