Hi all,

My team recently open-sourced its new distributed timer service, Chronos 
(https://github.com/Metaswitch/chronos). As this might be of interest to 
Clojurians, I've written a Clojure client library for it 
(https://github.com/rkday/chronos-client-clj).

We work on distributed high-scale telecoms switches in the cloud, and we're 
very focused on ensuring resilience when individual servers fail, by making 
them stateless, using distributed databases, and so on. One of the big problems 
we had to solve was timers - where you may have an event that needs to fire at 
a future point, and must fire even if the server that originally scheduled it 
has failed by then. (In our case, users registered for a five-minute period - 
with one of a cluster of servers handling that registration - and if those five 
minutes passed without the registration being refreshed, we needed to 
unregister them and send notifications of that to other servers.) Chronos is 
our attempt to solve that problem in general - allowing you to set an arbitrary 
HTTP callback to happen at some future point, and then distributing the storage 
of those timers over a cluster of nodes according to a client-provided 
replication factor, and giving certain guarantees about how those timers pop 
during net splits and outages - all over a fairly simple HTTP interface.

I thought the general concepts here - statelessness, distributed processing, 
breaking this complicated bit of function out into a separate service with a 
simple API - might appeal to other Clojurians. Hence this library.

The client library is fairly simple - it's all described in the README - though 
it assumes a bit of knowledge about Chronos so you might want to read 
https://github.com/Metaswitch/chronos/blob/dev/readme.md, 
https://github.com/Metaswitch/chronos/blob/dev/api.md and/or 
https://github.com/Metaswitch/chronos/blob/dev/clustering.md as well. If you 
want more information about our overall project, see 
http://www.projectclearwater.org/, but I'm afraid it's largely C++. (Chronos 
itself is written in C++, but as it's a service with a HTTP API you don't need 
to link to it or worry about the code).

The Github page has instructions for building Chronos from source 
(https://github.com/Metaswitch/chronos#development). We also have packages for 
Ubuntu 12.04 x86_64 (our standard server platform) available - add our 
repository following the instructions at 
https://github.com/Metaswitch/clearwater-docs/wiki/Manual-Install#wiki-project-clearwater,
 run "sudo apt-get update", then "sudo apt-get install chronos". It can be run 
just as "chronos" - there are no command-line-arguments.

I don't expect this to be useful to everyone - but I suspect that this is the 
sort of thing where, if you're working on the sort of niche where it's useful, 
then it's *really* useful. Let me know what you think!

Best,
Rob

P.S. The Clojars jar isn't signed - I'm away from my GPG key this weekend - but 
I'll publish a signed version soon.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to