|Custom Runtime Language Environments in IronWorker|
Instead of a single standard environment, developers can now define runtime environments and write workers for specific language versions.
IronWorker already supports all common languages including PHP, Ruby, Python, .NET, Node.js, Java, Go and binary files, but this release adds in finer grained support for specific language versions including Ruby 2.1, Python 3.2, Mono 3.0, and others. (The full table can be seen below.)
Greater Flexibility and Increased ReliabilityIronWorker is a highly available worker service that provides background processing, scheduled jobs, and concurrent scale-out processing. Worker systems are critical within almost every production-scale cloud application. Whether it’s processing large amounts of data, processing event streams, or handling individual jobs in the background, worker systems allow applications to scale more easily and system components to operate more independently.
User-definable runtime worker environments solve a number of problems with most worker systems. Developers needing the latest language versions can now have access to them as soon as they become available. At the same time, developers with existing workers can lock down their environments to use specific versions so as to maintain consistency.
Custom language environments let Iron.io serve both of these needs – allowing Iron.io to offer the most current environments while still providing a reliable and stable platform for production-scale systems.
Another advantage of custom runtime environments is that developers no longer have to limit themselves to a single compute stack. They can change environments worker by worker. As a result, a single application can have workers using different languages and different versions – with zero installation and zero ops. This reduces the risk of monolithic apps where language upgrades can take months, or in some cases, years. Using a flexible and scalable worker system like IronWorker means applications can be more loosely coupled and distributed and therefore easier to scale and easier to maintain.
New IronWorker Runtime EnvironmentsIn addition to the existing language environments, the custom language versions now available in IronWorker include:
- Ruby 1.9
- Ruby 2.1
- Python 2.7
- Python 3.2
- PHP 5.4
- Node 0.10
- Java 1.7
- Scala 2.9
- Mono 2.10
- Mono 3.0
Additional environments can be created relatively easily. See below for how to get in touch with us if you're interested in environments not listed here or in the default environment.
How to Make Use of Custom Runtime Environments in IronWorkerTo make use of a custom worker environment in IronWorker, all you need to do to is add a single line to your .worker config file. (The .worker file is included as part of the worker upload process and tells IronWorker what the executable file is, what code packages and data files are included, whether to build the worker remotely, as well as a number of other options.)
Note: For the .worker file, a worker name needs to be included with the .worker suffix. For example, sendmail_worker.worker would create a worker in the system called "sendmail_worker".
To specify a particular custom environment for your worker, add the language/version parameter as a line in your .worker file.
To use a Ruby 2.1 environment, include the following in your .worker file:
To specify a Java 1.7 environment, include the following:
To get list of available stacks via the CLI just type in the following command:
You'll get back a list along the lines of the following:
Note: Make sure you update the IronWorker CLI first though.
gem update iron_worker_ng
Simple Addition → Powerful ResultsWith a simple addition to a config file, developers get custom runtime language environment running within a secure sandbox and with the same features customers love – including retries, priority settings, real-time logging, dashboard monitoring, and more.
We believe custom language environments are a huge step forward in bringing you the most powerful and flexible worker system in the world. Try it out and let us know what you think.
Behind the Scenes – Using Docker
We're using Docker behind the scenes to create and manage the containers for the custom language environments. It provides a number of powerful capabilities including the ability to automatically assemble containers from source code and control application dependencies. We'll post an article in the near future detailing our experiences with Docker. (In short, we’re fans.) If you’d like to know more about our use of Docker, please subscribe to the Iron.io newsletter.