raftregister
所属分类:数据库系统
开发工具:Java
文件大小:0KB
下载次数:0
上传日期:2021-09-14 06:11:14
上 传 者:
sh-1993
说明: 使用 raft 作为共识算法的 注册中心,
(Use raft as the registry of consensus algorithm,)
文件列表:
autoconfig/ (0, 2021-09-13)
autoconfig/build.gradle (389, 2021-09-13)
autoconfig/src/ (0, 2021-09-13)
autoconfig/src/main/ (0, 2021-09-13)
autoconfig/src/main/java/ (0, 2021-09-13)
autoconfig/src/main/java/ruqinhu/ (0, 2021-09-13)
autoconfig/src/main/java/ruqinhu/register/ (0, 2021-09-13)
autoconfig/src/main/java/ruqinhu/register/RegisterClient.java (607, 2021-09-13)
autoconfig/src/main/resources/ (0, 2021-09-13)
autoconfig/src/main/resources/META-INF/ (0, 2021-09-13)
autoconfig/src/main/resources/META-INF/spring.factories (96, 2021-09-13)
build.gradle (1118, 2021-09-13)
core/ (0, 2021-09-13)
core/build.gradle (2029, 2021-09-13)
core/src/ (0, 2021-09-13)
core/src/main/ (0, 2021-09-13)
core/src/main/java/ (0, 2021-09-13)
core/src/main/java/client/ (0, 2021-09-13)
core/src/main/java/client/RegisterClient.java (2836, 2021-09-13)
core/src/main/java/client/RegisterClientConfig.java (1149, 2021-09-13)
core/src/main/java/client/RegisterClientService.java (384, 2021-09-13)
core/src/main/java/client/RegisterClientServiceImpl.java (2779, 2021-09-13)
core/src/main/java/com/ (0, 2021-09-13)
core/src/main/java/com/ruqinhu/ (0, 2021-09-13)
core/src/main/java/com/ruqinhu/PullRequest.java (13583, 2021-09-13)
core/src/main/java/com/ruqinhu/PullRequestOrBuilder.java (362, 2021-09-13)
core/src/main/java/com/ruqinhu/PullRequestProto.java (2122, 2021-09-13)
core/src/main/java/com/ruqinhu/RegisterRequest.java (21184, 2021-09-13)
core/src/main/java/com/ruqinhu/RegisterRequestOrBuilder.java (1062, 2021-09-13)
core/src/main/java/com/ruqinhu/RegisterRequestProto.java (2936, 2021-09-13)
core/src/main/java/com/ruqinhu/RegisterResponse.java (29866, 2021-09-13)
core/src/main/java/com/ruqinhu/RegisterResponseOrBuilder.java (1587, 2021-09-13)
core/src/main/java/com/ruqinhu/RegisterResponseProto.java (3131, 2021-09-13)
core/src/main/java/duplex/ (0, 2021-09-13)
core/src/main/java/duplex/ServerPullCliClientServiceImpl.java (854, 2021-09-13)
core/src/main/java/duplex/rpc/ (0, 2021-09-13)
core/src/main/java/duplex/rpc/ServerPullRequest.java (185, 2021-09-13)
core/src/main/java/duplex/rpc/ServerPullRequestProcessor.java (1095, 2021-09-13)
... ...
## 一. 入口
测试的入口,test 包中 RegisterServer1,RegisterServer2,RegisterServer3 和 RpcClient1,RpcClient2
RegisterServer4 当新节点启动时会自动加入稳定的集群中。测试代码中会手动调用 addPeer()
## 二. 组件
raft 相关实体类:
server 端:
**RegisterStateMachine**: 处理应用 Node#apply(task) 提交的日志,比如注册信息等数据,并存储
**RegisterStorage**: 存储和获取注册信息,默认实现类使用 guava Cache 来提供注册信息定时过期能力
**RegisterServer**: 持有 node ,通过 node 提供 raft 能力。
也持有 CliClientService(Client CommandLine Service),提供操作 peer 的能力
**RegisterServerConfig**: 封装 raft 相关的服务端配置项
client端:
**RegisterService**: 提供供客户端调用的方法,目前有两个,注册 和 获取注册信息
**RegisterClient**: 持有 RegisterService 对象,对外提供注册中心 client 的相关功能
**RegisterClientConfig**: 封装 raft 相关客的户端配置项
## 三. 重要 api
server: RegisterStateMachine#onApply(Iterator): 应用 task。如客户端注册的信息和服务间共享的数据等,存储到 storage 中
client: RegisterClientServiceImpl#addAndGetRegister(Map): 持有 CliClientServiceImpl 获取 rpc 能力,向 server
发送注册和获取信息请求
server: RegisterRequestProcessor#handleRequest(RpcContext,RegisterRequest): netty 的请求处理 processor。处理用户的注册请求,持有 RegisterService,封装 task 发送到状态机,交给状态机处理
client: RenewScheduleTask#run(): 客户端调用 addAndGetRegister() 后,自动开启一个定时续约线程,进行续约操作
## 四. 展望
注册中心采用 push 模式, pull 模式需要客户端和服务端保持双工通信,暂未实现
注册中心也可当作配置中心使用,存储的信息不设置过期时间,交由 raft 存储,raft 提供了宕机从日志恢复数据等功能
通过 raft 提供的一致性状态机,解决了复制、修复、节点管理等问题,开发者仅仅需要关心业务相关操作
使用 raft 可以构建很多应用,比如 高可靠元信息管理、分布式锁、分布式存储 等
双工通信需要服务端在进行 processor 的时候,保存客户端的地址,开启线程,定时发送拉取注册信息接口给客户端。
## 更新:
2021-08-11
增加服务端拉取客户端注册信息,即拉模式,入口在 duplex 包下。
2021-08-12
调整包结构,增加 springboot starter 注入客户端方式
2021-08-17
增加使用 metric 监控的线程池
2021-09-13
使用 grpc 和 proto 作为客户端和服务端交互的 rpc 和 协议
近期下载者:
相关文件:
收藏者: