From: http://www.zhihu.com/question/20279489

Google的protocol buffers?这个跟corba、soa没啥关系,不同层次的概念,没法比。
protocol buffer:一种序列化协议
corba:对象间分布式通讯协议
SOA:一种架构风格/方式

--------------------

CORBA是对象管理集团(OMG)的一个标准,使得不同语言编写的,运行在不同计算机上的能够协同工作。标准包括分布式计算的通讯协议(GIOP和IIOP),可映射到多种语言的接口描述语言(IDL),对象请求代理(ORB)以及相关服务,如生命周期,全局事务,持久性等。

SOA是以可互操作的服务的形式设计和开发软件的一系列原则和方法。SOQ是一种抽象的方法,和具体的技术无关,但是一般来说,涉及Web服务和企业服务总线(ESB)技术有关。下面比较SOA的异同时主要是指这两项技术。

  • Web服务是用来 支持网络中的机器对机器的互操作的软件系统。Web服务包括基于HTTP和XML的通信协议(SOAP)和服务接口描述语言(WSDL),以及服务查找接口(UDDI)
  • 企业服务总线(ESB)是用于设计和实现互交互软件应用之间的交互和通讯的软件体系架构模型。

Protocol Buffers(protobuf)
一种高效、可扩展的结构数据编码的方式。谷歌在所有的内部远程过程调用(RPC)和文件格式上
使用protobuf。protobuf可以将编程语言中的对象转换为可以在网络上发送的字节流。protobuf有自己的描述数据结构的语言,并提供一
个编译器将该描述编译成编程语言中的对象,目前支持C++,Python,Java几种语言。

共同点
三者之间的共同点有:

  • 都是分布式计算环境下的技术。
  • 都是跨平台、跨语言的技术。
  • 都解决了对象的序列化和反序列化问题。
  • 都是与通信协议有关,IIOP,SOAP, protobuf 是三种不同的通信协议。
  • 都可以用来实现远程过程调用(RPC)
  • 都有描述数据结构的语言,如IDL,WSDL+XML Schema,protobuf的描述语言。

不同点
三者之间的差异有:

  • 分布式计算环境不同,CORBA所处的时代是局域网的时代,而SOA和protobuf都是互联网和万维网的时代。互联网的时代更为开放。
  • 对象的序列化的结果,SOAP使用文本格式,而protobuf,IIOP使用二进制格式。三者经历了从二进制到文本再到二进制的过程。从IIOP的二进制到SOAP使用的XML,追求的是互操作性,而从SOAP的XML到protobuf的二进制,追求的是性能。
  • 作为通信协议,protobuf仅关心对象的序列化和反序列化,而IIOP和SOAP还关心底层的通信协议,RPC的语义等。
  • CORBA和Web服务都可以实现远程过程调用,而protobuf需要与其他技术I来实现RPC( http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns#RPC_Implementations )。基于protobuf的不同RPC实现很难互操作。
  • CORBA和Web服务都是标准,而protobuf是一个具体的技术实现。
  • CORBA和Web服务都是重量级技术 ,而protobuf是一个轻量级技术。

在CORBA和SOA之间的差异有:

    • CORBA是一种组件技术,而Web服务是一种服务技术。相比而言,有以下差异:
      • 服务是粗粒度的,而组件是较细粒度的,对象是更细粒度的。
      • 服务有业务的含义,而组件可以没有。
      • 服务是松耦合的,而组件是较紧耦合的,对象是更紧耦合的。
      • 服务通常是无状态的,而组件和对象是有状态的。
      • 服务是实例化的,带有配置和环境的,而组件是静态的,未部署运行的。
    • SOA更强调互操作性

-------------------------

可以拿corba和esb比较,但是不要拿corba和soa比较,SOA涉及的范围太广。

corba基于请求代理对象模型,搭建分布式架构框架,是和dcom类似的东西,通过IDL形成了和语言无关的一种分布式架构。更多的是应用到一个业务系统内的多层分布式架构设计。

而ESB企业服务总线,从传统的消息中间件到现在的服务集成,解决的是异构系统间的数据和应用集成问题。对于corba来讲只是esb可以集成的一种类型。

corba也可以作为一种通信中间件,但是由于过于复杂很少应用到业务系统间的集成上。

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(61)-如何使用框架来开发
  2. iOS_直播类app_HTTP Live Streaming
  3. FASTJSON
  4. iOS实现类似于歌词进度效果
  5. Train Problem I hdu 1022(栈)
  6. 海量数据处理利器之Hash——在线邮件地址过滤
  7. [ZZ+CH] Html5 canvas+js 时钟
  8. javascript闭包分析
  9. [LeetCode] 35. Search Insert Position 解决思路
  10. iOS安全攻防之反编译
  11. APPIUM 输入中文 之套路
  12. 一行代码搭建 Python 静态服务器
  13. Go-Ethereum 1.7.2 结合 Mist 0.9.2 实现众筹合约的实例
  14. java常用问题排查工具
  15. QPainter绘制遇到的小问题
  16. LINUX新建和增加SWAP分区
  17. [Postman]授权(11)
  18. 详解centos6和centos7防火墙的关闭
  19. MySQL(Innodb)索引的原理
  20. 2019.01.14 bzoj2648: SJY摆棋子(kd-tree)

热门文章

  1. Android Studio一些常用快捷键及快捷键冲突解决
  2. Android自定义图形shape
  3. 三天没有写题了,罪过!--Hash Table Start
  4. jQuery上传插件,文件上传测试用例
  5. SQLite数据库与Contentprovider(1)
  6. C#中的Attribute和Java中的Annotation
  7. DataGridView单元格显示GIF图片
  8. HW2.25
  9. jquery的ajax方法:ajaxStart()和ajaxStop()
  10. MFC单文档自定义扩展名及添加图标报Assertion错误
  11. Nokia N9开启开发者模式
  12. ElasticSearch 5.0.0 集群安装部署文档
  13. Python练习--普通函数与递归函数求阶乘
  14. ETCD集群安装实验
  15. Getting Started with Processing 第五章的总结
  16. NAS(Network Attached Storage:网络附属存储)
  17. Jquery右下角消息提示框
  18. 使用QQ互联登录应用
  19. translation exercise 3
  20. Elasticsearch之curl创建索引