• 4什么是RPC


    一 什么是 RPC?

    RPC 是指远程过程调用,也就是说两台服务器 A,B 一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数或方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

    二 RPC 是如何通讯的?

    img

    1. 要解决通讯的问题,主要是通过在客户端和服务器之间建立 TCP 连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
    2. 要解决寻址的问题,也就是说,A 服务器上的应用怎么告诉底层的 RPC 框架,如何连接到 B 服务器(如主机或 IP 地址)以及特定的端口,方法的名称是什么,这样才能完成调用。比如基于 Web 服务协议栈的 RPC,就要提供一个 endpoint URI,或者是从 UDDI 服务上查找。如果是 RMI 调用的话,还需要一个 RMI Registry 来注册服务的地址。
    3. 当 A 服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如 TCP 传递到 B 服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给 B 服务器。
    4. B 服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。
    5. 返回值还要发送回服务器 A 上的应用,也要经过序列化的方式发送,服务器 A 接到后,再反序列化,恢复为内存中的表达方式,交给 A 服务器上的应用。

    三 为什么要用 RPC?

    就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如比如不同的系统间的通讯,甚至不同的组织间的通讯。由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用

    四 常见RPC框架

    功能 Hessian Montan rpcx gRPC Thrift Dubbo Dubbox Spring Cloud
    开发语言 跨语言 Java Go 跨语言 跨语言 Java Java Java
    分布式(服务治理) × × ×
    多序列化框架支持 hessian √(支持Hessian2、Json,可扩展) × 只支持protobuf) ×(thrift格式)
    多种注册中心 × × ×
    管理中心 × × ×
    跨编程语言 ×(支持php client和C server) × × × ×
    支持REST × × × × × ×
    关注度
    上手难度
    运维成本
    开源机构 Caucho Weibo Apache Google Apache Alibaba Dangdang Apache

    实际场景中的选择

    # Spring Cloud : Spring全家桶,用起来很舒服,只有你想不到,没有它做不到。可惜因为发布的比较晚,国内还没出现比较成功的案例,大部分都是试水,不过毕竟有Spring作背书,还是比较看好。
    # Dubbox: 相对于Dubbo支持了REST,估计是很多公司选择Dubbox的一个重要原因之一,但如果使用Dubbo的RPC调用方式,服务间仍然会存在API强依赖,各有利弊,懂的取舍吧。
    # Thrift: 如果你比较高冷,完全可以基于Thrift自己搞一套抽象的自定义框架吧。
    # Montan: 可能因为出来的比较晚,目前除了新浪微博16年初发布的,
    # Hessian: 如果是初创公司或系统数量还没有超过5个,推荐选择这个,毕竟在开发速度、运维成本、上手难度等都是比较轻量、简单的,即使在以后迁移至SOA,也是无缝迁移。
    # rpcx/gRPC: 在服务没有出现严重性能的问题下,或技术栈没有变更的情况下,可能一直不会引入,即使引入也只是小部分模块优化使用。
    
  • 相关阅读:
    <a href=”#”>与 <a href=”javascript:void(0)” 的区别
    win7与ubuntu11.04双系统
    winform中为控件设置鼠标样式
    如何得到格林威治标准时间(C#,SQL SERVER)
    winform中将光标定位到多行文本框的最下处
    VS2010 MV3开发时让jQuery支持智能感知
    转载:SQL Server 2005无日志文件附加数据库
    PowerPoint无法显示文件中某些幻灯片中的文字、图像或对象
    转载:版本简介
    使用 ADO.NET连接SQL Azure
  • 原文地址:https://www.cnblogs.com/liuqingzheng/p/16271923.html
Copyright © 2020-2023  润新知