RPC学习记录
RPC是帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地方法一样的体验。用它可以解决通信问题,需要去学习序列化、编解码、网络传输等。
RPC真正强大的地方是它的治理功能,比如连接管理、健康检查、负载均衡、异常重试、业务分组以及熔断限流等。
RPC是一个远程调用,需要通过网络来传输数据,并且RPC常用于业务系统之间的数据交互,需要保证其可靠性,所以一般默认采用TCP来传输。
网络传输数据必须是二进制的,但是调用方请求的出入参数都是对象,对象没法直接进行网络传输,需要提前把转换成可传输的二进制,而且要求转换过程是可逆的,这个过程叫做序列化。
数据需要有一定的格式,这种约定内容叫做协议。大多数协议会分成两部分,分别是数据头和消息体。数据头一般用于身份识别,包括协议标识、数据大小、请求类型、序列化类型等,消息体主要是请求的业务参数信息和扩展属性等。
序列化
网络通信
常见的网络IO模型:同步阻塞,同步非阻塞,IO多路复用,异步非阻塞IO。
比较常用的是同步阻塞和IO多路复用。
IO多路复用:多个网络连接的IO可以注册到一个复用器(select)上,当用户进程调用了select,那么整个进程会被阻塞,同时内核会监视所有select负责的socket,当任何一个select数据准备好之后,这个时候用户进程再调用select 函数,将数据从内核拷贝到用户进程。
在编程语言上,无论C++还是Java,在高性能的网络编程框架编写上,大多数基于Reactor模型。其中最典型的就是java的netty框架,而Reactor是基于IO多路复用的。在非高并发场景下,同步阻塞IO是最常见的。
RPC就是把拦截到的方法参数,转成可以在网络中传输的参数,并保证在服务提供方能正确的还原出语义,最终实现像调用本地一样调用远程方法。
心跳机制:健康状态、亚健康状态、死亡状态。
路由策略:
负载均衡:
重试机制:考虑业务逻辑幂等,超时时间重置,去掉有问题节点,
应用优雅关闭:
优雅启动
熔断机制:调用端可以通过熔断机制进行自我保护,防止调用下游服务出现异常,
RPC是解决应用间相互通信的框架,而应用之间的远程通信一般是不会暴露在公网上的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话