Corba、protocol buffer、SOA的区别 (转)
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也可以作为一种通信中间件,但是由于过于复杂很少应用到业务系统间的集成上。
Corba、protocol buffer、SOA的区别 (转)的更多相关文章
- protocol buffer和当年corba ,和现在SOA有啥异同点
CORBA是对象管理集团(OMG)的一个标准,使得不同语言编写的,运行在不同计算机上的能够协同工作.标准包括分布式计算的通讯协议(GIOP和IIOP),可映射到多种语言的接口描述语言(IDL),对象请 ...
- 从零开始山寨Caffe·伍:Protocol Buffer简易指南
你为Class外访问private对象而苦恼嘛?你为设计序列化格式而头疼嘛? ——欢迎体验Google Protocol Buffer 面向对象之封装性 历史遗留问题 面向对象中最矛盾的一个特性,就是 ...
- Google Protocol Buffer 的使用和原理[转]
本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...
- Google protocol buffer在windows下的编译
在caffe框架中,使用的数据格式是google的 protocol buffer.对这个不了解,所以,想简单学习一下.简单来说,Protocol Buffer 是一种轻便高效的结构化数据存储格式,可 ...
- Google Protocol Buffer 的使用和原理
Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...
- 【Google Protocol Buffer】Google Protocol Buffer
http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol Buffers ...
- google protocol buffer -2-.proto 定义规则
essage为主要关键字,类似于java中的class.定义简单message类型 SearchRequest.proto定义了每个查询请求的消息格式,每个请求都会有查询关键词query,查询结果的页 ...
- [翻译]Protocol Buffer 基础: C++
目录 Protocol Buffer Basics: C++ 为什么使用 Protocol Buffers 在哪可以找到示例代码 定义你的协议格式 编译你的 Protocol Buffers Prot ...
- 前端后台以及游戏中使用Google Protocol Buffer详解
前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更 ...
随机推荐
- 【LeetCode OJ】Binary Tree Level Order Traversal II
Problem Link: https://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/ Use BFS from th ...
- SOA的概念
面向服务的体系结构(service-oriented architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中 ...
- 启动运行下载gradle速度太慢,手动添加
启动运行下载gradle速度太慢,并且容易卡死(感谢群友ˋ狠ㄨ得意提供支持)---国内网络访问地址 我们经常运行项目的时候会需要进行下载gradle,不过由于网络或者和谐的问题经常下载需要花很长时间或 ...
- Opencv读取与显示图片
#include "stdafx.h"#include "cv.h"#include "cxcore.h"#include "hi ...
- Jquery 中的$(this) 和javascript中的this
this 是 JavaScript 中的关键字. $(this) 可以认为是用 jQuery 包装过 JavaScript 中的 this,包装后 $(this) 就会继承 jQuery 的方法. 本 ...
- 论文笔记之:Hybrid computing using a neural network with dynamic external memory
Hybrid computing using a neural network with dynamic external memory Nature 2016 原文链接:http://www.na ...
- 获取 .net framework 路径
要获取当前程序所使用的.netframework路径: System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(); ...
- 在Ext JS 6中添加本地化包
我在官方论坛发的帖子终于有人恢复了,也终于知道如何添加本地化包了.在Ext JS 6中,Ext JS属于经典工具包,而本地化是包含在经典工具包中,因而在app.json中,要添加本地化包,必须在cla ...
- 转载部长一篇大作:常用排序算法之JavaScript实现
转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...
- 【学】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)上
这个是3D旋转的进阶版,是一个类似与骰子的正方体.这个版本只有秒数的个位数,还没有写整个钟表,下面那个版本好好想想该怎么写 这个效果需要用到transform-style: preserve-3d. ...