多年以来,我们对SOA 原则这一主题以及什么会促进SOA成 功,什么会阻碍SOA实施等内容都进行过很多相关的报道。从初期的狂热宣传,到大规模企业的实施、Web服务以及较近期REST带来的影响力。我们可以通 过这7年来的文章,对SOA的演进进行追溯。然而,在此期间的成功案例却通常少之又少,据一些数据表明仅有20%的SOA项目获得了成功。其中包括了CISCO和 eBay等几个著名的成功案例。

InfoQ英文站编辑Jean-Jacque Dubray不仅帮助我们追溯了SOA在那段岁月的发展,也分享了不少他的个人观点。他对SOA起到了积极的影响并基于SOA原则部署过很多成功的系统。通过基于这些经验背景的思考,Jean-Jacques(JJ)最近在博客中发表了他所信奉的四条促进SOA成功的原则:

1. 服务接口应该与服务实现解耦

  1. 所有业务逻辑应该标准化
  2. 变更一个服务应该是非常容易的
  • 在服务消费者准备就绪之前,服务变更对消费者来说应该是不可见的
  • 当服务消费者准备就绪之后,服务变更应该是易于消费的
  1. 服务版本控制应该基于兼容性

JJ认为只要你在所有设计和开发阶段一贯地遵守这些原则,成功的机率将会大大提升。虽然这些原则相对来说比较容易理解,但遗憾的是他没有对所列举的这些原则进行更详细的阐述。对于“服务接口”,JJ补充道:

大部分人在SOA中遭遇了失败,因为他们认为服务是一种抽象,就好比OO中的“类”。但实际上服务接口是一种契约,通过它可以暴露和控制变更。 [...]不要在你的服务边界(service boundaries)上耗费太多精力,应尽可能的将更多的精力花在构建最好的服务接口上(也就是指有效地管理变更)。

然而,JJ所做的工作还涉及到围绕SOA相关的其他一些领域,这些领域在过去的时间里也曾引起了很多人的关注。其中包括治理(governance),对此他建议道:

不要“过度治理”,治理应该保持最小化并且是基于短期内(3-6个月)的合乎情理的共识。而数据治理(Data Governance)则更为重要,因为你的信息模型发生的任何变更通常都会对服务接口造成影响。

松耦合通常作为成功SOA的核心组成部分而被人们广为称道,对于如何实现松耦合,JJ建议道:

对消费者交互环境的管理不涉及接口背后的业务逻辑实现。在接口消费者中,不出现重复的涉及对各类记录系统状态管理的业务逻辑。

服务复用通常是SOA中另一个被认为非常重要,然而也很难实现的领域。早在2009年的时候,我们就援引过Burton的Richard Watson曾经说过的一段话:

一个服务可能永远不会被复用,但是我们仍然可以通过其他方式来创造价值:通过适应性和低成本的维护来减少冗余;通过对既定策略的贯彻执行来提升安全 性和依从性,以上列举了一些我们期望得到的其他成果。而过于专注在复用上将会蒙蔽我们的双眼,从而导致我们无法看到这些其他的成果。

而JJ也赞同这一点:

没有人会指望今天构建的一个服务会在从现在开始的三年内被持续的新消费者们不断消费,这是荒唐的想法。如果你想以这种方式进行复用,那么你迟早会失 败并最后得出一个例如“SOA不起作用了”这样的愚蠢结论。对于SOA(在现实世界中也是如此)的复用,它是以另外一种方式进行的:并不是一个新的消费者 复用一个老的服务;几乎都是一个服务的新版本(变更以支持新消费者)在不打断老消费者的情况下被消费者复用。

事实上在2009年的文章中,JJ曾对此有过以下评论:

大多数的人仍然无法理解的是:在SOA中的“复用”并不是人们通常听到的“复用”,对它们的理解是不一样的。在SOA中的复用是向前复用 (forward reuse),而例如我今天早上听到的复用则是向上复用(upward reuse)。在SOA中,复用意味着为新消费者构建的服务新版本并不会打断现有的老消费者。对于认为某人能在今天设计出一个服务并且可以在两年内被一直 “复用”这种想法,很大程度上来说是个幻想。在SOA中,较老的消费者可以“复用”那些为最新消费者而创建的服务新版本。

正如最初所提到的,所有这些原则和思想都受到了JJ在这个领域中多年经验的影响。其他人对于这些问题又是怎么认为的呢?你愿意也来分享一下你的经验吗?

