Marc Limotte will be describing a system we created at Climate.com for deploying immutable, versioned models. Models can also be thought of as atomic functions or micro services. They are deployed in their own isolated Classloader on the same JVM. Communication between them is intra-JVM-- no serialization needed-- as opposed to integrating with web service calls. These functions can be composed with "Composite Graphs", which are similar to the structure of prismatic/graph (https://github.com/Prismatic/plumbing) and can then be accessed via HTTP or Message Queue (Rabbitmq). This lets us quickly compose a bunch of micro-functionality into a more complex system dynamically; and the result is fully versioned for repeatability. Models are written in Clojure, of course, and we also leverage the OSGi framework.
Some key features/components include:
- A ring style library for building Message Queue applications
- The "Service layer" code is in the platform, so the Models can be pure business logic
- Models can be composed together dynamically-- i.e. uploading an EDN wiring (the "composite graph"), rather than a code release
- Automatic dependency loading for Models used by a Composite Graphs