Tourbillon is a web service for managing scheduled tasks and event-based workflows. Uses include triggered emails, multi-party transactions, and recurring reminders. I suppose you could even use it as a parser engine!
The goals of this project are twofold:
- to create an event-driven process engine that can drive the stateful portion of web application.
- to build a distributed task scheduling system that is able to run with little to no downtime and can scale to support responsive task execution under any load. Currently, the app only supports single-server operation and has no persistence.
Many of the complexities of modern web programming have to do with maintaining state for a transaction that involves multiple parties and a span of time. These can usually be modeled as a state machine, which is the model that Tourbillon workflows use. Combining the concept of state machines with multiple side effects that may be triggered on state transitions is a powerful way of solving a great deal of real-world application business logic.
The simplest usage of Tourbillon is to schedule future and repeating events. While this cron-like functionality is nothing new, there are few solutions that have all of the following properties:
- Web-based
- Distributed for fault tolerance
- Have email and HTTP capabilities baked in
Please see the API description page for details of the message specification.
Note that the in-memory database is broken because it is storing everything in a single atom with no namespaces. Events and all objects in one big blob. Yuck!
- Support a distributed set-up. Ideally, we should be able to run multiple instances in the same JVM, across JVM intances on a single machine, or across JVM instances on multiple machines.
- Support pluggable persistence layers, and include a adapters for
in-memory,SQL, DynamoDb, Redis, andMongoout of the box - Create client library
- Track API requests per-API token
- Create UI for provisioning tokens
- Support multiple auth methods that tourbillon can use with webhook subscriber
- Add additional "subscribers" that can perform different sorts of tasks
Copyright © 2014-2017 Andrew S. Meredith
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.