灵感来源于《生化危机》中的超级计算机(Red Queen), 分布式key-value存储在分布式系统中地位与其接近
这是一个基于raft算法实现的可靠分布式key-value存储, 并在内部提供了诸如 分布式锁...之类的高级功能
go get github.com/RealFax/RedQueen@latest
基于raft算法实现的RedQueen具备单节点写入(Leader node)多节点读取(Follower node)的特性
Set
TrySet
Delete
Lock
Unlock
TryLock
Get
PrefixScan
Watch
内部高级功能需要进行长时间的实验才能保证他的可靠性
RedQueen在内部实现了一个互斥锁, 并提供grpc接口调用
读取顺序 环境变量 | 程序参数 -> 配置文件
RQ_CONFIG_FILE <string>
配置文件路径. note: 设置该参数后, 将会忽略以下参数, 使用配置文件RQ_NODE_ID <string>
节点IDRQ_DATA_DIR <string>
节点数据存储目录RQ_LISTEN_PEER_ADDR <string>
节点间通信监听(raft rpc)地址, 不可为0.0.0.0
RQ_LISTEN_CLIENT_ADDR <string>
节点服务监听(grpc api)地址RQ_LISTEN_HTTP_ADDR <string>
节点服务监听(http api)地址RQ_MAX_SNAPSHOTS <uint32>
最大快照数量RQ_REQUESTS_MERGED <bool>
是否开启合并请求RQ_AUTO_TLS <bool>
是否启用auto tlsRQ_TLS_CERT_FILE <string>
tls certificate文件路径RQ_TLS_KEY_FILE <string>
tls key文件路径RQ_STORE_BACKEND <string [nuts]>
存储后端(默认nuts)RQ_NUTS_NODE_NUM <int64>
RQ_NUTS_SYNC <bool>
是否启用同步写入磁盘RQ_NUTS_STRICT_MODE <bool>
是否启用调用检查RQ_NUTS_RW_MODE <string [fileio, mmap]>
写入模式RQ_CLUSTER_BOOTSTRAP <string>
集群信息 (例如 [email protected]:5290, [email protected]:4290)RQ_DEBUG_PPROF <bool>
启用pprof调试RQ_BASIC_AUTH <string>
basic auth的信息 (例如 admin:123456,root:toor)
-config-file <string>
配置文件路径. note: 设置该参数后, 将会忽略以下参数, 使用配置文件-node-id <string>
节点ID-data-dir <string>
节点数据存储目录-listen-peer-addr <string>
节点间通信监听(raft rpc)地址, 不可为0.0.0.0
-listen-client-addr <string>
节点服务监听(grpc api)地址-listen-http-addr <string>
节点服务监听(http api)地址-max-snapshots <uint32>
最大快照数量-requests-merged <bool>
是否开启合并请求-auto-tls <bool>
是否启用auto tls-tls-cert-file <string>
tls certificate文件路径-tls-key-file <string>
tls key文件路径-store-backend <string [nuts]>
存储后端(默认nuts)-nuts-node-num <int64>
-nuts-sync <bool>
是否启用同步写入磁盘-nuts-strict-mode <bool>
是否启用调用检查-nuts-rw-mode <string [fileio, mmap]>
写入模式-cluster-bootstrap <string>
集群信息 (例如 [email protected]:5290, [email protected]:4290)-d-pprof <bool>
启用pprof调试-basic-auth <string>
basic auth信息 (例如 admin:123456,root:toor)
[node]
id = "node-1"
data-dir = "/tmp/red_queen"
listen-peer-addr = "127.0.0.1:5290"
listen-client-addr = "127.0.0.1:5230"
listen-http-addr = "127.0.0.1:5231"
max-snapshots = 5
requests-merged = false
[node.tls]
auto = true
cert-file = ""
key-file = ""
[store]
# backend options
# nuts
backend = "nuts"
[store.nuts]
node-num = 1
sync = false
strict-mode = false
rw-mode = "fileio"
[cluster]
[[cluster.bootstrap]]
name = "node-1"
peer-addr = "127.0.0.1:5290"
[[cluster.bootstrap]]
name = "node-2"
peer-addr = "127.0.0.1:4290"
[misc]
pprof = false
[basic-auth]
root = "toor"
admin = "123456"
关于更多用法(例如docker单/多节点部署), 请参考 Wiki 🤩
- nutsdb (Apache License 2.0)
- hashicorp raft (MPL License 2.0)
- boltdb (MIT License)
- BurntSushi toml (MIT License)
- google uuid (BSD-3-Clause License)
- grpc (Apache License 2.0)
- protobuf (BSD-3-Clause License)