【Ratis】Grpc.proto文件里定义的一些RPC

一、 总览

Raft的提供了三种类型的RPC。分别如下:

  1. RaftClientProtocolService:client与server之间的交互RPC,分为ordered和unordered,一种是有序的异步请求流、一种是无序的异步请求流。
  2. RaftServerProtocolService:ratis server之间的rpc操作。请求选票requestVote(论文里有详细定义)、开始leader选举、appendEntries(论文里有详细定义)、install snapshot、readIndex(论文里跟安全性相关的操作)。
  3. AdminProtocolService:用于ratis集群的管理操作。例如设置配置、转换leader、snapshot管理、group的列举&查询&管理等。

二、 Grpc.proto 文件源码

这个proto文件里定义了ratis里用的RPC。

// client与server交互的rpc
service RaftClientProtocolService {
  // A client-to-server stream RPC to ordered async requests
  rpc ordered(stream ratis.common.RaftClientRequestProto)
      returns (stream ratis.common.RaftClientReplyProto) {}

  // A client-to-server stream RPC for unordered async requests
  rpc unordered(stream ratis.common.RaftClientRequestProto)
      returns (stream ratis.common.RaftClientReplyProto) {}
}

// server之间交互的rpc
service RaftServerProtocolService {
  rpc requestVote(ratis.common.RequestVoteRequestProto)
      returns(ratis.common.RequestVoteReplyProto) {}

  rpc startLeaderElection(ratis.common.StartLeaderElectionRequestProto)
      returns(ratis.common.StartLeaderElectionReplyProto) {}

  rpc appendEntries(stream ratis.common.AppendEntriesRequestProto)
      returns(stream ratis.common.AppendEntriesReplyProto) {}

  rpc installSnapshot(stream ratis.common.InstallSnapshotRequestProto)
      returns(stream ratis.common.InstallSnapshotReplyProto) {}

  rpc readIndex(ratis.common.ReadIndexRequestProto)
      returns(ratis.common.ReadIndexReplyProto) {}
}

// 管理ratis集群的rpc
service AdminProtocolService {
  // A client-to-server RPC to set new raft configuration
  rpc setConfiguration(ratis.common.SetConfigurationRequestProto)
      returns(ratis.common.RaftClientReplyProto) {}

  rpc transferLeadership(ratis.common.TransferLeadershipRequestProto)
      returns(ratis.common.RaftClientReplyProto) {}

  // A client-to-server RPC to add a new group
  rpc groupManagement(ratis.common.GroupManagementRequestProto)
      returns(ratis.common.RaftClientReplyProto) {}

  rpc snapshotManagement(ratis.common.SnapshotManagementRequestProto)
      returns(ratis.common.RaftClientReplyProto) {}

  rpc leaderElectionManagement(ratis.common.LeaderElectionManagementRequestProto)
      returns(ratis.common.RaftClientReplyProto) {}

  rpc groupList(ratis.common.GroupListRequestProto)
      returns(ratis.common.GroupListReplyProto) {}

  rpc groupInfo(ratis.common.GroupInfoRequestProto)
      returns(ratis.common.GroupInfoReplyProto) {}
}

相关推荐

  1. 【Ratis】Grpc.proto文件定义一些RPC

    2023-12-06 11:38:03       40 阅读
  2. 【BlossomRPC】一个完整含源码和文档RPC项目

    2023-12-06 11:38:03       13 阅读
  3. Golang 实现一个简单 RPC 服务

    2023-12-06 11:38:03       15 阅读
  4. ORACLE RAC一些基本理论知识

    2023-12-06 11:38:03       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 11:38:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 11:38:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 11:38:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 11:38:03       18 阅读

热门阅读

  1. c++primer 2.1.2含有无符号数类型的表达式

    2023-12-06 11:38:03       28 阅读
  2. Vue3中定义变量是选择ref还是reactive?

    2023-12-06 11:38:03       31 阅读
  3. KM算法,C语言版本和Matlab版本

    2023-12-06 11:38:03       37 阅读
  4. Flask 最佳实践(二)

    2023-12-06 11:38:03       31 阅读
  5. jQuery&layui

    2023-12-06 11:38:03       33 阅读
  6. xml中的特殊字符

    2023-12-06 11:38:03       26 阅读