zoukankan      html  css  js  c++  java
  • rpc、socket、mq

    关于RPC与MQ异同的理解

    相同:
    1、都利于大型系统的解耦;
    2、都提供子系统之间的交互,特别是异构子系统(如java ode等不同开发语言);
    不同:
    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

  • 相关阅读:
    docker as engitor及云构建devops选型
    elmlang:一种编码和可视化调试支持内置的语言系统
    engitor:基于jupyter,一个一体化的语言,IDE及通用分布式架构环境
    【Heritrix基础教程之3】Heritrix的基本架构
    Eclipse 快捷键大全
    【Heritrix基础教程之2】Heritrix基本内容介绍
    【Heritrix基础教程之1】在Eclipse中配置Heritrix
    Berkeley DB基础教程
    【搜索引擎Jediael开发笔记】v0.1完整代码
    【搜索引擎Jediael开发笔记】V0.1完整代码
  • 原文地址:https://www.cnblogs.com/muzinan110/p/5054715.html
Copyright © 2011-2022 走看看