你买不来SOA,只能设计自己的SOA。

SOA不是新东西

SOA没有引入新概念,它是个把现有概念和实践放到一起,用于特定需求集的范式。你甚至可以说SOA别的什么都 不是,就是将实用主义和头脑风暴运用到分布式系统上而已。

SOA的基本组成

  • 服务(递进关系)

基本服务(最底层)

组合服务,对基本服务的一个组合。

流程服务,对基本服务的一个配置。

  • 互操作性(Web Services为其一个实现)
  • 松耦合

对于松耦合,书中用了专门的一章来介绍松耦合,但是没有什么硬性规定和快速指南,我们必须根据特定的上下文环境和架构,作出适当的松耦合决策。

构建SOA需要考虑什么?

  • 基础设施:ESB为其一个实现(正要开始研究。。。);
  • 架构:用来加以限制;
  • 流程

业务流程建模(BPM),感觉很像工作流,但文中介绍说是比工作流大一点

服务生命周期

模型驱动的软件开发(MDSD),对于介个吧,感觉平时用EA建模,然后生成代码是不是就是这个意思呢?

SOA与事务

之前一直认为很好很强大的二阶段提交被作者说:在大型项目中,你会惊讶于二阶段提交使用的是如此的少。。

2PC是中间件被最为爆炒的特性之一。只要是对中间件的评估,是否支持2PC的问题就会被提出。但是所有后端系统都必须支持它,所以它带来了一些编程工作量,并且绑住了一些资源。主要的问题在于所有的系统都必须在线,而且,直到更改在最后的系统上完成之前,所有的系统都必须提供资源。耦合度相对较大。

既保证总体一致性,同时耦合程度也更松的方法是补偿。对于补偿的使用还没有详细研究(已安排下去),这里只说一下它的优缺点。优点是,对系统的更新不必同步进行(当更新有的后端系统时,它们甚至可以不在线)。缺点是你必须显式的提供和调用服务,回滚之前调用的服务的影响,或者,你必须提供程序用于手动错误处理。(BPEL是Web Services 的流程执行语言,它直接支持补偿~)

SOA与安全

SOA需要的不只是点到点的安全,而是端到端的安全,对于安全,将安全当作服务进行引入,不失为一个上好的决策。

对于SOA的一些个人看法

        SOA中的服务个人感觉很像经典三层中的业务逻辑层,只不过被赋予了远程调用等其它概念而已。

        可否用工作流来代替复杂业务逻辑层的编写?但是事务要怎样控制(BPEL中把持补偿)?权限又该怎样控制?

        是否需要对所有非查询方法都要设置幂等?什么样的方法才需要设置幂等?

        SOA的设计思路是:从大处考虑,从小处着手,迭代设计。但是没有接触过SOA的系统,对SOA的概念理解远不如OO的系统理解深刻。对于这个“小”着实有点难把控。。。

        ESB作为一个基础设施的存在,对于它的研究或许能够对SOA的思想进一步理解吧。

        还有就是协议驱动和API驱动,这两个名词其实整的人很蛋疼……

        最后,再发表一下个人看SOA一本书的整体心灵感受吧:
        一个一个的中国汉字都认识,可是合到一起,就不知道说的是什么了,对于对汉字理解能力不强的我来说,真是一个恶梦。。。

SOA,不看你永远不知道的事的更多相关文章

  1. Java你可能不知道的事(3)HashMap

    概述 HashMap对于做Java的小伙伴来说太熟悉了.估计你们每天都在使用它.它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作为它的key呢?带着 ...

  2. ES6 你可能不知道的事 – 基础篇

    序 ES6,或许应该叫 ES2015(2015 年 6 月正式发布),对于大多数前端同学都不陌生. 首先这篇文章不是工具书,不会去过多谈概念,而是想聊聊关于每个特性 你可能不知道的事,希望能为各位同学 ...

  3. Spring中你可能不知道的事(一)

    Spring作为Java的王牌开源项目,相信大家都用过,但是可能大家仅仅用到了Spring最常用的功能,Spring实在是庞大了,很多功能可能一辈子都不会用到,今天我就罗列下Spring中你可能不知道 ...

  4. java你可能不知道的事(2)--堆和栈

    在java语言的学习和使用当中你可能已经了解或者知道堆和栈,但是你可能没有完全的理解它们.今天我们就一起来学习堆.栈的特点以及它们的区别.认识了这个之后,你可能对java有更深的理解. Java堆内存 ...

  5. overflow:hidden 你所不知道的事

    overflow:hidden 你所不知道的事 overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解. ...

  6. java你可能不知道的事(2)--堆和栈<转>

    在java语言的学习和使用当中你可能已经了解或者知道堆和栈,但是你可能没有完全的理解它们.今天我们就一起来学习堆.栈的特点以及它们的区别.认识了这个之后,你可能对java有更深的理解. Java堆内存 ...

  7. Java单例你所不知道的事,与Volatile关键字有染

    版权声明:本文为博主原创文章,未经博主允许不得转载. 如果问一个码农最先接触到的设计模式是什么,单例设计模式一定最差也是“之一”. 单例,Singleton,保证内存中只有一份实例对象存在. 问:为什 ...

  8. Java你可能不知道的事系列1

    概述 本类文章会不段更新分析学习到的经典面试题目,在此记录下来便于自己理解.如果有不对的地方还请各位观众拍砖. 今天主要分享一下常用的字符串的几个题目,相信学习java的小伙伴们对String类是再熟 ...

  9. C++学了这么多年,你仍不知道的事

    C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...

随机推荐

  1. Delphi 常用属性说明(超长)

    Delphi组件的常用事件Onclick——当单击时触发这个事件中的代码Onchange——当改变该组件内容时触发其中的代码Oncreate——当创建时触发这个事件中的代码Onclose——当关闭的时 ...

  2. perl5 第十一章 文件系统

    第十一章  文件系统 by flamephoenix 一.文件输入/输出函数  1.基本I/O函数    1)open函数    2)用open重定向输入    3)文件重定向    4)指定读写权限 ...

  3. HDU 2393 Higher Math

    #include <cstdio> #include <string> using namespace std; void swap(int& a,int& b ...

  4. Sicily-1443

    一.      题意: 模拟队列的操作,按优先级pop.如果有元素pop,则其他在队列里面的元素的时间都要加1.如果队头的元素因为优先级不够高而要push回队列的时候,所有元素的时间都不用改变. 二. ...

  5. iOS 项目中的NSNotification简单使用

    iOS中NSNotification的简单使用 好久没有写过博客了,总是遇到问题查一下,今天查的又是一个老问题,想了想,还是记录一下!今天在项目开发中遇到一个配置及时性处理的问题,想了想之后决定用通知 ...

  6. HDU 4548 美素数(打表)

    HDU  4548  美素数(打表)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88159#problem/H 题目 ...

  7. java注解入门(含源码下载)

    注解(Annotation)是从jdk1.5开始增加的特性.学习注解能够读懂框架的代码:让编程更加简洁,代码更加清晰. 注解概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法. ...

  8. IOC容器初始化——BeanDefinition的Resource定位

    以编程的方式使用DefaultListableBeanFactory时,首先定义一个Resource来定位容器使用的BeanDefinition.这是使用的是ClassPathResource,意味着 ...

  9. PHP学习笔记13-操作Cookie

    PHP会话管理图: 创建index.php: <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/7/1 * ...

  10. Oracle中的EXCEPTION

    Oracle系统预定义的异常 比如:SELF_IS_NULL.VALUE_ERROR.ZERO_DIVIDE等Oracle中自带的异常类型 使用方法: DECLARE V_Result ); BEGI ...