rebost

command module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 31, 2023 License: MIT Imports: 2 Imported by: 0

README

Go

Rebost (Beta)

Rebost is a Distributed Object Storage inspired by our experience with MogileFS, MongoDB and ElasticSearch.

Rebost tries to simplify the management (deploy and operate) of an Object Storage by having an easy setup (barely no configuration required), by basically requiring just the address of one Node of the Rebost cluster (if not it'll start it's own) and the path to the local Volumes (where the objects will be stored). The implementation also simplifies the management of the cluster as there is no "Master", each Node is Master of his objects and also knows where the replicas of those are in the cluster. So adding a new Node it's just starting it and done. When a file is asked to a Node that does not know where it is, it'll ask it to the other Nodes.

Example

For this example we'll have 3 directories on the current path: v1, v2 and v3.

Create the first Node:

$> rebost serve --volumes v1

Create the second Node pointing (--remote) to the first one and changing the default --port as it's already in use (3805) for the first Node.

$> rebost serve --volumes v2 --port 2020 --remote http://localhost:3805 --dashboard.enabled false

Do the same thing with the third Node.

$> rebost serve --volumes v3 --port 3030 --remote http://localhost:3805 --dashboard.enabled false

After this the 3 Nodes will see each other and connect, for example you could run:

$> curl -T YOUR-FILE http://localhost:3805/files/your-file-name

Then you can go to your browser and check it (if it's an image) or:

$> curl http://localhost:3805/files/your-file-name

As the default replica is 3 all the Nodes we've created will have a copy of it so you could do the last command (in fact any of the 2 before) to any Node.

To access the dashboard go to http://localhost:3806, we disabled the Dashboard on the other nodes just because we would need to change also the port, and for a simple example would look too verbose.

Beta?

Yes, there are a lot of things missing (most of them optimizations) that need to be implemented, for now it's an MVP to see if the idea made sense (which does hehe). Those changes will mostly be code-wise but some of them may also affect how the Nodes communicate and all those can be breaking changes until we reach v1.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Package integration holds all the tests related to e2e or integration.
Package integration holds all the tests related to e2e or integration.
Package mock is a generated GoMock package.
Package mock is a generated GoMock package.
Package uow provides an interface in which the "repositories" that participate on it are asure that the functions/actions that are called will be rollback if the Unit of Work fails at some point.
Package uow provides an interface in which the "repositories" that participate on it are asure that the functions/actions that are called will be rollback if the Unit of Work fails at some point.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL