Giter VIP home page Giter VIP logo

relt's Introduction

Relt

Go

A primitive for reliable communication, backed by the atomic broadcast protocol. An example can be found on the _examples folder, the current atomic broadcast implementation is the etcd version, which means that an etcd server is needed.

Since this will be used primarily on the Generic Atomic Multicast, to create a simple structure, with a high level API for sending messages to a group of processes.

When the Generic Atomic Multicast contains the basic structure, this reliable transport will turn into a new whole project where will be implemented a generic atomic broadcast, to be used as the default reliable communication primitive.

relt's People

Contributors

jabolina avatar

Stargazers

 avatar

relt's Issues

Use etcd for atomic broadcast

Proposal

Since the main focus for this primitive is to be reliable, the goal should be to use a atomic broadcast implementation and remove the current RabbitMQ usage. If possible, the final goal should be to implement a generic broadcast primitive and remove any dependency for libraries.

etcd

When using etcd, a first setup must be executed, pretty much what already happens when using the RabbitMQ version. The relt implementation will change to be a etcd client, where commands will be applied upon a KV store, and peers can use the watch API to listen for changes applied on the KV by other peers using the put API.

Starting peers

When starting a new peer, the configuration is something similar with the current RabbitMQ impl. The peer will contain an address, that should be the address to the etcd server, the other peers will also connect to the given etcd server, so there is no need for manually creating a client discovery.

The peer will receive a partition name, that will work as an alias for receiving messages. The peer will listen for messages on this partition, which means that when sending a message, the destination is a partition name, not a peer address. Internally, a peer will be watching for changes on the KV store, the key will be the partition name and when sending a message means writing on the KV store. For developing something more reliable, the projects displayed on the etcd page will be used and listed here for reference.

Using this approach, we must have a primitive that totally orders and delivers the message for the destination peers. Any update during development will be listed here and any documentation as well.


References:

Metafora - https://github.com/lytics/metafora
https://www.compose.com/articles/utilizing-etcd3-with-go/

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.