You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Archivist b53de6cc2b Expanded the Readme 6 years ago
spec Refactoring the code, adding more tests 6 years ago
src Refactoring the code, adding more tests 6 years ago
.editorconfig RingGraph works 6 years ago
.gitignore Added slice finding and ring piling 6 years ago
.travis.yml RingGraph works 6 years ago
LICENSE RingGraph works 6 years ago
README.md Expanded the Readme 6 years ago
shard.yml Added an history feature 6 years ago

README.md

crystal-scatter

Release candidate for v0.1 "John Scott"

Installation

Add this to your application's shard.yml:

dependencies:
  crystal-scatter:
    git: https://git.nekoit.xyz/Archivist/crystal-scatter
    version: ~> 0.1.0-rc2

Usage

require "crystal-scatter"

Create a MetaRing and add services to it, using the weights as a mark of the load the service can handle (example: number of threads each CPU of the servers can handle).

client_ip = "185.124.235.1"

ring = Crystal::Scatter::MetaRing.new(3)

ring.add [
    Crystal::Scatter::Daemon (8 ,    [0,0,0,0,0,0], "https://api01.myservice.com"),
    Crystal::Scatter::Daemon (16,    [0,0,0,0,1,0], "https://api02.myservice.com"),
    Crystal::Scatter::Daemon (12,    [1,0,0,0,0,0], "https://api03.myservice.com"),
    Crystal::Scatter::Daemon (12,    [1,0,0,0,1,0], "https://api04.myservice.com"),
    Crystal::Scatter::Daemon (12,    [2,0,0,0,0,0], "https://api05.myservice.com")
]

ring.get_slices_for(client_ip) 
# => [
#       "https://api01.myservice.com",
#       "https://api03.myservice.com",
#       "https://api05.myservice.com"
#    ]

The output will provide you information to contact the service in a balanced way.

In details

Crystal::Scatter::Daemon (12,    [2,0,0,0,0,0], "https://api05.myservice.com")
                          ^       ^ ^ ^ ^ ^ ^   ^
                          |       | | | | | |   |
                          |       | | | | | |   L Real target
                          |       | | | | | L Serving daemon
                          |       | | | | L Serving server
                          |       | | | L Serving PSU
                          |       | | L Serving rack
                          |       | L Serving room
                          |       L Serving datacenter
                          L Weight

Such information is to be supplied to Crystal::Scatter.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

  • Ludovic 'Archivist' Lagouardette - creator, maintainer