sofastack / sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
https://www.sofastack.tech/projects/sofa-jraft/
Apache License 2.0
3.59k stars 1.15k forks source link

请问wiki给出的Benchmark数据,测试时raft log sync=true吗? #149

Closed shiftyman closed 5 years ago

shiftyman commented 5 years ago

如题,请问benchmark时raft log是同步刷盘吗?

shiftyman commented 5 years ago

另外,测试环境磁盘的测试数据方便提供下吗?

fengjiachun commented 5 years ago

是的 raft log 是同步刷盘的,benchmark 的配置见这里 https://github.com/alipay/sofa-jraft/blob/master/jraft-example/config/benchmark_server.yaml

fengjiachun commented 5 years ago

磁盘的测试数据?没懂是什么意思?

shiftyman commented 5 years ago

指磁盘的iops、throughput等

fengjiachun commented 5 years ago

不好意思当时没保留这些数据

shiftyman commented 5 years ago

请教一个问题,RheaKV的状态机RocksRawKVStore,默认配置为sync=true,有必要吗? 状态机的数据是每次重启都会清空,通过log和snapshot恢复的,那么是否还需要sync=true? 如果sync=false,对于snapshot会不会有影响?比如snapshot得到的数据可能是不完整的?

另外,3节点的raft,还有没有必要raft log的sync=true?

麻烦指教~

fengjiachun commented 5 years ago

请教一个问题,RheaKV的状态机RocksRawKVStore,默认配置为sync=true,有必要吗? 状态机的数据是每次重启都会清空,通过log和snapshot恢复的,那么是否还需要sync=true? 如果sync=false,对于snapshot会不会有影响?比如snapshot得到的数据可能是不完整的?

另外,3节点的raft,还有没有必要raft log的sync=true?

麻烦指教~

Hi,指教不敢当 https://github.com/facebook/rocksdb/wiki/How-to-backup-RocksDB%3F#advanced-usage

rocksdb 文档也有提到,sync=false 时 backup 可能出现不一致 (当机器 crash 重启的时候),此时 snapshot 就会不一致,rheakv 中还有一种 checkpoint 的 snapshot 机制,我理解都会因为 sync=false而导致数据不一致

但是对于multi-raft-group 的情况,rheakv 是采用 ingestSstFiles 的方式做 snapshot,这种情况 sync=false 是可以的没有问题

对于 raft log,我觉得 sync 都应该为 true

fengjiachun commented 5 years ago

emmm 纠正一下,backup 的话应该只要 BackupableDBOptions::sync=true 就可以了,WriteOptions::sync=false 应该也是可以的

fengjiachun commented 5 years ago

@shiftyman 我提了一个 issue,考虑将 RocksRawKVStore 的 sync 默认值改为 false,也同时考虑关掉 WAL

shiftyman commented 5 years ago

nice!这个改动是非常好的~ 下面还想请教下,如果raft log sync = false,那么对于非大多数同时宕机的情况,会有影响吗?一台机丢了raft log,貌似也可以同步回来?

fengjiachun commented 5 years ago

raft log 我是这样想的 sync = true 时多数派甚至全部机器 crash 掉,虽然集群是不可用的,但是数据是不会丢失的; sync = false 的话全部机器 crash 掉可能就导致已经 apply 到状态机的数据以及 raft log 全部丢掉了。

另外对于 leader 来讲,raft log 形成多数派才 apply,一个 follower 在应答了 AppendEntries 后却因为机器 crash 丢掉了 log,这很奇怪

shiftyman commented 5 years ago

你说的有理,如果follower丢掉了,可能导致已commit数据丢失的。