前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RPC-整体概念

RPC-整体概念

作者头像
在周末
发布2019-08-26 17:55:52
4870
发布2019-08-26 17:55:52
举报
文章被收录于专栏:在周末的专栏在周末的专栏

RPC概述

  RPC(Remote Procedure Call),即远程过程调用,是一种通过网络从远程计算机程序上请求服务而不需要了解底层网络技术的协议,实现调用远程主机上的方法就像调用本地方法一样。RPC协议在分布式系统中发挥重要的作用。

RPC涉及的技术

                                                  图片摘自http://blog.csdn.net/yinwenjie/article/details/49453303

  RPC是典型的C/S模型,可以逻辑上由下到上划分为Transfer/Network Protocol、Message Protocol、Selector/Processor(Server端)和Stub/Proxy(Client端)等层次。

  Transfer/Network Protocol层

主要负责不同主机之间数据的传输,主要包括采用的网络传输协议和网络I/O模型。

    传输协议(Transport Protocol)

      大多数RPC是建立在TCP协议(传输层协议)之上,因为TCP具有面向连接的、全双工、可靠传输(按序、不重、不丢、容错)、流量控制(滑动窗口)等特点。当然也可以使用http协议、UDP协议等。

    I/O模型(I/O Model)

      阻塞式同步IO(bloking IO)、非阻塞式同步IO(non-blocking IO)、多路复用IO(multiplexing IO)、异步IO(asynchronous IO)

      具体特点见I/O随笔。

  Message Protocol层

    主要负责传输数据的识别,主要包括协议结构(Wire Protocol)和序列化(Serialization),经过I/O只能在不同主机之间传输二进制数据,协议结构和序列化则是解决如何识别这些二进制数据。。

    协议结构(Wire Protocol)

      TCP粘包和半包问题

        如下图,发送端发送ABC、DEF、GHI三个Frame,而接收端可能收到四个Frame。

        TCP只保证将数据可靠有序的传输,但接收端收到的Frame和发送端发送的Frame可能并不一致,这就是TCP粘包和半包问题,其中AB、H、I为半包,CDEFG为粘包。

      TCP粘包和半包发生的原因

        1)应用层:应用程序write写入的字节大小大于套接口发送的缓冲区大小;

        2)TCP层:大于MSS(maximum segment size,最大报文段长度,即TCP层报文段的最大长度)的TCP分段;

        3)IP层:以太网帧大于MTU(maximum transmission unit,最大传输单元)的IP分片。

        关于MSS和MTU的相关知识可参考:http://blog.csdn.net/feng1072218457/article/details/51219251

      TCP粘包和半包的解决方法

        1)采用分隔符,例如:在消息结尾增加回车换行符(\r\n)进行分割,典型的是FTP协议。

        2)消息定长,例如:将消息分为消息头和消息体,即header+payload的方式,消息头中含有消息总长度或消息体长度,典型的是http协议。

      协议结构解决的就是TCP粘包和半包问题,它能够从二进制数据流中识别并分割出具有应用层语义的消息。

    序列化(Serialization)

      从二进制数据流中取出应用层语义的消息后,就需要将该消息转换成本地可识别的数据(例如对象或结构体等),这个过程称为序列化和反序列化技术。

      常见的序列化技术有:Protocol Buffers,Thrift,XML,JSON,MessagePack,Hessian,Protostuff,Java Native Serialize,FST等

  IDL(Interface description language,接口定义语言)

    IDL是RPC框架实现跨语言的基础,定义了一种各语言能够理解的消息结构、接口定义的描述形式。

  Stub/Proxy

    客户端通过代理实现对远程接口的调用,RPC框架Proxy负责消息格式、传输协议实现。

  Selector/Processor

    负责接收客户端的请求并执行服务端对接口的实现,主要包括:管理RPC接口的注册、判断客户端的请求权限、控制接口实现类的执行在内的各种工作。

常见的RPC框架

Thrift:来自Facebook的开源项目,有自己的IDL,支持跨语言,基于TCP协议,支持多种消息格式(二进制、JSON等)、支持阻塞I/O模型和多路复用I/O模型,性能优秀。http://thrift.apache.org/

GRPC:来自Google的开源项目,有自己的IDL,支持跨语言,基于HTTP/2协议,只支持Protocol Buffers序列化。https://github.com/grpc/grpc

Dubbo:来自阿里的开源分布式服务框架,除了集成RPC的规范外,Dubbo还在RPC的上层搭建服务层功能、配置层功能、服务路由功能。http://dubbo.io/

参考资料

体系化认识RPC

架构设计:系统间通信(10)——RPC的基本概念

MSS and MTU

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RPC概述
  • RPC涉及的技术
    •   Transfer/Network Protocol层
      •   Message Protocol层
        •   IDL(Interface description language,接口定义语言)
          •   Stub/Proxy
            •   Selector/Processor
            • 常见的RPC框架
            • 参考资料
            相关产品与服务
            文件存储
            文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档