- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?
?
RPC框架深入剖析与设计实践
?
?
基础架构
奈学教育相关内容
01.RPC实现原理深入分析
RPC(Remote Procedure Call):远程过程调用,Remote Procedure Call Protocol它是一个计算机通信协议。它允许像调用本地方法一样调用远程服务。由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据1.RPC作用屏蔽组包解包l屏蔽数据发送/接收l提高开发效率l业务发展的必然产物2.RPC核心组成远程方法对象代理l连接管理l序列化/反序列化l寻址与负载均衡3.RPC调用方式同步调用l异步调用RPC调用过程
02.精简版RPC调用代码实现
如果没有RPC框架支持,实现远程调用需要做哪些事Client 端工作? 建立与Server的连接? 组装数据? 发送数据包? 接收处理结果数据包? 解析返回数据包Server 端工作? 监听端口? 响应连接请求? 接收数据包? 解析数据包,调用相应方法? 组装请求处理结果数据包? 发送结果数据包设计“用户”服务? 功能需求:用户信息管理—CRUD? 调用方式:TCP长连接同步交互? 协议:自定义协议
接口设计? 注册bool addUser(User user)? 更新bool updateUser(long uid, User user)? 注销bool deleteUser(long uid)? 查询User Info getUser(long uid)
序列化协议远程调用涉及数据的传输,就会涉及组包和解包,需要调用方和服务方约定数据格式——序列化协议
03.RPC服务消费方核心功能设计实现
RPC产品是什么样仅仅实现远程调用是不够的,离产品化还有很长一段距离
数据传输 序列化/反序列化 客户端代理类实现 请求映射分发仅此而已?作为RPC产品还需要哪些功能
Comsumer? 连接管理? 负载均衡? 请求路由? 超时处理? 健康检查Provider? 队列/线程池? 超时丢弃? 优雅关闭? 过载保护Consumer功能分析? 连接管理:保持与服务提供方长连接,用于传输请求数据也返回结果? 初始化时机:网关连接下游系统非常多,程序启动时创建,这样程序启动比较慢,而且有的节点可以已经没有流量,启动就建立也有问题,浪费资源;可以使用懒加载模式,需要调用摸个模块时才建立连接? 连接数维护? 心跳/重连
客户端线程模型阻塞等待:是工作线程在等待网络IO吗?工作线程不做发送接收数据,但工作线程确认是在等待,等待的是IO线程返回唤醒;一般都是工作线程把任务放队列,然后由IO线程获取队列任务发送任务,返回的数据也有IO接收然后放入队列并唤醒工作线程
负载均衡确保多个服务提供方节点流量均匀/合理,支持节点扩容与灰度发布? 轮训? 随机? 取模? 带权重? 一致性Hash权重负载均衡设计? 权重0~10范围内取值? 值越大表示权重越高? 权重高分配流量比例大权重负载均衡设计? 数据结构l 数组,根据权重值填充l 0,1的位置随机打乱? 算法描述l 负载均衡选出一个结点l 生成0~9之间随机值l 对应数组中的值? 0 使用该节点? 1 不使用该节点也可以不生成随机值,直接轮训数组就可以,0使用该节点,1不使用就可以了;如果每次生成随机值就是计算型,消耗CPU,直接使用随机数组,轮训访问就可以解决
轮询数组初始化? num表示1的个数? 随机填充数组
轮询+权重负载均衡实现? 轮询到某一Server结点? 根据权重再进行一次过滤? 轮询到下一结点请求路由通过一系列规则过滤出可以选择的服务提供方节点列表,在应用隔离,读写分离,灰度发布中都发挥作用
路由功能设计? 匹配规则? 行为? 链表
路由功能设计实现? 规则描述l 待比较属性l 运算符l 属性匹配值l 匹配结点? 数据结构设计l 链表(filter过滤器)超时处理对于长时间没有返回的请求,需要作出异常处理,及时释放资源调用方超时处理? 工作线程阻塞位置l 等待回包通知? 超时逻辑l 工作线程等待通知l 数据返回终止等待l 超时抛出异常? 数据结构l Map:SessionID-WindowData
04.RPC服务提供方核心功能设计实现
Provider功能分析? 队列/线程池? 超时丢弃? 优雅关闭? 过载保护队列/线程池将不同类型的请求,放入各自的队列,每个队列分配独立的线程池,资源隔离队列数,线程池线程数如何选择
您可能关注的文档
- QT学习1:设计可视化窗口的框架-Ui-Class.docx
- RBAC权限系统分析、设计与实现.docx
- Redis+Nginx+JVM+设计模式+Spring全家桶+Dubbo.docx
- Redis+Nginx+设计模式+Spring全家桶+Dubbo精选.docx
- Redis+Nginx+设计模式+Spring全家桶+Dubbo精选概述.docx
- redis-list类型的设计与实现.docx
- redis-string类型的设计与实现.docx
- Redis为什么设计成单线程-第1篇.docx
- Redis主从配置,哨兵,集群的设计原理.docx
- Redis字典的实现-《Redis设计与实现》.docx
- 中国行业标准 GM/T 0126-2023HTML密码应用置标语法.pdf
- 《JJF 2121-2024恒转速源校准规范》.pdf
- 餐饮服务中20条处理要点.docx
- 《GM/T 0011-2023可信计算 可信密码支撑平台功能与接口规范》.pdf
- 《JJF 2134-2024旋转流变仪校准规范》.pdf
- JJF 2121-2024恒转速源校准规范.pdf
- 计量规程规范 JJF 2121-2024恒转速源校准规范.pdf
- 《JJF 2118-2024压力式六氟化硫气体密度控制器校验仪校准规范》.pdf
- JJF 2134-2024旋转流变仪校准规范.pdf
- 计量规程规范 JJF 2134-2024旋转流变仪校准规范.pdf
文档评论(0)