RPC框架深入剖析与设计实践.docx

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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功能分析 ? 队列/线程池 ? 超时丢弃 ? 优雅关闭 ? 过载保护 队列/线程池 将不同类型的请求,放入各自的队列,每个队列分配独立的线程池,资源隔离 队列数,线程池线程数如何选择

文档评论(0)

科技之佳文库 + 关注
官方认证
内容提供者

科技赋能未来,创新改变生活!

版权声明书
用户编号:8131073104000017
认证主体重庆有云时代科技有限公司
IP属地上海
统一社会信用代码/组织机构代码
9150010832176858X3

1亿VIP精品文档

相关文档