对SOA架构思想的一些说明(转)
出处:http://kb.cnblogs.com/page/510698/
从纵向到横向
传统业务系统的构建更多的是竖井式的纵向思想,这个主要是从单个业务系统孤立来看都是垂直应用。那么SOA架构的视角是从整个企业应用架构环境来看,思想的核心转变就是从传统的纵向独立构建模式转变为横向从底朝上逐层构建模式,在这个构建模式中首先是底层的资源层(独立的业务组件),然后是服务层,再上面才是应用层和门户展现层。这种横向思维模式的驱动力本身在端到端的流程支撑和分析,没有这种横向思考模式的转变很难构建出来真正企业全局意义上的SOA架构风格。
从交换到共享
为何很多企业做了多年的SOA最后仍然仅仅是一个接口平台或者数据交换平台,其核心的原因还是集成关注的是接口和数据交换,其本质思维还是点对点的思维模式。而共享则关注的是组件本身的可重用服务识别和能力开放,首先思考的是可重用的服务能力的开放而不是点对点的数据集成和交换。同时在转换到共享能力开放的时候,将从原来数据集成的时候数据多点落地,转化为新服务共享模式下的仅仅能力按需调用。业务间的协同和交互各个组件之间关注更多的是能力的消费和调用,而不是一定要底层同步和传递数据。这个思考的转变才能从大量的数据服务为主的集成模式,转化为数据服务+业务服务能力提供的服务共享模式。
从系统到组件
对于一个企业完整的应用架构来说,前面已经写过很多文章再强调整个企业就是一个大的业务系统,而不是孤立建设了多个业务系统。对于原来的业务系统本身已经转变为业务组件下层到资源层和服务层,而上层的应用本身仅仅是服务的组合,流程的编排。只有这种构建模式上层的应用才可能真正灵活的根据需求进行组合和组装,当业务流程和需求发生变化的时候仅仅是组件或服务的重新组合。
对于一个新业务需求的产生,我们要看到有可能会产生新的业务组件,也有可能仅仅是底层服务的组合就能够实现新的业务需求或流程。这个的核心区别就在于,新增加的业务需求是否存在自己为Owner的核心业务对象产生,如果有这些核心业务对象产生很可能新需求本身会规划为一个新的业务组件。但是当一个业务需求本身不产生核心业务对象的时候,那么这个需求的满足很可能通过已有业务组件的提供的能力即可。例如我们在规划电商客户服务模块的时候,这个模块可能仅仅是已有的客户关系管理,订单管理,物流管理,财务管理等各个业务组件能力的进一步组合即可完成客户服务。从这个意义上说客户自服务本身不是业务组件,而是已有业务组件的服务组合和编排,形成的一个新的应用能力单元。
从集成到集中
可以讲这个思想是SOA和云思想的一个重要集成点,即对于遗留系统的集成和重构我们考虑的更多的是集成和已有的遗留系统服务能力的抽取。但是如果是全新的构建企业内部的完整应用架构,那么就必须要考虑很多共性的技术组件和基础数据本身就不属于任何一个上层业务系统,而是属于公共平台层的内容。既然属于平台层的内容就应该集中化的模式进行构建,然后再将能力开放和暴露出去。集中化的构建是云和平台的思想,而服务最终的开放和暴露是SOA的思想,两者得到很好的融合演进。
从系统外转到系统内
如果一个企业的SOA架构仅仅应用在业务系统间,那么就很难叫做完整的SOA化。只有将SOA的架构思想应用到业务系统内部的时候,才可能形成完整的组件化和服务化构建模式。即业务系统本身也是多个松耦合的业务组件构成的,业务组件本身才是最小的可以独立管理,独立进行设计,开发,测试,部署和运维的管理单元。组件之间本身交互需要通过粗粒度的服务进行以保证组件本身的高内聚性,由于组件本身松耦合并可以灵活的组合,那么原来规划的业务系统边界逐渐就没有存在的意义。只有这样从企业全局思考角度才能够形成一个完整的SOA参考架构模式。对于遗留系统集成这点比较难,但是对于全新的IT系统规划和建设就必须一开始采用这种模式和思考方法进行,否则即使应用了SOA中间件还是烟囱式的系统架构。
从同步到异步
单独将这点拿出来谈逐渐该点的重要性。其原因就是一个SOA架构我们更希望的是各个组件和模块之间的完全松耦合,任何一个模块出现故障不至于马上影响到其它模块,从这个意义上来看如果全部是同步服务模式则很容易出现问题,提供服务的模块宕机各个消费模块马上受到影响。而基于消息中间件的异步消息和服务模式可以较好的解决这个问题,即通过消息中间件的异步和重试机制真正实现了服务消费方和提供方之间的解耦,对于业务应用来说只需要保证最终的一致性即可。包括现在谈到的EDA时间驱动架构,CEP复杂事件处理很多都是异步消息模式思想的应用。即在定义服务的时候能够用异步模式尽量用异步模式以实现真正的解耦。
在引入了异步模式后会出现一个新的问题,即需要我们异常日志的分析和记录清晰和全面,并提供后台异常信息的实时预警能力,否则将出现很多时候出现了服务消费和调用异常而没有及时发现的问题。
对SOA架构思想的一些说明(转)的更多相关文章
- 基于AgileEAS.NET企业应用平台实现基于SOA架构的应用整合方案-开篇
开篇 系统架构的文章,准备在这段时间好好的梳理和整理一下,然后发布基于AgileEAS.NET平台之上的企业级应用架构实践,结合具体的案例来说明AgileEAS.NET平 台之上如何进行系统的逻辑架构 ...
- SOA架构设计经验分享—架构、职责、数据一致性
阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DD ...
- 论SOA架构的几种主要开发方式
转: http://blog.csdn.net/chenleixing/article/details/44926955 面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络 ...
- SOA架构设计(转发)
阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DD ...
- 论SOA架构的几种主要开发方式【转】
面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署.组合和使用.服务层是SOA的基础,可以直接被应用调用,从而有效控制系 ...
- [转]SOA架构设计经验分享—架构、职责、数据一致性
阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DD ...
- [转]论SOA架构的几种主要开发方式
面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署.组合和使用.服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理 ...
- 【转】SOA架构设计经验分享—架构、职责、数据一致性
1.背景介绍 最近一段时间都在做系统分析和设计工作,面对的业务是典型的重量级企业应用方向.突然发现很多以往觉得很简单的问题变得没有想象的那么容易,最大的问题就 是职责如何分配.论系统架 ...
- 软件架构中的SOA架构有哪些特点?
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互. SOA是一 ...
随机推荐
- python学习(二十四) 字符串格式化
1: Test 1 a = 'city' b = 'country' print(" aaa %s bbb %s " % (a, b)) result: aaa city bbb ...
- ALSA声卡笔记3--ASoC驱动重要结构体关系图
1.ASoC中重要的数据结构之间的关联方式 (1)Kernel-2.6.35-ASoC中各个结构的静态关系 ASoC把声卡实现为一个Platform Device,然后利用Platform_devic ...
- node+express+ejs搭建一个简单的"页面"
1.建立工程文件夹my_ejs. 2.首先利用npm install express和npm install ejs 下载这两个家伙.至于要不要设置成全局的,看习惯,我习惯性的下载到本项目中的文件夹中 ...
- java后台读取配置文件中key与value -----demo
public class ResourcesUtils { /* * @description:根据属性获取文件名 * * @param:propertyName文件的属性名 * * @return: ...
- Nginx 服务器开启status页面检测服务状态
一.Nginx status monitor 和apache 中服务器状态一样.输出的内容如: 第1列: 当前与http建立的连接数,包括等待的客户端连接:2 第2列: 接受的客户端连接总数目:20 ...
- Julia - 字符串判断函数
isascii() 判断是否是 ascii 码,返回 Bool 值 julia> isascii('a') true julia> isascii('α') false julia> ...
- Django中多种重定向方法使用
本文主要讲解使用HttpResponseRedirect.redirect.reverse以及配置文件中配置URL等重定向方法 本文使用了Django1.8.2 使用场景,例如在表单一中提交数据后,需 ...
- Embarcadero RAD Studio 2016 Product Approach and Roadmap
delphi 2016 路线图 http://community.embarcadero.com/article/news/16211-embarcadero-rad-studio-2016-pro ...
- ffmpeg源码分析四:transcode_step函数 (转4)
原帖地址:http://blog.csdn.net/austinblog/article/details/25099979 该函数的主要功能是一步完整的转换工作,下面看看源代码: static int ...
- HAVING COUNT(*) > 1的用法和理解
HAVING COUNT(*) > 1的用法和理解 作用是保留包含多行的组. SELECT class.STUDENT_CODE FROM crm_class_schedule class GR ...