GithubHelp home page GithubHelp logo

00mjk / easyraft Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ksrichard/easyraft

0.0 0.0 0.0 174 KB

Easy to use Raft library to make your app distributed, highly available and fault-tolerant

License: Apache License 2.0

Makefile 0.73% Go 99.27%

easyraft's Introduction

Go Report Card Go Reference GitHub go.mod Go version of a Go module GitHub release

An easy to use customizable library to make your Go application Distributed, Highly available, Fault Tolerant etc... using Hashicorp's Raft library which implements the Raft Consensus Algorithm.

Features

  • Configure and start a fully functional Raft node by writing ~10 lines of code
  • Automatic Node discovery (nodes are discovering each other using Discovery method)
    1. Built-in discovery methods:
      1. Static Discovery (having a fixed list of nodes addresses)
      2. mDNS Discovery for local network node discovery
      3. Kubernetes discovery
  • Cloud Native because of kubernetes discovery and easy to load balance features
  • Automatic forward to leader - you can contact any node to perform operations, everything will be forwarded to the actual leader node
  • Node monitoring/removal - the nodes are monitoring each other and if there are some failures then the offline nodes get removed automatically from cluster
  • Simplified state machine - there is an already implemented generic state machine which handles the basic operations and routes requests to State Machine Services (see Examples)
  • All layers are customizable - you can select or implement your own State Machine Service, Message Serializer and Discovery Method
  • gRPC transport layer - the internal communications are done through gRPC based communication, if needed you can add your own services

Note: snapshots are not supported at the moment, will be handled at later point Note: at the moment the communication between nodes are insecure, I recommend to not expose that port

Get Started

You can create a simple EasyRaft Node with local mDNS discovery, an in-memory Map service and MsgPack as serializer(this is the only one built-in at the moment)

import (
"github.com/ksrichard/easyraft"
"github.com/ksrichard/easyraft/discovery"
"github.com/ksrichard/easyraft/fsm"
"github.com/ksrichard/easyraft/serializer"
)

func main() {
    raftPort := 5000
    discoveryPort := 5001
    dataDir := "s1"
    node, err := easyraft.NewNode(
        raftPort,
        discoveryPort,
        dataDir,
        []fsm.FSMService{fsm.NewInMemoryMapService()},
        serializer.NewMsgPackSerializer(),
        discovery.NewMDNSDiscovery(),
        false,
    )
    
    if err != nil {
        panic(err)
    }
    stoppedCh, err := node.Start()
    if err != nil {
        panic(err)
    }
    defer node.Stop()
}

Examples

Examples can be found in the examples directory

Build

To regenerate gRPC code and install dependencies simply run make install

TODO

  • Add more examples
  • Test coverage
  • Secure communication between nodes (SSL/TLS)
  • Backup/Restore backup handling
  • Allow configuration option to pass any custom raft.FSM

easyraft's People

Contributors

ksrichard avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.