zoukankan      html  css  js  c++  java
  • RPC 学习(一)认识

    文章部分描述来自参考资料 
    

    RPC

    什么是RPC

        RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

        RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。现在业界有很多开源的优秀 RPC 框架,例如 Spring Cloud、Dubbo、Thrift 等。

    RPC 工作原理

    1297993-20200117165458931-1287181557.png

    Client像调用本地服务似的调用远程服务;

    1. Client stub接收到调用后,将方法、参数序列化

    2. 客户端通过sockets将消息发送到服务端

    3. Server stub 收到消息后进行解码(将消息对象反序列化)

    4. Server stub 根据解码结果调用本地的服务

    本地服务执行(对于服务端来说是本地执行)并将结果返回给Server stub

    1. Server stub将返回结果打包成消息(将结果消息对象序列化)

    2. 服务端通过sockets将消息发送到客户端

    3. Client stub接收到结果消息,并进行解码(将结果消息反序列化)

    客户端得到最终结果。

    RPC 调用分以下两种:

    同步调用:客户方等待调用执行完成并返回结果。

    异步调用:客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。

    异步和同步的区分在于是否等待服务端执行完成并返回结果。

    实现一个RPC框架需要考虑的问题

    • 应该如何部署服务框架到客户端

      • 服务框架自身部署的问题
      • 实现自己的框架所依赖的jar包与应用自身依赖包jar包的冲突问题
    • 各个服务提供者消费时间差异的问题,使用负载均衡 (A1消费得快 ,A2消费得慢)

    • 多机房问题

    • client 端的流控处理

    • 网络通信实现的选择(BIO AIO NIO)

    • 支持多种异步服务调用方式(Future , Callback )

    参考资料

    • http://dubbo.apache.org/zh-cn/blog/rpc-introduction.html
  • 相关阅读:
    Remmina:一个 Linux 下功能丰富的远程桌面共享工具(转载)
    Linux安装多功能词典GoldenDict
    Ubuntu18.04 更改GRUB引导菜单背景图片和默认启动项
    ubuntu 18.04网卡命名规则改回传统的ethx
    Linux Putty 复制粘贴
    Ubuntu 18.04图形化软件包管理器
    Ubuntu 18.04 安装 Broadcom Limited BCM43142无线网卡驱动
    Linux下通过rdesktop连接Windows远程桌面
    Debian9.5 系统配置NFS配置说明
    CentOS6.9下NFS配置说明
  • 原文地址:https://www.cnblogs.com/Benjious/p/12206635.html
Copyright © 2011-2022 走看看