Skip to content

1 整体结构

flabby edited this page Jun 27, 2017 · 3 revisions

单节点的结构图

Floyd_node

说明

  • 各种线程:
    • PeerThread(N-1个):
      • 负责和其他Floyd节点通信;
      • 发送RequestVote和AppendEntries请求给其他节点的WorkerThread,并统计更新结果;
      • 每个Peer负责一个节点;N个节点的Floyd集群,每个节点有(N-1)个PeerThread;
    • WorkerThread(1个):
      • 负责接收对端Peer的请求;
      • Leader节点会接收Follower节点转发的用户请求(例如,Read/Write/Delete)
    • PrimaryThread (1个):
      • 节点的主逻辑线程;
      • 负责和Peer线程,Apply线程交互;
      • RequstVote相关逻辑:
        • Follower和Candidate时,维护选主的Timer;
          • 当选主Timer超时,触发所有Peer RequestVote;
          • 当Peer的RequestVote请求,获得大多数投票时,节点状态更新为Leader;触发一次AppendEntries;
      • 用户请求和AppendEntries的逻辑:
    • ApplyThread(1个):
      • 当CommitIndex更新后,会触发Apply,Apply成功后,唤醒阻塞的用户线程;
    • UserThread(多个):
      • Floyd作为一个库,用户的线程;
  • 其他组件:
    • Log: Raft的log模块;
    • DB: nemo-RocksDB

稳定状态的3个节点的集群

Floyd multi

  • Follower会把一致性的Read/Write/Delete等用户请求转发给Leader的Worker线程执行;
  • Leader线程通过Peer线程和集群的其他节点交互;

简介

安装使用

设计与实现

工具

  • FileLog解析工具log_parser

测试

Clone this wiki locally