High availability and large scale configuration

From ControlTier

Jump to: navigation, search


As of 3.2, the default ControlTier installation uses a client-server configuration wherein the clients stay synchronized with the server via a pull based mechanism. During the execution of a workflow command, the necessary resource model data, module code and package artifacts are downloaded from the centralized ControlTier server via HTTP/GET.

This arrangement works well in development and QA environments because in that stage, it's preferable to stay in sync with the latest changes pushed to the server. This also facilitates the development iteration cycle.

On the other hand, for large scale and isolated production environments the default configuration poses these potential drawbacks:

This document describes a configuration and update model where:

Contents

Resource model data

CTL commands are data driven. This data is provided as a data representation of a CTL resource, normally in a file called resource.properties. During the course of a command execution, a step exists to synchronize the data representation with the state on the server (i.e., via Get-Properties).

When a completely off-line mode is desirable, object data can be archived and delivered out-of-band to avoid the server request. Two facilities exist in the framework to support this notion:

  1. ProjectBuilder's archive-resources command: This command queries the server and produces an archive of object data that can be delivered to the client machines in packaged form.
  2. CTL's ctl-archive command: This command extracts the archives produced by archive-resources

Process

This approach uses a traditional software life cycle wherein,

Delivery

The diagram below describes the overall flow.

Archive-delivery.png

The diagram shows a process flow in roughly 6 steps

  1. A ProjectBuilder query specifies a set of objects it wants to archive data for and,
  2. then retrieves a representation for each one in the query result
  3. An archive of the object data is produced.
  4. A distribution tool (which could be ctl-exec or a package facility like RPM) copies it to each needed CTL node
  5. and the relevant object data is extracted from the archive.
  6. A framework configuration disables the Get-Properties step from connecting to the server.

Here's a diagram that shows a subset of the process but using RPM and Yum as the distribution tool:

Archive-delivery-rpm.png

It shows Yum is the distribution mechanism and the postinstall step in the RPM invokes the ctl-archive command.

Module code

A module is a software artifact produced from a type.xml and a set of module source files during the ProjectBuilder build process. This build process includes archiving the generated artifacts into a JAR file which is loaded into the ControlTier server where the type definitions are merged into the project model. CTL has a built in mechanism to download new versions of these modules automatically or on demand so the clients stay synchronized with the latest versions on the server.

When a completely off-line mode is desirable, modules can be archived and delivered out-of-band to avoid these server requests. Two facilities exist in the framework to support this notion:

  1. ProjectBuilder's build-library command: This command reads module sources and produces a library that can be delivered to the client machines in packaged form. This form is called a CTL "extension".
  2. CTL's ctl-extension command: This command extracts the archives produced by build-library and installs them to the client.

Process

This approach uses a traditional software life cycle wherein,

Delivery

The diagram below describes the overall flow.

Extension-delivery.png

The diagram shows a process flow in roughly 4 steps

  1. A ProjectBuilder reads a set of module source directories and generates an extension JAR file which can be uploaded to the server,
  2. An extension jar can be staged as a releasable artifact .
  3. A distribution tool (which could be ctl-exec or a package facility like RPM) copies it to each needed CTL node
  4. and the relevant module data is extracted from the extension archive.

Package artifacts

Package artifacts are delivered via "Deploy", a foundational workflow that includes a step to install package dependencies for a given software deployment. This particular step is handled by Packages-Install, a command which reads the object's package dependencies and for each one carries out its package install cycle. This cycle is also a workflow and the step named "get", downloads the package from the server's WebDAV component.

For a large scale, high availability configuration, serving all file download requests from a centralized server may be impeded by various bottlenecks (network, disk, cpu). A centralized server will also open itself to various availability risks (system, subnet).

An alternative configuration would be to use traditional web scaling techniques: caching proxies and VIPs.

Process

The process to support this model is roughly the same as the default configuration. Depending on the proxy server software employed, there may be additional cache synchronization procedures.

Delivery

The diagram below describes a possible deployment configuration:

Proxy-delivery.png

Personal tools
Namespaces
Variants
Actions
Navigation
Communication
Development
Toolbox
Print/export