Exactly Once Execution In A Distributed System

2017 Sep04
S

kyring is a [distributed system for managing timers](https://github.com/esatterwhite/skyring), or delayed execution similar to `setTimeout` in javascript. The difference being that it is handled in a reliable and fault tolerant way. `setTimeout` in javascript is transient. If the running application is restarted or crashes, any pending timers are lost forever. The one guarantee that skyring provides is that a timer will execute after the specified delay, and that it only executes once. Exactly once is an interesting challenge in distributed systems, and Skyring makes use of a number of mechanisms at the node level to achieve this. From a high level, this is what the behavior on individual nodes looks like.

Skyring Node Behavior

Shared Nothing

Skyring follows

Read More

Custom Transports For Skyring

2017 May29
S

kyring is a distributed system for managing timers. When a timer lapses, a message is delivered to destination that you have defined. *How* that message is delivered is configurable. Out of the box, Skyring comes with an `HTTP` transport, and there is an official package enabling [tcp delivery](https://www.npmjs.com/package/@skyring/tcp-transport) of messages with connection pooling. They are pretty easy to write, and you can use any of the tools you are currently used to using.

STDOUT Transport

To illustrate the process, we're going to make a simple transport handler to write the data to stdout. Basically, speaking a transport is just a node.js module that exports a named function

Module [ˈmäjo͞ol] -n.

Read More
filed under:  zmq skyring timers node.js

Getting Started With Skyring Distributed Timers

2017 May01
T

he very idea of distributed timers is complex. Conceptually is full of race conditions and edge cases. [Skyring](https://github.com/esatterwhite/skyring) for Node.js boils the problems space down to a simple to use library and API for building scalable service that need to perform time sensitive, actions. That is a mouthful - Think An email gateway, a web-hook service, auto-dialers for telephony systems. Or in the most practical sense, anytime you might need functionality like [setTImeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout) but needs to survive restarts / crashes; Or are using a language that doesn't support non-blocking timers. Skyring fills that gap, and it is easy to use. We can get something

Read More
filed under:  skyring timers node

Distributed Timers With Node.js and Skyring

2016 Dec28
W

orking with timers a distributed system is a really nasty problem that pops up more often than most people would like. Something as simple an useful as `setTimeout` / `clearTimeout` becomes brittle, unreliable and a bottle neck in today's stateless scaleable server mindset. Basically, I need to be able to set a timer somewhere in a cluster with out knowing or caring about what server. And reversely, I need to be able to cancel that timer **without** having to know where in the cluster that timer lives. But before we can start to understand possible solutions, let's dive into a use case to understand the problem and why existing solutions aren't suitable replacements.

Scenrios

Un-send an email - A simple

Read More