Software deployment starts with an application's structure. Traditionally, applications were monolithic; a single-load image carried the logic and ran in a single machine. But years of growing interest in distributed computing -- combined with software componentization for easy development and reuse -- has spurred a new model.
Whether you call it service-oriented architecture (SOA), modular computing or Web services, this new model breaks applications into pieces and connects them with workflow interfaces. Developers must send all integration and workflow information to those deploying and managing the application. This communication between developers and operations -- along with the processes that facilitate it -- was pegged as DevOps in 2009. Today, DevOps also refers to tools that use real-time development data to automate application deployment.
DevOps in the cloud is a different game
Cloud computing is redefining DevOps. Primarily because of integration issues, cloud deployments are more complicated than application deployments on-premises. The cloud is a dynamic resource, so users expect failover and cloud bursting support. This means application components and whole applications don't stay where they were initially placed. It also means workflows and connections vary under load or while in failure-model operation. Cloud management tools naturally began to influence -- and become influenced by -- DevOps tools and principles.
There are two common approaches to DevOps: script-based and model- or object-based. Script models dominated the pre-cloud era. However, many DevOps gurus worry scripts are too procedural, describing only deployment and integration steps, but not the end product. While a DevOps model that defines an end goal requires more work, it can move across a variety of infrastructure and application components, making it more cloud-suitable.
Script-based tools are still common in cloud. But two other tools are jousting for supremacy: Puppet, which embodies the model-based or declarative approach, and Chef, which takes a procedural or imperative approach.
Chef is an imperative DevOps framework that produces "cookbooks" based on Ruby. And while Chef is a powerful option that represents the developer side of DevOps, it's also difficult to learn.
However, unlike Chef, Puppet is generally easier for system admins to learn. Puppet is a declarative approach based on JSON data models. Because Puppet is non-procedural, it bridges DevOps' scripting form and model form.
Another advancement for DevOps in the cloud is the Topology and Orchestration Specification for Cloud Applications (TOSCA), an open standard developed by the industry consortium, OASIS. TOSCA is a model-based architecture that defines deployment and management as abstract attributes of hierarchical component patterns. As a result, TOSCA is ideal for describing complex application structures. Additionally, TOSCA generated at least one open source implementation -- OpenTOSCA.
TOSCA's future impact is more important than its current support. Cloud is about the realization of abstract resources -- such as virtual machines, virtual networks and virtual services -- on pools of resources. This approach lends itself to model-based DevOps, and is driven by cloud applications becoming more dynamic, which alters both operations and development.
The driving force behind the DevOps machine
Experts believe agility is the biggest driver of DevOps. And mobile broadband and cloud, in turn, are driving the need for agility. A future cloud application will be a set of components linked almost extemporaneously to respond to events, such as a mobile worker, a driverless car or another real-time need. Although these apps may be easier to model than scripts, either way, application development and lifecycle management are morphing to accommodate cloud. Therefore, DevOps should be a key part of a business' technology planning process.
While DevOps is evolving in the face of cloud, there are still challenges to overcome. For instance, some DevOps tools -- even more recent ones -- fall short when it comes to managing application execution. Many cloud deployments take a coupled-analytics approach to management. In this approach, the cloud collects information and provides analytics to manage the resource pool without associating specific resources to specific applications. But, this can be a challenge with highly dynamic and personalized applications that are used only to answer a user's question. It's hard to determine any issues with these applications when management data is available only for a pool of resources over an extended time.
About the author:
Tom Nolle is president of CIMI Corp., a strategic consulting firm specializing in telecommunications and data communications since 1982.
DevOps tools dominated by Ops
Building a successful DevOps strategy
What is DevOps exactly?