Project

id_service

0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
IdService provides a client and server for setting up a sequential & unique id generation service.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

ID Service

Build Status

This gem provides both client and server classes for running an ID generation service, based on the Thrift framework. The overall architecture is based on Twitter's Snowflake service, but written in Ruby. The core ID Generator is very fast (10,000 IDs/sec) and the server is designed to be very fast as well (1,000 IDs/sec).

WARNING :: The IDs returned by the server, whether you use the pre-built one or customize will always return sequential and unique IDs, except in the case that you run multiple servers with the same host and worker identifiers. In that case you will not be guaranteed uniqueness of the IDs.

Running the Server

This gem comes with a pre-made server executable that can be used in lieu of building your own server implementation. To start the provided server simple run the following command:

id_server

The server is designed to run in the foreground by default. It also accepts a number of options. You can check the available options by passing the --help switch to the command.

Custom Server

Some may want to build their own server implementation. This is very simple. Just pass the relevant options when initializing an instance of IdService::Server and then call #serve on your server instance.

require 'id_service/server'

options = {
  hostname: 'localhost',
  port:     9000,
  host:     1,
  worker:   1,
  debug:    false
}

server = IdService::Server.new(options)
server.serve

That's all there is to it.

Using the Client

Using the client is just as easy. If your server is running on localhost and port 9000 you can skip supplying the options to client initialization.

require 'id_service'

options = {
  host: 'localhost',
  port: 9000
}

client = IdService::Client.new(options)
client.open

client.get_id

The #get_id method will always return sequential and unique IDs, given you don't have multiple servers using the same host and worker identifiers responding to multiple clients.