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.