几千年来,巴别塔的故事一直是人类面对的一个核心的困境。为了交流和沟通我们人类创造出语言,但沟通与交流仍然存在障碍……相同语言之间的沟通依语境的不同,尚且存在巨大的鸿沟,不同语言之间更是让人坐困愁城。

在物质文明高度发达、人工智能都已触手可及的今天,程序员一样在面对这样的困境。我们的先辈基于那时的技术条件,基于那时的业务需求,映射性地逐步发展出FORTRAN/COBOL这样命令式的程序设计、C/PASCAL这样过程式的程序设计,到C++/JAVA这样的面向对象的程序设计,再到今天WebService这样面向服务的程序设计。于是各式各样的异构性层出不穷无所不在,硬件(CPU和指令集、硬件结构、驱动程序)、操作系统(不同操作系统的API和开发环境)、数据库(不同的存储及访问格式)都不尽相同,高级语言更是依赖于特定的编译器和操作系统API编程,它们彼此互不兼容,需要开发和运行环境的支撑。这样的异构性使得各种不同软硬件之间在不同平台不能互联互通,再加上网络协议和通信机制的不同,系统之间还不能有效地相互集成,如同不同族群之间互相比划着沟通。很难协同组织去面对挑战。

虽然语言不同,但人类需要表达的内核是相似相通的,同理,各种应用系统之间的许多基础功能和结构是有相似性的,它们提供的服务和功能是相似的。如果每次开发都从零开始,就像每次造一款汽车都去重新发明一次轮子,那无疑是可笑的。

于是,屏蔽各种异构性,实现某种标准的互操作,以实现复用(而不用每次都去发明轮子),通过松耦合,通过将具体的业务抽象,通过服务的表达和业务过程的原子化去架构规划整个业务流程,这个架构就是SOA。

——SOA就是这样的一个范式,用于组织和利用可能处于不同所有权范围控制下的分布式系统。

打一个形象的比喻,一个企业的最终服务就像是要安排各国大厨准备一桌顶级的菜肴,需要日本的生鱼片、清酒,法国的鹅肝、生蚝,德国的啤酒、肘子,中国的爆炒、佛跳墙,在这种情况下,你并不用再去学习各种语言和大厨们交流,只需要自己编排好上菜的顺序,在他们制作好的菜肴照片下写好交付时间,交给大厨,互相点头确认,按点去取菜,有统一的侍者规范上菜, 以保证最佳用户体验。每个大厨后面自成体系,团队内部用各自的语言交流,如同API后面的那个应用。而你编排的上菜顺序,就是流程驱动,服务员取菜就好比是API调用。

实际上,中国古代的四大发明中的印刷术,就是SOA思想应用的典范。没有印刷术之前,书籍需要手工抄写,因此效率低下,质量也不稳定,无法保证一致性。有了印刷术,出版效率和内容一致性提高了数量级!最初的印刷是刻板,这就是“复用”,如同软件通过组件的封装,达到重复和在不同场合使用的“复用”效果。但是,刻板印刷就是一个紧耦合,一块刻板只能印某一本书的某一页,其中具体的“字”无法复用,就如同软件技术中微软VB开发的com+组件就只能在windows环境中使用,无法与JAVA开发的EJB组件进行复用和编排,因为他们与开发环境和运行环境是紧耦合的,要在UNIX环境下使用,必须重新开发,相当于换书就得换版。而后的活字印刷就彻底解决了这个问题,文字和版面之间是松耦合,通过排版来实现一本书的印刷版面…….这又是数量级的跃升——如同我们可以封装服务,形成一个个API,通过服务编排的API联动来实现业务流程。

现在流行的所谓微服务,就是单个的活字,通过SOA串联成为文章(服务)。讲到这里,就必须提到schema。松耦合的活字印刷要想做好,每个字之间都需要遵循一定规范,比如字体,字符的大小,都要遵循一定的模式和契约。如同我们可以封装服务,形成一个个API,服务的共享通过API模式和契约(schema and contract)来协调,通过服务编排的API联动来实现业务流程。

schema就像是活字印刷里每个字,都应该有的固定规范,比如字体、大小、线条宽度等等,没有这个规范,有的字大、有的字小,印出来乱七八糟,而这恰恰是目前微服务领域的现状:基于XML的很多微服务根本没有schema!它们仅仅是山寨SOA。

综上所述,SOA是把复杂的业务系统切分成一块块小的独立系统,每个系统都叫一个服务,对外提供一组独立的API,然后通过API联动组织起完整的业务来。在每家企业发展的初期,通常一个或几个数据库表格就完成了业务,像大多数小企业那样。但当企业的业务系统复杂性膨胀到一定规模后,就必须考虑如何将各个子系统按照彼此独立的服务切分开来,不然以后会乱成一团麻,根本就无法管理。

这种联动,按照业务流程的要求是可以一步步串起来,提供无限的复杂度。这是企业内部的情况。那么,在外部呢?现在各种云服务厂商也有着无数的API,每一个都可以看成一个独立的服务。但如果把这些独立的服务也串起来呢,那就可以创造出一个个全新的应用。比如:有三个独立的单位,第一个单位是地方卫生系统,他的数据库保存的是该地某个人的医疗保险记录;第二个单位是某个医院,他的数据库中保存的是某个人在该医院所有的就诊记录;第三个单位是保险公司,他的数据库里保存的是某个人的参保记录。本来他们的系统互不相干,通过SOA的API联动,就可以很方便地根据一定条件从上述几个子系统中分别获取数据后,组织起一个完整的新业务流程。比如,如果某人以前参加过社保医疗保险,并且去年就诊次数不多于5次,同时前三年没有在保险公司购买过任何医疗保险,那么就可以给这个人提供50万的医疗保险,不然就少一点或者拒接保险申请,等等。

