专栏首页图南科技微服务生态-RPC基础

微服务生态-RPC基础

分享一篇Dubbo社区关于RPC基本介绍的文章,同时引出几个简单的思考问题

原文地址

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

定义

文中对RPC的定义

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

这里的屏蔽底层网络技术包括 传输协议就是屏蔽TCP/UDP,序列化方式等。

《极客时间》上有一篇关于gRPC介绍中提到一个总结【主流RPC框架】

业界主流的 RPC 框架

业界主流的 RPC 框架整体上分为三类:

支持多语言的 RPC 框架,比较成熟的有 Google 的 gRPC、Apache(Facebook)的 Thrift;

只支持特定语言的 RPC 框架,例如新浪微博的 Motan;

支持服务治理等服务化特性的分布式服务框架,其底层内核仍然是 RPC 框架, 例如阿里的 Dubbo。

RPC框架的目标就是让调用方像调用本地应用一样调用远程服务,而不关心服务提供方在哪里。

对于云计算下的分布式系统而言,远程资源具体在哪里实际上并不是很重要,因为你根本不知道了

起源

在 Nelson 的论文 "Implementing Remote Procedure Calls" 中他提到了几点:

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

而这个论文发表于30年前,不得不赞叹。

RPC结构

User User-stub RPCRuntime Server-stub Server

RPC结构.png

RPC组件

RPC 服务方通过 RpcServer 去导出(export)远程接口方法,而客户方通过 RpcClient 去引入(import)远程接口方法。

客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy 。

代理封装调用信息并将调用转交给RpcInvoker 去实际执行。

在客户端的RpcInvoker 通过连接器RpcConnector 去维持与服务端的通道RpcChannel,并使用RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。

rpc-work-principle

rpc-work-principle.png


我们在讨论RPC时,通常会与HTTP接口调用做比较,实际上业界有从业人员对这块是有误解的,HTTP接口调用也是RPC远程调用的一种,是子集关系。

大多倾向于对外使用HTTP RestAPI,对内使用私有的RPC协议。

对外开放的API采用HTTP RestAPI更加标准和规范,而在系统内部使用HTTP RestAPI会存在性能风险。

http-rpc

这里涉及到一个服务调用方式问题

RPC服务调用方式

RPC服务调用方式 分为 1 同步阻塞调用 2 异步非阻塞调用 异步和同步的区分在于是否等待服务端执行完成并返回结果。

这里放一张异步调用时序图

小结

这篇文章从RPC定义开始,从RPC结构,原理和调用方式简单介绍了RPC,RPC在分布式系统构建过程中发挥至关重要的作用,后续我会结合工程实践进一步的深入思考关于RPC,分布式相关的问题。

Dubbo社区文集地址

https://github.com/apache/dubbo-website/tree/master/blog/zh-cn

文章已同步到公众号《图南科技》欢迎关注

本文分享自微信公众号 - 图南科技(tunan_technology),作者:图南科技

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-23

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【译】Python中的数据清洗 |Pythonic Data Cleaning With NumPy and Pandas(二)

    【译】Python中的数据清洗 |Pythonic Data Cleaning With NumPy and Pandas(一)

    needrunning
  • 一则小故事-和时间一起做MongoDB的朋友

    有关 MongoDB 是什么,MongoDB 如何用,如何发挥最大优势的相关问题,欢迎大家交流探讨。

    needrunning
  • Mac下补充PHP开发环境

    Mac环境比较省心的是自带PHP环境,不需要从下载源码编译安装开始,默认的PHP版本是7.1

    needrunning
  • 到底什么是RPC - 概述

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

    邹志全
  • Web | 什么是 RPC ?

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

    咸鱼学Python
  • Glusterfs之rpc模块源码分析(上)之RPC概述

    技巅
  • 深入浅出 RPC - 浅出篇

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

    Java高级架构
  • 我眼中的 RPC

    RPC 是一种框架或者说一种架构,主要目标就是让远程服务调用更简单、透明,调用远程就像调用本地一样。

    新亮
  • 五分钟学后端技术:如何学习Java工程师必须掌握的RPC

    本文转自https://developer.51cto.com/art/201906/597963.htm

    黄小斜
  • RPC 架构初探

    RPC的全称是Remote Procedure Call,它是一种进程间的通信方式。允许像调用本地服务一样调用远程服务,它的具体的实现方式可以不同,例如Spri...

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券