对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是一 ...
随机推荐
- ElasticSearch所使用的倒排索引的思想和使用场景
背景: 在关系数据库系统里,索引是检索数据最有效率的方式,.但对于搜索引擎,它并不能满足其特殊要求: 1)海量数据:搜索引擎面对的是海量数据,像Google,百度这样大型的商业搜索引擎索引都是亿级甚至 ...
- 使用nginx反向代理进行负载均衡
在这里简单记录一下,我使用Nginx反向代理进行负载均衡,将请求发送到两台tomcat上. 首先解压两个tomcat,解压Nginx,一台tomcat配置可以不用动,但是我为了更方便只是将它的端口改为 ...
- 自动化运维工具Ansible的简单使用
一 基础使用 1. 简介ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置. ...
- String s;和String s=null;和String s="a";有什么区别?
String s;和String s=null;和String s="a";有什么区别? 针对这三种情况,使用out.println(s);的时候,第一个会出现异常,第二个会输 ...
- microtip Tooltip工具提示样式
最近开发项目,想增加滑动提示文字,类似img alt和i的title,但是效果都不是很理想,当然jq也有,但是用起来比较繁琐,使用不是特别方便 于是在github上看到了一个不错的库: https:/ ...
- [转] geochart 地图控件官方示例
<html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'>&l ...
- 【微信小程序常识】如何绑定微信小程序体验者
转自:https://blog.csdn.net/futruejet/article/details/53223826 一.操作步骤 (1)打开微信小程序公众平台->点击右边菜单[用户身份]-& ...
- 教你用一行Python代码实现并行(转)
教你用一行Python代码实现并行 本文教你通过一行Python实现并行化. Python在程序并行化方面多少有些声名狼藉.撇开技术上的问题,例如线程的实现和GIL,我觉得错误的教学指导才是主要问题. ...
- 深入理解Java线程池
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁 ...
- MyBatis初识(通过小实例清晰认识MyBatis)
1.MyBatis框架: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...