前言
RPC的文章看了不少,但是始终感觉似懂非懂,古人说的”纸上得来终觉浅,绝知此事要躬行”还是很有道理的。
所以我希望通过一个真正的项目,来加深对RPC的认识。
这应该会是一个系列文章,至少在我动笔的这一刻是有非常强烈的意愿完成它的。
主要参考CSDN博客一起写RPC框架开篇说明
2018-09-03续,果不其然,还是因为诸多事情耽搁了。
今天又看了一些RPC的文章,发现黄勇老师的轻量级分布式 RPC 框架
写的非常清晰易懂。于是整理出一些关键点出来,方便自己实现。
编写RPC框架的步骤如下:
- 编写服务接口
- 编写服务接口的实现类
- 配置服务端
- 启动服务器并发布服务
- 实现服务注册
- 实现 RPC 服务器
- 配置客户端
- 实现服务发现
- 实现 RPC 代理
- 发送 RPC 请求
注册中心的职责
核心的职责如下:
- 服务提供者向其发送它提供的服务的一些基本信息,并完成注册
- 服务消费者订阅服务
- 服务提供者下线的时候,实时通知服务消费者某个服务下线
除此之外,还有一些锦上添花但在真实的业务中必须得有的功能,比如:
- 服务审核,这是服务治理最最简单的操作了,因为某个服务提供者上线之后,都是需要审核的,如果不审核,可能会造成很多不必要的麻烦,有可能有些开发小新,不小心把开发环境的服务向线上服务注册,如果不审核,直接通过的话,就会造成线上接口调用线下服务的尴尬局面
- 负载策略的记录,比如默认是随机加权策略,如果管理者希望改成加权轮询的策略,需要通知服务消费者,访问策略的改变
- 手动改变某个服务的访问权重,比如某个服务默认负重是50,(最大100)的时候,但是此时这个服务实例所在的机器压力不大的时候,而其他该服务实例压力很大的时候,可以适当的增加该服务的访问权重,所以我们可以在注册中心修改它的负重,然后通知服务消费者,这样就可以动态的修改负重了
- 一些持久化的操作,因为注册中心是无状态的,假如某个注册中心实例重启之后,以前的一些审核信息,修改的访问策略信息就会消失,这样就会需要用户重新一一审核,这是很麻烦的,所以需要将这些信息落地,持久化到硬盘,然后每次重启注册中心实例的时候,去读取这些信息
基于ZooKeeper的注册中心节点树结构如下:
计划(暂定)
- 2018-07-08 架构设计,功能(细节)设计
- 2018-07-15 网络传输模型,序列化部分
- 2018-07-22 服务端框架
- 2018-07-29 客户端框架
- 2018-08-06 负载均衡
- 2018-08-13 服务降级
- 2018-08-20 测试与优化