[ 后端基础Day13 | 青训营笔记]

58 阅读2分钟

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

RPC框架

基本概念

image-20230210095741119.png

rpc过程

image-20230210095851157.png

rpc好处:

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

可拓展性强,资源使用率更优

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

问题:

服务宕机、网络异常、请求量突增

分层设计

image-20230210100317626.png

IDL文件定义了通信格式

image-20230210100344621.png

编解码层

兼容性、通用性、性能

协议层

image-20230210101005967.png

网络通信层

image-20230210101400222.png

关键设计

稳定性

熔断、限流、超时控制:避免浪费资源在不可用节点上

请求成功率

负载均衡、重试

image-20230210102004853.png

长尾请求

image-20230210102131393.png

实现主体:中间件

image-20230210102249612.png

易用性

开箱即用、周边工具:生成代码工具、脚手架工具

扩展性

image-20230210102511122.png

观测性

log、metric、tracing

内置观测性服务

高性能

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

企业实践

Kitex整体架构

image-20230210103111688.png

自研网络库Netpoll

背景:原生库无法感知连接状态、存在goroutine暴涨的风险

解决了:

引入epoll主动监听机制,感知连接状态

建立goroutine池,复用goroutine

提升性能,引入Nocopy Buffer,实现0拷贝

扩展性设计

image-20230210103543982.png

编解码优化

codeGen、JIT

合并部署

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

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

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

基于共享内存的通信协议

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

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

个人总结

通过本次课程的学习,我深入了解了RPC框架的作用,与其分层结构,还有各对于rpc框架可以进行优化的点