RPC 架构初探

本文作者:IMWeb Jianglinyuan 原文出处:IMWeb社区 未经同意,禁止转载

RPC 架构初探

RPC的全称是Remote Procedure Call,它是一种进程间的通信方式。允许像调用本地服务一样调用远程服务,它的具体的实现方式可以不同,例如Spring的HTTP Invoker,FaceBook的Thrift二进制私有协议通信。

RPC概念术语在上世纪80年代由Bruce Jay Nelson提出,在他的论文中对RPC进行了如下的总结:

  • 简单:RPC概念的语义十分清晰和简单,这样建立分布式计算就更容易。
  • 高效:过程调用看起来十分简单并且高效。
  • 通用:在单机计算中过程往往是不同算法和API,跨进程调用最重要的是通用的通信机制。

2006年之后,随着移动互联网的发展,各种智能终端的普及,远程分布式调用已经成为主流,RPC框架也如雨后春笋搬诞生,开源和自研的RPC框架的普及标志着传统垂直应用架构时代的终结。

RPC框架的目的就是让远程过程(服务)调用更加简单、透明,RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列号方式(XML/JSON/二进制)和通信细节。框架使用者只需要了解谁在什么位置提供了什么样的远程服务接口即可,开发者不用关心底层的通信细节和调用过程。其原理图如下图所示:

RPC框架实现的几个核心的技术总结如下:

  • 远程服务提供者需要以某种形式提供调用服务相关的信息,包括不限于服务接口、数据结构,或者中间态的服务定义文件,例如Thrift的IDL文件,WS-RPC的WSDL文件定义,甚至也可以是服务端的接口说明文档;服务调用者需要通过一定的途径获取远程服务调用相关信息,例如服务器端接口定义Jar包导入,获取服务度IDL文件等。
  • 远程代理对象:服务调用者调用的服务实际是远程服务的本地代理,对于Java语言,它的实现是JDK的动态代理,通过动态代理的拦截机制,将本地调用封装成远程调用服务等等。
  • 通信:RPC框架与具体的协议无关,例如Spring的远程调用支持HTTP Invoke、RMI Invoke,MessagePeck使用的是私有的二进制压缩协议。
  • 序列化:远程通信,需要将对象转换成二进制码流进行网络传输,不同的序列化框架,支持的数据类型、数据包大小、异常类型以及性能等都不同。不同的RPC框架的应用场景也不同,因此技术选择会存在很大的差异。一些做的比较好的RPC框架,可以支持多种序列化方式,有的甚至支持用户自定义序列化框架(Hadoop Arvo)。

业界开源的RPC框架非常多,比较主流的RPC框架列举如下:

  • 由Facebook开发的远程服务调用框架Apache Thrift。
  • Hadoop的子项目Arvo-RPC。
  • Caucho提供的基于binary-RPC实现的远程通信框架Hessian。
  • Google开源的基于HTTP/2和ProtoBuf的通用RPC框架gRPC。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • FIS源码-fisrelease概览

    本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 前面已经已fis server open为例,讲解了FIS的整体架构设计,...

    IMWeb前端团队
  • FIS源码-fisrelease概览

    前面已经已fis server open为例,讲解了FIS的整体架构设计,以及命令解析&执行的过程。下面就进入FIS最核心的部分,看看执行fis release...

    IMWeb前端团队
  • 【原译】javascript中的错误处理

    A Guide to Proper Error Handling in JavaScript

    IMWeb前端团队
  • 微服务生态-RPC基础

    https://github.com/apache/dubbo-website/blob/master/blog/zh-cn/rpc-introduction....

    needrunning
  • 深入浅出 RPC - 浅出篇

    近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用。在平时的日常开发中我们都在隐式或显式的使用 RPC,...

    Java高级架构
  • 快速学习-远程调用方式

    无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?

    cwl_java
  • 到底什么是RPC - 概述

    远古时期,每个进程各干各的,但随着发展有时候会存在A进程调用B进程某一方法,使用其功能的场景,比如说把画图统一都在某一个进程中,其他进程只需要调用它就ok了(代...

    邹志全
  • Web | 什么是 RPC ?

    RPC 大家经常会听到有人提起,但是 RPC 到底是什么东西貌似没有人认真的解释和回答过。(有也当做没看见,不然我还写个啥)

    咸鱼学Python
  • RPC框架是啥?

    在我刚刚了解分布式的时候,经常对RPC和分布式有些混淆,甚至一直以为两者对等,所以我们先看看他们有什么区别?

    Java猫说
  • rpc思维导图,让rpc不再难懂

    解析 RPC(Remote Procedure Call),远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 ? 在O...

    java思维导图

扫码关注云+社区

领取腾讯云代金券