The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Helios::Tutorial - a tutorial for getting started with Helios

DESCRIPTION

This is a short tutorial to introduce the Helios system's basic concepts and to show some quick examples of how to write services for Helios.

HELIOS CONCEPTS

Jobs

Jobs are simply a set of parameters that represent a discrete unit of work. Jobs are represented by XML-style markup and can be submitted via the command line helios_job_submit.pl program or via HTTP request to the submitJob.pl CGI program.

Metajobs

Metajobs are groups of jobs submitted together to Helios. Bound by XML, a metajob will be burst apart into its constituent jobs when first serviced by Helios. Metajobs can greatly decrease the time it takes to submit large batches of jobs into the Helios job queue.

Services

Services are Perl classes that define how jobs of a certain type should be processed. Service classes are subclasses of Helios::Service, and implement a run() method to perform a job's operations. The run() method marks the job as successful or failed just before it ends. Services can be configured across the collective (see below) using Helios's built-in configuration mechanism, which can be accessed via the Helios::Panoptes web interface or directly by connecting to the Helios MySQL database.

Workers

Workers are processes launched by Helios daemons to actually perform jobs. A worker will instantiate its associated service class, do some preparation, and call the service object's run() method. In normal operation, a worker process performs one job and then exits, but in "OVERDRIVE" mode a worker process will stay in memory and perform as many jobs as possible, until 1) there are no more jobs in the queue, 2) told to HOLD or HALT job processing, or 3) encounters an error processing a job that causes it to exit.

Collective

A collective is a group of servers running Helios daemons connected to the same Helios database. Services in a collective can be centrally administered using the Helios::Panoptes web interface. A Helios collective is fundamentally different from a "grid" or "cloud" model of distributed computing.

WRITING HELIOS SERVICES

Writing a Helios service involves writing a service class, a Perl class that inherits from Helios::Service. Your service class will need to implement the service's run() method. The run() method will be passed a Helios::Job object representing the job to be performed.

A sample class is included with Helios, Helios::TestService:

    package Helios::TestService;
    use strict;
    use warnings;
    use base qw(Helios::Service);
    
    sub run {
        my $self = shift;
        my $job = shift;
        my $config = $self->getConfig();
        my $args = $self->getJobArgs($job);
    
        foreach my $arg (keys %$args) {
            $self->logMsg($job, "param:".$arg." value:".$args->{$arg});
        }

        $self->completedJob($job);
    }
    
    1;
    

This service is extremely simple; all it does is pick up the service's configuration and the given job's arguments, and logs the job's arguments in the Helios log. Then it calls the completedJob() method to mark the job as finished successfully. Despite its simplicity, all Helios services follow this same basic pattern.

In addition to Helios::TestService, there is a stubbed out example service in the Helios distribution's eg/ directory. This example is a little more complex, as it implements exception handling with the Error module and Helios::Error exception classes, and performs different levels of logging.

SEE ALSO

helios.pl, Helios::Service, Helios::Job, Helios::Error

AUTHOR

Andrew Johnson, <lajandy at cpan dotorg>

COPYRIGHT AND LICENSE

Copyright (C) 2008-9 by CEB Toolbox, Inc.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.0 or, at your option, any later version of Perl 5 you may have available.

WARRANTY

This software comes with no warranty of any kind.