V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
linbingqinag
V2EX  ›  程序员

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

  •  
  •   linbingqinag · 2018-09-03 11:26:02 +08:00 · 2647 次点击
    这是一个创建于 2303 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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