選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
Archivist b53de6cc2b Expanded the Readme 6年前
spec Refactoring the code, adding more tests 6年前
src Refactoring the code, adding more tests 6年前
.editorconfig RingGraph works 6年前
.gitignore Added slice finding and ring piling 6年前
.travis.yml RingGraph works 6年前
LICENSE RingGraph works 6年前
README.md Expanded the Readme 6年前
shard.yml Added an history feature 6年前

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