极客时间 RPC 实战与核心原理课程学习总结

[TOC]

断断续续总算完整的上完了一门极客时间的课程,防止上完就忘记还是得做个总结记录下

开篇词

课程开篇词首先讲述了作者主攻分布式架构与设计,并做相关的经验之谈。

  • RPC 充当着分布式系统的搭建中较为关键的角色,对整个分布式系统性能提升起到了非常重要的作用;

  • RPC 的最大特点就是可以让我们像调用本地函数那样发起远程调用;

  • RPC 就是解决网络通信的一大利器,网络通信是搭建分布式系统的一大难题,RPC 对网络通信的整个过程做了完整的包装,使得再搭建分布式系统的过程中网络通信逻辑的开发变得更加简单,同时也会让网络通信变得更加安全可靠;

  • 为了让 RPC 高可用就需要用到它的治理功能,譬如连接管理、监控检查、负载均衡、优雅启停机制、异常重试、业务分组以及熔断限流等等;

基础篇

核心原理

什么是 RPC

RPC 的全称是 Remote Procedure Call 即远程过程调用,RPC 的作用主要提现在两大方面:

  • 屏蔽远程调用和本地调用的区别,让我们感觉就是在调用本地的方法;
  • 隐藏了底层网络通信的复杂性,让我们专注于业务逻辑;

RPC 通信流程

发起请求的一方曾为调用方,被调用的一方称为服务提供方。

一个完整的 RPC 通信流程涉及数据的网络传输、数据的序列化及反序列化、通讯协议:

  • RPC 常用于业务系统之间的数据交互,需要保证其可靠性,所以 RPC 默认一般采用 TCP 进行传输;
  • 网络的传输数据是二进制,需要将调用方的请求数据在网络上进行传输,就需要将其转成可传输的二进制数据,且转换算法必须是可逆的,这个过程称为序列化;
  • 服务提供方收到请求数据需要理解二进制内容就需要理解通信的协议格式。大多数的的协议会分成两部分分别是数据头和消息体。
    • 数据头一般用于身份识别,包括协议识别、数据大小、请求类型、序列化类型信息等;
    • 消息体主要是请求的业务参数信息和扩展属性等;
  • 根据协议格式,服务提供方将收到的二进制数据识别出请求数据的过程成为反序列化;
  • 最后服务提供方根据识别出来的请求数据找到对应的实现,完成方法的调用。再将执行结果原路返回给调用方;

RPC 在架构中的位置

RPC 是解决应用间通信的一种方式,无论是在一个大型的分布式系统还是中小型系统中,应用架构最终会从“单体” 演进成“微服务化”,整个应用系统会被拆分成不同的功能的应用,并将他们部署在不同的服务器中,而应用之间通过 RPC 进行通信,可以说 RPC 对应的是整个分布式应用系统,像“经络一样的存在”。

RPC 原理的核心是让我们像调用本地一样调用远程,帮助我们应用层屏蔽远程调用的复杂性,使得我们可以更方便的构建分布式系统总结起来就是一个关键字:透明化。

协议