一、前 言RPC 是远程过程调用(Remote Procedure Call)的缩写 , 它是一种通过网络从远程计算机程序上请求服务 , 而不需要了解底层网络技术的协议 。举例来说 , 部署在 A 节点上的应用调用部署在 B 节点上的应用提供的接口 , A 节点需要将调用的数据信息通过网络传递到 B 节点 , B 节点根据接收到的数据信息找到具体的接口执行 , 并将执行的结果通过网络返回给节点 A 。
RPC 框架封装网络传输、序列化、负载均衡、故障剔除等通用能力 , 使得 A 节点可以像调用本地方法一样简单地调用远程接口 。
SCF 是 58 自主研发的 RPC 框架 , 致力于在分布式环境下提供高性能、高可靠和透明化的 RPC 远程调用方案 。
服务管理平台是基于 SCF 框架的服务治理平台 , 具有服务节点自动注册与发现、负载均衡、服务鉴权、全方位监控、完善的告警等特点 。
二、整体架构
![58集团RPC框架SCF的设计与实践](http://img.jiangsulong.com/220405/001032DG-0.jpg)
文章插图
整体架构
- SCF 服务方: 指使用 SCF 框架服务端能力 , 提供可以被远程调用的接口的应用 。
- SCF 调用方: 指使用 SCF 框架客户端能力 , 调用服务方提供接口的应用 。
- 控制中心: 核心是维护 SCF 服务方和 SCF 调用方之间的调用关系 , 生成调用方需要使用的服务配置信息 , 支持当调用关系调整时 , 实时向调用方推送新的配置信息 。
- 监控中心: 统一收集服务方和调用方的流量数据 , 并提供实时告警功能 , 可以提高业务人员对服务的整体把控能力 , 帮助服务负责人提高服务稳定性 。
- 可视化管理平台: 提供给业务的管理界面 , 可以查看服务方和调用方的流量监控数据、配置服务方和调用方的调用信息、设置丰富的告警等 。
控制中心、监控中心和可视化管理平台三个部分属于服务管理平台 , 是对 SCF 框架基本能力的补充 , 对服务的治理提供了有效的手段 。
三、SCF 框架3.1SCF 调用模式
![58集团RPC框架SCF的设计与实践](http://img.jiangsulong.com/220405/001032GR-1.jpg)
文章插图
SCF 调用模式
RPC 框架最基本的能力是提供远程调用 , SCF 提供了同步调用和回调调用两种调用模式 。
![58集团RPC框架SCF的设计与实践](http://img.jiangsulong.com/220405/0010325023-2.jpg)
文章插图
SCF 调用模式
3.2同步调用
同步调用是业务使用最多的一种方式 , 也是框架默认的调用方式 。调用方在调用服务的接口时 , 执行调用的线程会被阻塞 , 等待调用完成 。如果服务方返回了结果或等待时间超过设置的超时时间 , 线程被唤醒 , 获取返回结果或捕获超时的异常 。
3.3回调调用
回调调用是指调用服务接口之后 , 接口立即返回 , 调用接口的线程不需要等待服务端的返回结果 , 因此不存在阻塞的情况 。如果服务端有返回结果或等待超过设置的超时时间 , 由框架中单独的回调线程处理返回的结果或超时异常 。因此在调用前必须设置接口的回调实现类 。
3.4超时处理
在实际生产环境中 , 服务端方健康状况不可控、网络情况复杂可能出现各种异常情况 。因此 , 上述同步或回调调用中 , 不是所有的调用都一定能得到服务方返回的结果 , 为了避免调用方无限制的等待 , 必须设置调用的超时时间 。在超过设置的时间内没有得到返回结果 , 就通过超时异常的方式通知调用方 。
SCF 中使用经典的 TimeWheel 算法实现调用任务的过期 。
![58集团RPC框架SCF的设计与实践](http://img.jiangsulong.com/220405/0010325193-3.jpg)
文章插图
TimeWheel
内部使用数组模拟类似时钟的环形数据结构 , 每一个格子代表一个时间间隔 , 每个格子对应一个任务的链表 , 在添加过期任务时 , 通过过期时间和当前时间计算出任务应该在第几个格子里并计算应该是走到第几圈时触发超时 。
假设图中每个格子表示 100ms , 则一圈代表 800ms , 当前是走到第 1 圈的第 2 个格子 。如果任务 500ms 后超时 , (500+200)% 800=7 , 因此将任务放到第 7 个格子对应的链表中 , 并标记第 1 圈超时 。如果任务 1000ms 后超时 , (1000+200)% 800=4 , (1000+200)/800=1 , 因此将任务放入第 4 个格子对应的链表中 , 并标记第 2 圈超时 。
推荐阅读
- Python Django框架
- 5大Java自动化测试框架
- Centos7环境下快速安装Pyspider WEB爬虫框架和phantomjs浏览器
- ThinkPHP框架的优缺点是什么
- 框架分析+环境搭建+实例源码 SSH框架总结
- JAVA三大框架Struts、hibernate和spring的各自作用是什么?
- JavaWaf框架
- 十四款常见的Web前端开发框架
- 6种微服务RPC框架,你知道几个?
- PHP的微服务框架预览