| 
				
					
						 | 
			7 years ago | |
|---|---|---|
| spec | 7 years ago | |
| src | 7 years ago | |
| .editorconfig | 7 years ago | |
| .gitignore | 7 years ago | |
| .travis.yml | 7 years ago | |
| LICENSE | 7 years ago | |
| README.md | 7 years ago | |
| shard.yml | 7 years ago | |
Release candidate for v1.0 "David Robert Jones"
Add this to your application's shard.yml:
dependencies:
  crystal-scatter:
    git: https://git.nekoit.xyz/Archivist/crystal-scatter
    version: ~> 1.0.0-rc1
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 , uuid01,   [0,0,0,0,0,0], "https://api01.myservice.com"),
    Crystal::Scatter::Daemon (16, uuid02,   [0,0,0,0,1,0], "https://api02.myservice.com"),
    Crystal::Scatter::Daemon (12, uuid03,   [1,0,0,0,0,0], "https://api03.myservice.com"),
    Crystal::Scatter::Daemon (12, uuid04,   [1,0,0,0,1,0], "https://api04.myservice.com"),
    Crystal::Scatter::Daemon (12, uuid05,   [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.
Crystal::Scatter::Daemon (12, uuid,   [2,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 UUID provided by the HARP wrapper
                          L Weight
Such information is to be supplied to Crystal::Scatter.
git checkout -b my-new-feature)git commit -am 'Add some feature')git push origin my-new-feature)