美文网首页
RPC原理浅析

RPC原理浅析

作者: packet | 来源:发表于2019-04-09 11:38 被阅读0次

    分布式系统的基石是RPC。
    RPC(Remote Procedure Call) 是远程过程调用,允许一台计算机调用另外一台计算机的程序。

    技术基础:

    1. 动态代理
      生成client stub和server stub,需要动态代理技术。除了JDK动态代理,还有字节码工生成工具,如:CgLib Javassit等。
    2. 序列化
      为了在网络中传输,需要序列化。就是把对象转换成byte[] 的过程。
      Java原生的序列化效率很低,开源的序列化有:protobuf,thrift, hessian(dubbo 默认)
    3. NIO
      很多RPC框架都基于netty,比如dubbo
    4. 服务注册中心
      比如zookeeper, redis等

    以dubbo为例说明rpc的原理:


    • Server: 暴露服务的服务提供方。服务提供者启动后主动向注册中心注册机器ip、port以及提供的服务列表。

    • Client: 调用远程服务的服务消费方。服务消费者启动时向注册中心获取服务提供方地址列表,可实现软负载均衡和Failover;

    • Registry: 服务注册与发现的注册中心。


      调用原理
    1. 服务消费者(client) 以本地调用的方式调用服务
    2. client stub接受到后,将方法和参数封装成一个消息体,并序列化,找到服务地址,并将消息发送给服务器
    3. server stub接收到消息后进行解码和反序列化
    4. server stub调用本地服务
    5. 本地服务执行,并将结果返回给server stub
    6. server stub将返回结果分装成消息体,并序列化,发送给client stub
    7. client stub接受到消息,解码和反序列化。
    8. 服务消费者(client)得到最终结果。

    RPC框架的就是把2-7封装起来,并对用户透明。

    某高手自主实现的rpc:https://github.com/TiFG/mango

    2019-07-18
    以前看RPC混混沌沌,现在居然觉得自己有了宏观思维,可以高屋建瓴了。这就是重复的力量。学而时习之,不亦说乎?这就是最好的学习策略。

    参考:从零开始实现RPC框架 - RPC原理及实现

    相关文章

      网友评论

          本文标题:RPC原理浅析

          本文链接:https://www.haomeiwen.com/subject/dxcbiqtx.html