……可见,API联动的想象空间是无限的,但前提是开放!

因为每一个API就如同一个单独的音符,你稍微联动一下,它就能形成一个曲调;

如果你是一个大师,你就能写成一个恢弘的交响乐章;

如果你......进入CDIF......

 
 
 

SOA与基于CDIF的API的联动的更多相关文章

  1. API测试自动化——基于CDIF的SOA基本功能(实例篇)

    今天我们通过一些实例来体验一下API的自动化测试,感受一下基于CDIF的SOA的一些基本功能. 传统的测试工具在测试一个API的时候,必须手动填写这个API所需要接收的所有信息,比如一个查询航班动态的 ...

  2. 基于CDIF实现的——API在线自动化测试

    传统的测试工具在测试一个API的时候,必须手动填写这个API所需要接收的所有信息,比如一个查询航班动态的API,他接收两个输入字段,一个叫flight, 一个叫date,那么测试这个API的用户,需要 ...

  3. API的文档自动生成——基于CDIF的SOA基本能力

    当前,作为大部分移动app和云服务后台之间的标准连接方式,REST API已经得到了绝大部分开发者的认可和广泛的应用.近年来,在新兴API经济模式逐渐兴起,许多厂商纷纷将自己的后台业务能力作为REST ...

  4. Resumable.js – 基于 HTML5 File API 的文件上传

    Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...

  5. 基于.NET Socket API 通信的综合应用

    闲谈一下,最近和客户进行对接Scoket 本地的程序作为请求方以及接受方,对接Scoket 的难度实在比较大,因为涉及到响应方返回的报文的不一致性,对于返回的报文的格式我需要做反序列化的难度增大了不少 ...

  6. 基于ArcGIS JS API的在线专题地图实现

    0 引言     专题地图是突出而深入的表示一种或几种要素或现象,即按照地图主题的要求,集中表示与主题有关内容的地图.专题地图的专题要素多种多样,分类方法也多种多样,根据专题地图表现数据的特点可分为定 ...

  7. atitit.基于http json api 接口设计 最佳实践 总结o7

    atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...

  8. 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署

    部署流程概述 在微软的iis服务器上部署基于ArcGIS  Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...

  9. 基于百度地图api + AngularJS 的入门地图

    转载请注明地址:http://www.cnblogs.com/enzozo/p/4368081.html 简介: 此入门地图为简易的“广州大学城”公交寻路地图,采用很少量的AngularJS进行inp ...

随机推荐

  1. IE10去掉input的type=”text”输入内容时出现的小叉号(X)和type=”password”出现的小眼睛图标

    最近在做一个后台管理系统项目,遇到以下两个问题: 1.从IE 10开始,type="text" 的 input 在用户输入内容后,会自动产生一个小叉号(X),方便用户点击清除已经输 ...

  2. ICC_lab总结——ICC_lab2:设计规划

    PS:字丑,禁止转载!!! 首先先写出大概的流程,然后是一些教材的理论知识总结,最后是进行lab2的一些流程概述. 教材的理论知识总结主要是:数字集成电路物理设计学习总结--布图规划和布局 --> ...

  3. Liniux系统下目录的权限意义

    访问者及其基本权限 Linux系统内的文件访问者有三种身份,分别是: a) 文件和文件目录的所有者: u---User(所有权);b) 文件和文件目录的所有者所在的组的用户: g---Group;c) ...

  4. Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例

    日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试>讲了不为和不能两个状态,针对不为,只能自己调整心态了,而对于不能,本文会结合一 ...

  5. 第2章Zabbix基础进阶

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...

  6. MYSQL优化_MYSQL分区技术[转载]

    MySQL分区技术是用来减轻海量数据带来的负担,解决数据库性能下降问题的一种方式,其他的方式还有建立索引,大表拆小表等等.MySQL分区按照分区的参考方式来分有RANGE分区.LIST分区.HASH分 ...

  7. HTML5 的WebSocket

    认识HTML5的WebSocket

  8. android开发之-查看、编辑手机sqlite数据库文件-实测

    效果图: 1.开始——运行——输入cmd ,输入adb shell,错误:一是“adb不是内部命令或外部命令,也不是可运行的程序或批处理文件”,二是“error:device not found”. ...

  9. shell脚本编写步骤及其常用命令和符号

    1,什么是Shell     Shell 是kernel的一个外壳,是一个命令解析器,负责用户与内核的交互.2,Shell脚本     Shell脚本类似于批处理,可以方便的执行大量命令.3,编写sh ...

  10. Ubuntu16.04安装NVIDIA驱动时的一些坑与解决方案

    这几天在新购置的笔记本上部署工作环境,在安装NVIDIA驱动的时候遇到了不少坑,重装了很多次,在Ubuntu论坛以及其他资料源看了很多大牛的分析,最终终于解决了一个又一个问题,过程比较艰辛,所以决定写 ...