RPC框架学习笔记 | 青训营

65 阅读2分钟

RPC慨念模型:

双方的stub负责打包,RPCruntime负责发送和接收,中间有网络。

RPC 的好处:

1.单一职责,可以使用不同语言开发,有利于分工协作和运维开发 

2.可扩展性强,可以独立扩充资源(双11)资源使用率更优 

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

RPC 带来的问题 

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

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

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

--这些问题应有rpc框架解决

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

RPC 关键指标分析:

1. 稳定性 

保障策略 :

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

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

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

成功率:

-负载均衡

-重试

长尾请求:长尾请求一般是指明显高于均值的那部分占比较小的请求。 业界关于延迟有一个常用的P99标准, 也就是99%的请求延迟要满足在一定耗时以内, 1%的请求会大于这个耗时, 而这1%就可以认为是长尾请求。

-backup request 备份请求

注册中间件

2. 易用性

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

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

3. 扩展性 

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

4. 观测性 

Log、Metric、Tracing 

内置观测性服务

5. 高性能 

场景:单机多机,单连接多连接,单/多client 单/多server, 不同大小的请求包 例如 pingpong, 不同请求类型:streaming 等

目标:高吞吐 低延迟 

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

字节RPC实践-kitex

-Kitex Core 核心组件 

-Kitex Byted 与公司内部基础设施集成 

-Kitex Too 代码生成工具

 自研网络库 - Netpoll 

-解决无法感知连接状态问题 引入 epoll 主动监听机制,感知连接状态 

-解决 goroutine 暴涨的风险建立 goroutine 池,复用 goroutine 

-提升性能 引入 Nocopy Buffer,向上层提供 NoCopy 的调用接口,编解码层面零拷贝

合并部署

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

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