Roshi

Dockerfile links

What is Roshi?

Roshi implements a time-series event storage via a LWW-element-set CRDT with limited inline garbage collection. Roshi is a stateless, distributed layer on top of Redis and is implemented in Go. It is partition tolerant, highly available and eventually consistent.

How To Use This Image

Roshi uses Redis as its persistence layer. You will need to have a Redis instance running somewhere for Roshi to connect to. A production installation of Roshi should have at least 3 independent Redis clusters running in different failure domains. For demo purposes you can just run Roshi on a single Redis instance with zero fault tolerance. See the READMEs for roshi, roshi-server, and farm for more details.

Starting a Roshi instance

# Start a Redis instance named my-redis and daemonize
docker run --name my-redis -d redis
# Start a Roshi server instance named my-roshi-server, linked to my-redis with an alias of redis_backend, exposing port 6302 to localhost
docker run --name my-roshi-server --link my-redis:redis_backend -p 6302:6302 ello/roshi-server -redis.instances=redis_backend:6379
# Start a Roshi walker instance named my-roshi-walker, linked to my-redis with an alias of redis_backend, exposing port 6060 to localhost for metrics
docker run --name my-roshiwalker --link my-redis:redis_backend -p 6060:6060 ello/roshi-walker -redis.instances=redis_backend:6379
# In another shell you can curl /metrics to see that both are running
curl localhost:6302/metrics
curl localhost:6060/metrics
# If you are using boot2docker
curl "$(boot2docker ip):6302/metrics"
curl "$(boot2docker ip):6060/metrics"

The server image includes EXPOSE 6302 (the default Roshi port), so container linking will work.