转载于:https://www.cnblogs.com/dushu/archive/2013/04/16/3024081.html

基于经验的SOA成功原则相关推荐

  1. 基于AgileEAS.NET SOA 平台SAAS架构技术的开源分销ERP系统-SmartERP.NET下载配置说明

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  2. 网络云存储技术Windows server 2012 (项目十 基于NTFS权限(ADLP原则)的文件共享服务的配置与管理)

    网络云存储技术Windows server 2012 (项目十 基于NTFS权限(ADLP原则)的文件共享服务的配置与管理) 目录 前言 一.项目背景 二.项目实训题 三.环境准备 四.操作步骤 1. ...

  3. 量化择时:基于经验模态分解的希尔伯特-黄变换(二)算法

    量化择时:基于经验模态分解的希尔伯特-黄变换 part2部分是算法的介绍,抛开代码部分,其实就是所有人都能看得懂字面解释 Part2算法 在了解了基础的数理知识和学习了将实信号转换为复信号的处理方法之 ...

  4. erp框架 saas_基于AgileEAS.NET SOA 平台SAAS架构技术的开源分销ERP系统-SmartERP.NET下载配置说明...

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  5. 自然用户界面设计:NUI的经验教训与设计原则

    <自然用户界面设计:NUI的经验教训与设计原则> 基本信息 原书名:Brave NUI World:Designing Natural User Interfaces for Touch ...

  6. 量化择时:基于经验模态分解的希尔伯特-黄变换(一)数理

    量化择时:基于经验模态分解的希尔伯特-黄变换 这部分内容打算分成四个部分,分别是数理.算法.实操和机器学习部分,做完一个part就发一个part. Part1数理 将时间序列的股价日指数转换为信号形式 ...

  7. 4.4基于经验的测试技术

    在应用基于经验的测试技术时,测试用例来自测试人员的技能和直觉,以及他们在类似应用和技术方面的经验.这些技术有助于识别其他更系统化的技术难以识别的测试.根据测试人员的方法和经验,该技术可以实现的覆盖率和 ...

  8. 与中石油分享SOA成功实践

    中国石油天然气集团公司的"生产运行管理系统"系统是一个地域上覆盖了中国石油十大油田,业务领域涵盖了物理勘探.钻井工程.测井.录井.试油和井下作业等专业应用的信息管理系统.在这个项目 ...

  9. SOA 设计原则和 Web 服务中的数据传输

    SOA 被翻译为面向服务架构,它应该是创建从自治服务生成系统的一个架构方法,它的目的是更方便地进行集成. SOA是Web 服务的一个自然延伸,因为Web 服务只是解决了异构系统之间的互操作,并没有降低 ...

最新文章

  1. 实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序...
  2. 数据库连接池原理及常用连接池介绍
  3. traceroute命令原理
  4. python udp通信_Python网络编程(三)
  5. 半天的成果,已经很快了,还有方案实现过程
  6. C语言获取系统时间的几种方式 !
  7. SpringBoot学习(一)初识SpringBoot、第一个SpringBoot程序
  8. 大学生计算机考试系统软件,我爱C”《大学计算机基础》考试系统学生端软件使用说明.doc...
  9. Spring 事务扩展机制 TransactionSynchronization
  10. gRPC Name Resolution
  11. R统计绘图-VPA(方差分解分析)
  12. Scratch中做一个简单迷宫小游戏,值得您收藏!
  13. 数据库服务Amozon DynamoDB(入门分享)
  14. 大数定律和中心极限定理(未完成)
  15. Android实现有声计算器代码,android studio实现简单的计算器(无bug)
  16. Screen exposed for less than 1000 ms. Event not sent. time:
  17. 13-MyBatis 使用了哪些设计模式?在源码中是如何体现的?
  18. 欧美IT外包的几种业务模式
  19. 平面设计与UI设计有什么不同之处
  20. Qt5学习 模仿qq音乐播放器样式(2)——点击动画效果+歌词颜色变换展示

热门文章

  1. http://wenku.baidu.com/view/63e7b8270066f5335a812142.html
  2. XML 命名空间(XML Namespaces)介绍以及节点读取方法
  3. Gnome Subtitles:字幕编辑器
  4. Dateset学习笔记
  5. html元素排序,HTML中的table里面的元素排序
  6. java kafka api_kafka java API的使用
  7. 安卓2.2系统上网设置
  8. 《玩转git三剑客》笔记
  9. Socket 阻塞模式和非阻塞模式
  10. Robust 源代码分析之gradle-plugin