RPC框架
RPC(Remote Procedure Call,远程过程调用)框架是一种用于构建分布式应用的技术,它使得在不同计算机或服务器之间调用远程方法和函数变得更加简单和透明。通过RPC框架,开发者可以像调用本地函数一样调用远程函数,而不需要关心底层网络通信的细节。
1.基本概念
RPC调用:远程函数调用
与本地函数调用的区别:无法通过指针进行调用,远程函数调用相当于运行在不同的进程,不是使用相同的内存空间
RPC需要解决的问题(即与本地函数调用的区别):
1.函数映射
2.数据包转换成字节流
3.网络传输
RPC理论模型:User User-Stub RPC-Runtime Server-Stub Server
RPC的好处:
1.单一职责,有利于分工协作和运维开发
2.可扩展性强,资源使用率更优
3.故障隔离,服务的整体可靠性更高
重要特点和工作原理:
- 透明性:RPC框架为开发者提供了透明性,使得远程调用看起来就像本地函数调用一样。开发者不需要关心底层的网络通信和数据传输细节。
- 语言无关性:RPC框架通常支持多种编程语言,这意味着你可以在不同的语言中编写客户端和服务器,它们可以互相调用远程方法。
- 序列化和反序列化:在RPC中,数据需要在客户端和服务器之间进行序列化和反序列化。序列化是将数据转换为可在网络上传输的格式,反序列化是将接收到的数据恢复为本地数据结构。
- 协议和传输:RPC框架使用特定的协议来定义数据传输格式和通信规则。常见的RPC协议包括Protobuf、Thrift、JSON-RPC等。底层传输可以使用TCP、HTTP、UDP等协议。
- 远程方法注册:服务器需要注册提供的远程方法,客户端通过方法名调用这些方法。RPC框架通常提供机制来管理和注册远程方法。
- 序列化和语言绑定:许多RPC框架允许你定义数据结构和方法,然后自动生成序列化代码和客户端/服务器绑定代码,以减少手动工作。
- 错误处理:RPC框架提供了错误处理机制,使得在远程调用发生错误时能够进行适当的处理。
2.分层设计
分层设计使得RPC框架能够模块化、灵活地构建分布式应用。不同层次之间的功能分离,使开发者能够专注于特定功能,同时也提高了代码的可维护性和扩展性。不同的RPC框架可能会有不同的层次划分和命名,但通常都会包括类似的核心模块。
Client Server对称
业务逻辑代码层-语言转化编解码层-框架的编解码层-框架的协议层-框架的网络通信层
核心有:编解码层 协议层 网络通信层
TLV编码:T:标签即类型 L:长度 V:值
编解码层选型:兼容性 通用性 性能
网络库:
提供易用API (封装底层Socket API 连接管理和事件分发)
功能 (协议支持TCP UDP等 优雅退出,异常处理 )
性能 (应用层buffer减少copy 高性能定时器对象池)
3.关键指标
稳定性 易用性 扩展性 观测性 高性能
稳定性:
(保障策略):熔断 限流 超时控制
(请求成功率):负载均衡 重试
(长尾请求):备份请求
(注册中间件)
易用性:
开箱即用 周边工具
扩展性:
中间件 参数 编解码层 协议层 网络传输层 代码生成工具插件扩展
观测性:用于观察服务当前状况
日志 监控 链路跟踪
内置观测性服务
高性能:高吞吐 低延迟 作用于不同场景
框架通过中间件注入各种服务治理策略,保障服务的稳定性
通过提供合理的默认配置和方便的命令行工具提高框架的易用性
框架应提供丰富的扩展点
观测性应同时具备内置状态暴露服务
性能可以从多个层面去优化