valkeyrie
provides a Go
native library to store metadata using Distributed Key/Value stores (or common databases).
Its goal is to abstract common store operations (Get, Put, List, etc.) for multiple Key/Value store backends.
For example, you can easily implement a generic Leader Election algorithm on top of it (see the docker/leadership repository).
You can refer to Examples for a basic overview of the library.
A storage backend in valkeyrie
implements (fully or partially) the Store interface.
Calls | Consul | Etcd | Zookeeper | Redis | BoltDB | DynamoDB |
---|---|---|---|---|---|---|
Put | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Get | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Delete | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Exists | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Watch | ✓ | ✓ | ✓ | ✓ | ||
WatchTree | ✓ | ✓ | ✓ | ✓ | ||
NewLock (Lock/Unlock) | ✓ | ✓ | ✓ | ✓ | ✓ | |
List | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
DeleteTree | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
AtomicPut | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
AtomicDelete | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
- Consul versions >=
0.5.1
because it uses Sessions withDelete
behavior for the use ofTTLs
(mimics zookeeper's Ephemeral node support), If you don't plan to useTTLs
: you can use Consul version0.4.0+
. - Etcd versions >=
2.0
with APIv2 (deprecated) and >=3.0
APIv3 (recommended). - Zookeeper versions >=
3.4.5
. - Redis versions >=
3.2.6
. Key space notification needs to be enabled to have access to Watch and Lock methods. - Boltdb and DynamoDB shouldn't be subject to any version dependencies.
Distributed Key/Value stores often have different concepts for managing and formatting keys and their associated values. Even though valkeyrie
tries to abstract those stores aiming for some consistency, in some cases it can't be applied easily.
Please refer to the docs/compatibility.md file to see what are the special cases for cross-backend compatibility.
Calls like WatchTree
may return different events (or number of events) depending on the backend (for now, Etcd
and Consul
will likely return more events than Zookeeper
that you should triage properly).
Only Consul
and etcd
have support for secure communication and you should build and provide your own config.TLS
object to feed the client. Support is planned for zookeeper
and redis
.
Want to contribute to valkeyrie? Take a look at the Contribution Guidelines.
Apache License Version 2.0