Derived from the words development and operations, the term DevOps refers to the practices that a company follows to ensure the production of high-quality products, while also minimizing the amount of time between the commitment of a system change and the implementation of that change in a production environment.
Most companies practice one of the following service models:
- Pets — With the pets service model, servers are built and managed manually, and are treated as unique and indispensable. Examples include mainframes, database systems, and load balancers.
- Cattle — With the cattle service model, arrays of multiple replaceable servers are built with automated tools. During a failure event, an array automatically restarts failed services and replicates data. Examples include web server arrays, search clusters, and multi-primary datastores.
Historically, servers have been treated like pets. The failure of one or multiple servers was often viewed as an emergency, and extensive resources were usually required to repair the damage. In the new DevOps paradigm, servers are recognized as dispensable and treated like cattle. When a server fails, the infrastructure replaces it immediately, configuring the replacement server identically to the failed one. Because no human intervention is required to fix them, the servers are considered self-healing.
To help treat your servers more like cattle than pets, supports server profiles and features like topology-management tools. For example, the manage-profile setup represents a single command that performs all the steps from the pet service model on a server-profile directory, a well-defined directory structure with all the necessary server configuration bits. Similarly, the manage-profile replace-profile command performs similar steps with a single command invocation after a server is updated to a new version.
The scripts in the server-profile directory are declarative of the environment. Consequently, what you define in the server-profile directory is what you get on the servers. No one needs to identify a server's current configuration and compute the differences that must be applied to attain the appropriate end state. Prior to server profiles, this problem was difficult to address, especially where no history was available. In such scenarios, an administrator might have needed to obtain the current configuration from the servers, to manually compute the difference between the current and desired configuration, and to apply the configuration changes, hoping all the while that nobody had changed the configuration during the process. Server profiles eliminate this procedural approach to applying configuration changes, and they simplify the steps associated with determining what is deployed in an environment. For more information on server profiles, see Server profiles.
Another principle that relates closely to DevOps is infrastructure as code (IaC), the concept of managing your operations in the same manner as your application and other code for general release with proper versioning, continuous integration, quality control, and release cycles. Customers who deploy servers as pets today can take advantage of current DevOps and IaC principles to turn them into cattle.