自己建设网站需要多少钱,做网站有必要用wordpress,辽宁建设工程信息网如何报名,seo技术培训学校什么是RPC框架#xff1f;
RPC(Remote Procedure Call):远程过程调用。当多个应用部署在多个服务器上时#xff0c;由于他们不在一个内存空间上#xff0c;因此需要网络来进行通信#xff0c;而RPC允许它像调用本地方法一样调用远程服务。
RPC原理
服务消费方通过RPC客户…什么是RPC框架
RPC(Remote Procedure Call):远程过程调用。当多个应用部署在多个服务器上时由于他们不在一个内存空间上因此需要网络来进行通信而RPC允许它像调用本地方法一样调用远程服务。
RPC原理
服务消费方通过RPC客户端调用服务服务接收方通过RPC服务端接收请求进行处理。 整体分四个模块
远程代理序列化网络传输反序列化
RPC核心功能实现
RPC服务消费方
连接管理负载均衡请求路由超时处理健康检查
连接管理
消费方需要保持与服务方的长链接用于传输请求也用于返回结果。那该如何实现呢 下面是连接管理在整个服务消费调用过程中的位置
连接管理核心有以下3个需要思考的点
连接初始化的时机灵活根据业务场景选择策略 懒加载服务刚启动的时候不初始化等有请求调用时再初始化连接。建好后再次有请求就复用这个连接。网关场景一般使用懒加载。因为网关业务是公司所有流量的入口下游服务可能有n个服务*n个节点。一个网关服务启动后如果要等全部连接建立完毕之后启动会很慢并且如果有模块没什么流量还占用着连接会有资源的浪费。一般网关服务上线后先分配少点的流量然后再预热预热完后开放。预加载模块启动后先不接流量把所有的连接、socket全部建好了然后再提供服务。一般普通应用服务都是这种模式 连接数的维护多建几条连接防止单条连接失效。心跳/重连多条连接有探活机制保证有多条连接可用。
负载均衡
负载均衡功能是确保多个服务提供方节点流量均匀/合理支持节点扩容与灰度发布。 负载均衡在消费方rpc调用的位置 负载均衡的一些方式轮询、随机、取模、带权重、一致性Hash
请求路由
当业务方想按照某些请求标签来确定是不是要走该节点时可以使用请求路由。通过一系列规则过滤出可以选择的服务提供方节点列表在应用隔离,读写分离,灰度发布中都发挥作用。 请求路由在消费方调用过程中的位置 请求路由功能的设计
规则匹配 待比较的属性(IP/流量标签)运算符(等于、大于、不等于等等)属性匹配值跟哪个值进行匹配匹配完的结果行为 数据结构设计因为是一系列规则所以可以是链表结构 如按照IP分流规则举例attributeIPoperatorINvalueIP1IP2ServersNode1Node2
超时处理
消费端对于长时间没有返回的请求需要作出异常处理及时释放资源。 超时处理在RPC调用链路中的位置 超时处理的核心逻辑 工作线程的阻塞位置 等待服务端回包通知接收到请求了判断是否超时如下图 超时逻辑 工作线程等待回包通知如果数据在预期的时间内返回则终止等待唤醒工作线程如果超时则抛出异常 超时处理的核心数据结构 MapSessionID请求级唯一-WindowData内部包含Event
RPC服务提供方
队列/线程池超时丢弃优雅关闭过载保护
队列/线程池
服务提供方可以将不同类型的请求放入各自的队列每个队列分配独立的线程池做到资源隔离。 队列/线程池在服务提供方处理逻辑中的位置 队列数/线程数的选择可以按照实际压测后的情况去调整。
超时丢弃
超时丢弃主要是将已经超时超时的定义主要是调用方配置的超时时间的请求快速失败缓解队列堆积防止服务持续不可用。 超时丢弃在服务提供方处理逻辑中的位置 超时丢弃的处理逻辑 io任务入队任务包含3个字段第一个是超时时间第二个是处理请求的handler处理器第三个是入队时间。 下面是出队以及判定超时的逻辑
优雅关闭
优雅关闭主要是进程退出前确保接收到的请求全部处理完成 优雅关闭的实现通过2种方式通知调用方
返回数据中带关闭信息发送关闭协议通知调用方
优雅关闭的服务端实现
监听关闭信号 kill -12改变服务状态通知客户端
监听关闭信号 kill -12
服务启动时候使用Signal注册监听
改变服务状态
修改服务上下文的状态
通知客户端本服务端已关闭 优雅关闭的客户端实现 根据节点返回内容改变节点状态 节点探活
过载保护
服务提供方为保证正常运行主动丢弃超出处理能力外的请求。 过载保护在调用链路下的位置 过载保护的实现原理IO线程任务入队时判断是否设置了队列长度限制若有限制则和队列中实际任务数做比较若超出则丢弃。
RPC高级功能
服务熔断服务降级限流动态权重
服务熔断
当某服务出现不可用或响应超时的情况时为了防止整个系统出现雪崩暂时停止对该服务的调用。
服务降级
对业务降级跳过异常调用返回关键数据确保服务可用。一般是熔断时结合降级返回default数据使业务不中断
动态权重
为刚启动节点分配较低权重逐步提高权重。
限流
通过限制调用放流量以达到对服务提供方的保护。