rpc、socket、mq

关于RPC与MQ异同的理解

相同:
1、都利于大型系统的解耦;
2、都提供子系统之间的交互,特别是异构子系统(如java\node等不同开发语言);
不同:
1、RPC侧重功能调用,因此多半是同步的;
备注:也有基于MQ上实现RPC的,这样的话就是异步的,MQ本身,如rabbitMQ也有提供实现RPC的能力;
2、MQ 的使用,一方面是基于性能的考虑,比如服务端不能快速的响应客户端(或客户端也不要求实时响应),需要在队列里缓存;
另外一方面,它更侧重数据的传输,因此方式更加多样化,除了点对点外,还有订阅发布等功能。
备注:之前在政府交换平台项目中,源数据库向目标库同步数据,底层用的就是MQ;

RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用远程另一套机器上的子程序,就像LPC(本地过程调用).
越底层,代码越复杂,灵活性越高,效率越高; 越上层,抽象封装的越好,代码越简单,效率越差. Socket和RPC的区别再次说明了这点.
那么, RPC与Socket通信的区别是什么呢?
RPC是建立在Socket之上的,RPC带来了开发C/S程序的简单可靠的手段,它通过一种叫XDR的数据表达方法描述数据,程序员写伪代码,然后由rpcgen程序翻译为真正的可编译的C语言源代码,再翻译成真正的Client端和Server端程序.
RPC作为普遍的C/S开发方法,开发效率高效,可靠. 但RPC方法的基本原则是--以模块调用的简单性忽略了通讯的具体细节,以便程序员不用关心C/S之间的通讯协议, 集中精力对付实现过程. 这就决定了RPC生成的通讯不可能对每种应用都有恰当的处理方法. 与Socket方法相比,传输相同的有效数据,RPC占用更多的网络带宽.
RPC是在Socket的基础上实现的, 它比socket需要更多的网络和系统资源. 另外, 在对程序优化时, 程序员虽然可以直接修改由rpcgen产生的令人费解的源程序. 但对于追求程序设计高效率的RPC而言, 获得的简单性则被大大削弱.

Linux编程中进程间的通信是很重要的一部分,下面介绍下这部分的主题框架,让人有一个很清楚的认识:
进程间通信:
1、同一个主机之间的通讯:
1、unix进程间通讯的方式:无名管道、有名管道、信号
2、system V进程间通讯的方式:信号量、消息队列、共享内存
2、不同主机间(网络)进程之间的通信:
1、RPC
2、Socket

 

posted @ 2015-12-17 17:16  muzinan110  阅读(3460)  评论(0编辑  收藏  举报