ControlTier
From ControlTier
What is ControlTier? ControlTier is a community driven, cross-platform software system used to coordinate application service management activities across multiple nodes and application tiers. The project is fully open source and many of the project contributions come from DTO Solutions ongoing consulting work for large scale e-commerce, software-as-a-service, and financial services operations. Go to Installation to get and install the software.
Contents |
What problems does this solve?
Consider the following scenario. You've got a set of application packages that were just built or obtained from third parties. Your servers are in the rack (or virtual ones instantiated) and the OS is installed and configured. Now what?
You need to turn those packages into running services...
- Push code, data, and content to all of the right locations
- Run the unpacking/install sequence for each of those artifacts
- Edit configuration files so settings are correct and consistent for that particular environment
- Start everything in the correct order and make sure the combined result is as expected
Once everything is deployed you face a variety of other complex tasks...
- Coordinated restarts that gracefully shutdown and start up each tier of your application in the correct order.
- Configuration changes and rolling application updates on live environments
- Check the status of the integrated application and validate configurations
It's difficult enough to manage all of this in small environment. Add in the scale, complexity, and rate of change that you see in large-scale web operations and you get a problem that quickly becomes unmanageable.
The problem isn't knowing how to do each step. It's a matter of reliably coordinating the execution of all of those steps across all of those various nodes all while avoiding stepping on each other's toes.
Turn complicated procedures into a named command your operations can rely on
At the end of the day you want to turn a bunch of complicated steps into one reliable step. In ControlTier that's called creating a "command". You also want to have the ability to save those commands use them as building blocks to create new larger workflows composed of other commands.
Commands give you the ability to manage distributed application services through a simplified, more standardized, and logically abstracted view. You tell the framework what to do and it knows how to do it, what order to do it in, and where in the physical environment to do it.
Below you'll find an example of a typical database restart procedure. One image shows the semi-manual script-based method is prevalent today. The other shows the simplicity and reliability of using a command dispatcher.
The implementation details of the procedure are hidden from the average user, but are still there in case you want to review them. In fact, unlike free-form scripts floating around, the environment and procedural details are in a structured and organized format that can be collaborated on by anyone on your team with the appropriate security permissions.
How is all of this possible? You use ControlTier's Command Dispatching Framework.
ControlTier's Command Dispatcher
The Command Dispatcher is a core function of the ControlTier software that provides the mechanism to send commands over the network seamlessly to the correct Nodes. This facility is used whenever you run a command or script, via the command-line (ctl or ctl-exec) or via Jobcenter.
At the simplest level, you send scripts or shell commands directly to any Node or set of Nodes based on simple filtering options. The Command Dispatcher handles the details of using the correct hostname and username to do the connection, and invoking the script on the remote node(s).
When you develop a Resource Model, each deployable object that is attached to a Node object can be the target of a command. You can invoke the Dispatcher to look at your Resource model to send a command only to the appropriate set of Nodes.
The diagram below shows how a user invokes a command on an object, which is then dispatched from the server to the correct client node based on the Resource model configuration.
What's it like to use ControlTier?
Run commands via the graphical web interface
After installing ControlTier and registering your target nodes, you are ready to use the command dispatcher either via its command line or graphical user interface. Jobcenter is a web-based interface for executing commands via the Command dispatcher. It's also handy for tracking the progress of those commands as they execute. You can take your existing scripts (or whatever you would type at the command line), drop them into Jobcenter, specify any dispatching parameters (parallelism, node filtering, etc.) and ControlTier will handle the rest.
You can also create named "Jobs", declaring the command, dispatcher options, as well giving it a name and job group. These jobs are saved to your job list. The saved jobs can either be run on demand or executed automatically by Jobcenter's built-in scheduler. ControlTier's security model let's you control who can view and execute the commands you define (useful for safely handing off jobs for others to run).
Run commands via command line interface
Like from the graphical interface, you can use the Command dispatcher via command line utilities to execute commands on the fly or to call pre-defined commands (like workflows). You can also call the command line utilities from within your existing scripts and tools in order to integrate the command dispatcher or any of ControlTier's built-in utilities.
View activity history
Commands executed through the Command dispatcher log their activity to a centralized event logging service. The history can be viewed via a graphical webapp named, Reportcenter. Reportcenter automatically gives you a centralized view of all activity that happens throughout the ControlTier system.
What's different about ControlTier?
Is ControlTier the same as Puppet?
No. ControlTier and Puppet are complimentary and share a lot of the same philosophies, however they are very distinct tools. It's not uncommon for both tools to be used side-by-side. Puppet is a handy tool for system-level configuration management and compliance. ControlTier is a handy tool for deploying applications, controlling their state, and running on demand administrative tasks across multiple servers.
Is ControlTier the same as Capistrano, Fabric, or Func?
In their most fundamental concepts, ControlTier, Capistrano, Fabric, and Func are similar tools. We'd definitely call Capistrano, Fabric, and Func basic Command Dispatching Frameworks.
However, ControlTier, by design, goes far beyond what these other tools provide. The automation libraries and the web-based tools that ControlTier provides are designed to let you build full automation systems ready for use by enterprise or large-scale web operations teams. There are also features like error-handling and centralized logging that just aren't in the scope of other command dispatching tools.
Also, Capistrano is a Ruby-based tool that is primarily focused on the needs of the Ruby on Rails community. ControlTier, while written in Java, doesn't require you to know Java to use it. In fact, you can use whatever scripting languages you are comfortable with (including ruby). ControlTier attempts to be as language and platform (Linux, Unix, Windows, etc..) neutral as possible.
I'm a great scripter and will just build all of this myself!
At it's core, ControlTier is a framework. Much like you wouldn't build an application today without starting with an application framework, we recommend that you use ControlTier as a framework on which to build your automation system. We don't look at this as a choice between building it yourself or using ControlTier. We see it as "build it yourself leveraging ControlTier". ControlTier handles all of the painful framework level issues that you are going to face when implementing your automation system. We encourage you to both take advantage of that and join the ControlTier community to help make the framework and tools even better.
| |||||||||||||||||||||||






