RPC框架分层设计 | 青训营笔记

53 阅读2分钟

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

一、基本概念:

1.1 本地函数调用

image.png

1.2 远程函数调用

image.png

1.3 一次RPC的完整过程

  • 1.生成代码
  • 2.编解码
  • 3.通信协议
  • 4.网络传输

1.4 RPC的好处:

  • 1.单一职责,有利于分工协作和运维开发
  • 2.可扩展性强,资源利用率更优
  • 3.故障隔离,服务得整体可靠性更高

1.5 RPC带来的问题:

  • 1.服务宕机,对方应如何处理
  • 2.在调用过程中发生网络异常,如何保证消息的可达性
  • 3.请求量突增导致服务无法及时处理,有哪些应对措施

二、分层设计

image.png

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

编解码层-数据格式

  • 1.语言特定的格式
  • 2.文本格式
  • 3.二进制编码

编解码层-选型

  • 1.兼容性
  • 2.通用性
  • 3.性能

协议层 -概念

  • 1.特殊结束符
  • 2.变长协议

三、关键指标:

3.1.稳定性-保障策略,请求成功率,长尾请求,注册中间件

  • 熔断:保护调用方,防止被调用的服务出现问题而影响到整个链路
  • 限流:保护被调用方,防止大流量把服务压垮
  • 超时控制,避免浪费资源在不可用节点上

3.2,易用性:

  • 开箱即用:合理的默认参数选项,丰富的文档
  • 周边工具:生成代码工具,脚手架工具

3.3.扩展性

  1. Middleware
  2. Option
  3. 编解码层
  4. 协议层
  5. 网络传输层
  6. 代码生成工具插件扩展

3.4.观测性

  • Log,Metric,Tracing
  • 内置观测性服务

3.5.高性能

  • 场景:

单机多机

单连接多连接

单/多client

不同大小的请求包

不同请求类型

  • 目标:

高吞吐

低延迟

  • 手段:

连接池

多路复用

高性能编解码协议

高性能网络库

四、企业实践:

4.1.整体架构 -Kitex

image.png

4.2,自研网络库-背景

原生库无法感知连接状态

原生库存在goroutine暴涨的风险

4.3.自研网络库-Netpoll

解决无法感知连接状态问题

解决goroutine暴涨的风险

提升性能

image.png

4.5性能优化-网络库优化

调度优化

Link Buffer

Pool

4.6合并部署

微服务过微,传输和序列化开销越来越大。

将亲和性强的服务实例尽可能调度到同一个物理机,远程RPC调用优化为本地IPC调用。