RPC原理与实现| 青训营笔记

105 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

前言

这是小白初接触到RPC的内容,本课程深入浅出RPC框架。主要讲述RPC的基本概念,分层设计,关键指标,企业实践。

(1).基本概念

1.1 RPC概念模型

1984年Nelson发表了论文《Implementing Remote Procedure Calls》其中提出了RPC的过程由5个模型组成: User、 User-Stub、 RPC-Runtime、 Server -Stub、Server

1.2一次RPC的完整过程

IDL (Interface description language)文件:IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信

生成代码:通过编译器工具把IDL文件转换成语言对应的静态库

编解码:从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化

通信协议:规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据

网络传输:通常基于成熟的网络库走TCP/UDP传输

1.3 RPC的好处

1.单一职责,有利于分工协作和运维开发

2.可扩展性强,资源使用率更优

3.故障隔离,服务的整体可靠性更高

1.4RPC带来的问题

1.服务宕机,对方应该如何处理?

2.在调用过程中发生网络异常,如何保证消息的可达性?

3.请求量突增导致服务无法及时处理,有哪些应对措施?

1.5.小结

1.本地函数调用和RPC调用的区别:函数映射、数据转成字节流、网络传输

  1. RPC的概念模型: User、User-Stub、 RPC Runtime、 Server- Stub、 Server

  2. 一次PRC的完整过程,并讲解了RPC的基本概念定义

  3. RPC带来好处的同时也带来了不少新的问题,将由RPC框架来解决

(2).分层设计

2.1编解码层-数据格式

语言特定的格式:许多编程语言都内建了将内存对象编码为字节序列的支持,例如Java有java.io.Serializable

文本格式:JSON、XML、CSV 等文本格式,具有人类可读性

二进制编码:具备跨语言和高性能等优点,常见有Thrift 的BinaryProtocol, Protobuf 等

2.2编解码层-选型

兼容性:支持自动增加新的字段,而不影响老的服务,这将提高系统的灵活度

通用性:支持跨平台、跨语言

性能:从空间和时间两个维度来考虑,也就是编码后数据大小和编码耗费时长

2.3网络通信层-网络库

提供易用API:封装底层Socket API;连接管理和事件分发

功能:协议支持: tcp、 udp和uds等;优雅退出、异常处理等

性能:应用层buffer减少copy;高性能定时器、对象池等

2.4小结

  1. RPC框架主要核心有三层:编解码层、协议层和网络通信层

2.二进制编解码的实现原理和选型要点

3.协议的一般构造,以及框架协议解析的基本流程

  1. Socket API的调用流程,以及选型网络库时要考察的核心指标

(3).关键指标

关键指标,稳定性,易用性,扩展性,观测性,高性能

3.1稳定性-保障策略

熔断:保护调用方,防止被调用的服务出现问题而影响到整个链路

限流:保护被调用方,防止大流量把服务压垮

超时控制:避免浪费资源在不可用节点上

3.2易用性

开箱即用:合理的默认参数选项、丰富的文档

周边工具:生成代码工具、脚手架工具

3.3扩展性

Middleware, Option,编解码层,协议层,网络传输层,代码生成工具插件扩展

3.4观测性

Log、Metric、 Tracing; 内置观测性服务

3.5高性能

手段:连接池,多路复用,高性能编解码协议,高性能网络库

3.6小结

1.框架通过中间件来注入各种服务治理策略,保障服务的稳定性

2.通过提供合理的默认配置和方便的命令行工具可以提升框架的易用性

3.框架应当提供丰富的扩展点,例如核心的传输层和协议层

4.观测性除了传统的Log、Metric 和Tracing之外,内置状态暴露服务也很有必要

5.性能可以从多个层面去优化,例如选择高性能的编解码协议和网络库

(4).企业实践

4.1合并部署

中心化的部署调度和流量控制

基于共享内存的通信协议

定制化的服务发现和连接池实现

定制化的服务启动和监听逻辑

4.2小结

1.介绍了Kitex的整体架构

2.介绍了自研网络库Netpoll的背景和优势

3.从扩展性和性能优化两个方面分享了相关实践

4.介绍了内部正在尝试落地的新的微服务形态:合并部署

课程总结

1.从本地函数调用引出RPC的基本概念

2.重点讲解了RPC框架的核心的三层,编解码层、协议层和网络传输层

3.围绕RPC框架的核心指标,例如稳定性、可扩展性和高性能等,展开讲解相关的知识

4.分享了字节跳动高性能RPC框架Kitex的相关实践

小结

本课程深入浅出RPC框架。主要讲述RPC的基本概念,分层设计,关键指标,企业实践。