gathering distributed key-value datastores to become a cluster

go-ds-cluster

gathering distributed key-value datastores to become a cluster

About The Project

This project is going to implement go-datastore in a form of cluster.

IPFS is awsome, we like to use ipfs for data sharing. And IPFS using implementation of go-datastore as base storage.

There are several implementation of go-datastore:

They are mainly focus on storing data within one PC. Single PC has limit on I/O, there lacks a way to take advantage of distributed system with several or more PCs.

We knew ipfs-cluster, it offers a way to manage pin-set within multiple peers. But we thought it is more suitable for manage data backups and recovery. We expect that even only one ipfs peer could also take advantage of distributed storage.

Architecture

  • data node has two basic components
    • datastore offering key-value strorage
    • cluster instance maintains cluster related logic
  • any node in the cluster can be used has ipfs datastore, sharding data to data nodes in the cluster
  • a key-value table of all data in the datastore has been maintained by every node
  • the relation between hash slots and data node also been maintained by every node

Roadmap

  • data sharding and hash slots maintaining
  • communication module based on libp2p between data nodes
  • consensus module build up
  • hash slots re-allocate and re-balance strategy
  • data migration after hash slots re-allocate or re-balance to support dynamically adding or removing nodes
  • authentication and data management

Getting Started

Prerequisites

Installation

Usage

Roadmap

Contributing

PRs are welcome!

License

Distributed under the MIT License.

Contact

Acknowledgements

Comments
  • Set bootstrap nodes

    Set bootstrap nodes

    If we have bootstrap settings, the running bootstrap nodes can serving the cluster config info and hash slots info. The rest cluster nodes can get config info from bootstrap nodes saving manual copy and paste of config infos.

  • support option to disable delete operation on server node side

    support option to disable delete operation on server node side

    There has one situation that we just want keep all the data in ds-cluster, don't want any delete operation on the cluster. A config to disable delete operation would be nice when starting the server nodes, like: --disable-delete=true

  • Increase both read and write timeout for libp2p io

    Increase both read and write timeout for libp2p io

    Currently the read and write timeout is hard coded and too short, it will crash when wait io for a shot time.

    Increase both read and write timeout to 20s.

    Should be nice if make it configable.

  • Is it faster for mongodb to use connection pool?

    Is it faster for mongodb to use connection pool?

    https://github.com/filedrive-team/go-ds-cluster/blob/10c8cf55443754f858e74f3261a5923150325745/mongods/db.go#L76

    I recommend using mongodb's connection pool for this process, which might be a nice speed boost.

  • The plugin for ipfs may lost connect to ds-cluster and lack retry strategy

    The plugin for ipfs may lost connect to ds-cluster and lack retry strategy

    Currently when the connection to ds-cluster is lost, we had to restart the ipfs daemon to re-connect to ds-cluster. Really need a way to auto re-connect to ds-cluster.

A distributed key-value storage system developed by Alibaba Group

Product Overview Tair is fast-access memory (MDB)/persistent (LDB) storage service. Using a high-performance and high-availability distributed cluster

Dec 31, 2022
Distributed-Services - Distributed Systems with Golang to consequently build a fully-fletched distributed service

Distributed-Services This project is essentially a result of my attempt to under

Jun 1, 2022
Elastic Key-Value Storage With Strong Consistency and Reliability
Elastic Key-Value Storage With Strong Consistency and Reliability

What is Elasticell? Elasticell is a distributed NoSQL database with strong consistency and reliability. Compatible with Redis protocol Use Elasticell

Dec 28, 2022
The TinyKV course builds a key-value storage system with the Raft consensus algorithm.
The TinyKV course builds a key-value storage system with the Raft consensus algorithm.

The TinyKV Course The TinyKV course builds a key-value storage system with the Raft consensus algorithm. It is inspired by MIT 6.824 and TiKV Project.

Nov 19, 2021
Distributed lock manager. Warning: very hard to use it properly. Not because it's broken, but because distributed systems are hard. If in doubt, do not use this.

What Dlock is a distributed lock manager [1]. It is designed after flock utility but for multiple machines. When client disconnects, all his locks are

Dec 24, 2019
Compute cluster (HPC) job submission library for Go (#golang) based on the open DRMAA standard.

go-drmaa This is a job submission library for Go (#golang) which is compatible to the DRMAA standard. The Go library is a wrapper around the DRMAA C l

Nov 17, 2022
Raft library Raft is a protocol with which a cluster of nodes can maintain a replicated state machine.

Raft library Raft is a protocol with which a cluster of nodes can maintain a replicated state machine. The state machine is kept in sync through the u

Oct 15, 2021
distributed data sync with operational transformation/transforms

DOT The DOT project is a blend of operational transformation, CmRDT, persistent/immutable datastructures and reactive stream processing. This is an im

Dec 16, 2022
High performance, distributed and low latency publish-subscribe platform.
High performance, distributed and low latency publish-subscribe platform.

Emitter: Distributed Publish-Subscribe Platform Emitter is a distributed, scalable and fault-tolerant publish-subscribe platform built with MQTT proto

Jan 2, 2023
Fast, efficient, and scalable distributed map/reduce system, DAG execution, in memory or on disk, written in pure Go, runs standalone or distributedly.

Gleam Gleam is a high performance and efficient distributed execution system, and also simple, generic, flexible and easy to customize. Gleam is built

Jan 1, 2023
Go Micro is a framework for distributed systems development

Go Micro Go Micro is a framework for distributed systems development. Overview Go Micro provides the core requirements for distributed systems develop

Jan 8, 2023
Simplified distributed locking implementation using Redis

redislock Simplified distributed locking implementation using Redis. For more information, please see examples. Examples import ( "fmt" "time"

Dec 24, 2022
A distributed lock service in Go using etcd

locker A distributed lock service client for etcd. What? Why? A distributed lock service is somewhat self-explanatory. Locking (mutexes) as a service

Sep 27, 2022
Skynet is a framework for distributed services in Go.
Skynet is a framework for distributed services in Go.

##Introduction Skynet is a communication protocol for building massively distributed apps in Go. It is not constrained to Go, so it will lend itself n

Nov 18, 2022
Go Open Source, Distributed, Simple and efficient Search Engine

Go Open Source, Distributed, Simple and efficient full text search engine.

Dec 31, 2022
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.

Dapr is a portable, serverless, event-driven runtime that makes it easy for developers to build resilient, stateless and stateful microservices that run on the cloud and edge and embraces the diversity of languages and developer frameworks.

Jan 5, 2023
A distributed, proof of stake blockchain designed for the financial services industry.

Provenance Blockchain Provenance is a distributed, proof of stake blockchain designed for the financial services industry.

Dec 14, 2022