• 请不要在回答技术问题时复制粘贴 AI 生成的内容
linbingqinag
V2EX  ›  程序员

raft 算法中的 term 一直在增长的问题

  •  
  •   linbingqinag · Sep 3, 2018 · 3641 views
    This topic created in 2995 days ago, the information mentioned may be changed or developed.

    raft 算法中的 term 值随着选举次数一直在增加,到某一天到达了 uint64 的上限,想问下有什么办法可以阻止这个现象,目前的想法是在 leader 做同步的时候重置到一个指定的数值,不知道是否可行

    Supplement 1  ·  Sep 3, 2018
    应用的场景是不排除部分做恶的节点,可能在加入的时候将自己的 term 值修改为很高的一个值,
    Supplement 2  ·  Sep 3, 2018
    leader 是有限制的,每个是 5 分钟
    Supplement 3  ·  Sep 3, 2018
    时间到到达之后是要让他下线的,重新开始一轮
    17 replies  •  2018-09-04 09:18:52 +08:00
    hellotitan
    hellotitan
    Sep 3, 2018 via Android
    1
    好问题,占坑等大佬
    Monad
    Monad
    Sep 3, 2018❤️3
    2
    max(uint64) = 18446744073709551616 ≈ 1.8 * 10^19
    以 5GHZ 的 CPU 每条指令都是加一的话 需要跑约 3689348814 秒 约等于 116 年
    116 年要是都不停下的进程 可以考虑拍照留恋 :)
    JohnSmith
    JohnSmith
    Sep 3, 2018
    3
    1.term 减小会导致算法变复杂(raft 算法设计严重依赖 term 自增
    2.raft 通过 prevote 指令优化 term 无意义自增
    3.如楼上所说,并且 term 不是频繁变动的参数,没太大必要做优化
    flikecn
    flikecn
    Sep 3, 2018 via Android
    4
    prevote 机制可以解决,etcd 的 raft lib 已经实现了。
    hyperdak288
    hyperdak288
    Sep 3, 2018
    5
    这让我想起以前同学公司讨论的事,一个有且只有 100 条数据的表,主键应该用 int 还是 bigint,这个事他们讨论了一天
    linbingqinag
    linbingqinag
    OP
    Sep 3, 2018
    6
    @flikecn 嗯,可以的,我看看
    sy20030260
    sy20030260
    Sep 3, 2018 via Android
    7
    好久没见这样高质量的讨论,马一下
    XiaoxiaoPu
    XiaoxiaoPu
    Sep 3, 2018
    8
    uint64 不够还有 uint128,可以用到宇宙毁灭了
    linbingqinag
    linbingqinag
    OP
    Sep 3, 2018
    9
    @XiaoxiaoPu 如果新加入的节点是作恶节点,并且开始 term 修改为了 int64/int128 的最大值,那么他有可能是作为 leader,当他下线的时候此时 follower+1, 已经超过了最大的值,程序岂不是要死了?
    sampeng
    sampeng
    Sep 3, 2018
    10
    为什么会有作恶的?
    linbingqinag
    linbingqinag
    OP
    Sep 3, 2018
    11
    @sampeng 代码是放在一个共享的环境中,每个节点的持有人都是可以看到并且修改的,由于 leader 是有某些利益的,所以会有一部分的作恶
    linbingqinag
    linbingqinag
    OP
    Sep 3, 2018
    12
    @linbingqinag 类似于去中心化的结构
    linbingqinag
    linbingqinag
    OP
    Sep 3, 2018
    13
    目前觉得 prevote 是比较好的解决办法
    sampeng
    sampeng
    Sep 3, 2018
    14
    @linbingqinag 怎么听着这么像挖矿。。。
    linbingqinag
    linbingqinag
    OP
    Sep 3, 2018
    15
    wangdashuai
    wangdashuai
    Sep 3, 2018❤️1
    16
    是不是吧 raft 和区块链弄混了。raft 中的节点都是自己的节点,不会作恶。raft 并不解决拜占庭将军问题 。
    Reficul
    Reficul
    Sep 4, 2018 via Android
    17
    raft 并不防攻击啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2109 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 13:02 · PVG 21:02 · LAX 05:02 · JFK 08:02
    ♥ Do have faith in what you're doing.