Configuration management is the process by which a company or organization defines and tracks the state of its infrastructural resources. Encapsulated in those resources are both physical hardware and software. It is a means to ensure that when changes are made to a system, those changes are tracked, geared toward the ultimate predefined criteria of what state should be.
Further, the automation of configuration management is integral to building and maintaining more complex systems. To understand the importance of configuration management in today’s complex technological ecosystem, it is useful to imagine what the inverse entails.
Without Configuration Management
Consider a web-based service that has an environment comprised of multiple server instances. Some servers are responsible for serving web traffic, others for load balancing, a database node, a caching node, and more. This web service has a single System Administrator responsible for maintaining these servers and the uptime of the application.
One day during a particularly high-traffic event, users begin to report occasional error codes from the service. The System Administrator begins troubleshooting and realizes that one of the web nodes is no longer serving traffic. While troubleshooting one of the unresponsive web nodes, the other web nodes in the system begin to overloaded with traffic. A domino effect ensues, and suddenly, users are unable to access the service at all.
The System Administrator realizes that the web node that went down first has filled its disk to capacity. They quickly remedy the issue, bringing it and the other web nodes back online, and everything begins running smoothly again. However, they notice that the disk on the original web node that initiated the cascading failure continues to fill up. After further investigation, the System Administrator determines that verbose logging for some of the services is enabled. This setting is determined to be the root cause of the servers disk full error. They adjust the system configuration to turn the feature off, and the high-traffic event continues without issue.
Usually, the verbose logging feature is enabled to troubleshoot an issue. The fact that it was not turned off resulted in downtime for the application. If the application had proper configuration management and automation in place, the web node’s desired state would have been enforced, and the incident likely would not have occurred.
Benefits of Configuration Management
Configuration management ensures that changes, no matter how small, are documented and controlled in a centralized manner. Typically, settings deployed using a configuration management tool like Puppet, Ansible, SaltStack, or Chef are codified. The configurations themselves may be made up of code but are typically part of some version control system that keeps track of every proposed adjustment.
In an extensive distributed system, manual identification, remediation, and verification of resolution to configuration changes for system issues may not be possible and may become costly and complicated. By automating these processes with configuration management tools, the continuous enforcement of the desired state on an environment improves stability and reliability. By automating these processes with configuration management tools, the continuous enforcement of the desired state on an environment improves stability and reliability.
The proper maintenance of sameness between development and production environments is a considerable benefit of configuration management. Utilizing a development environment to test code before release is much more meaningful when there is the confidence that there are no differences between that environment and the one that users interact with. A development environment is inherently a testing ground, but that does not mean it should not be a valid representation of where the code will eventually be deployed.
Configuration Management in Code
Configuration management is not just present in the context of systems management. The concept of continuous integration and continuous delivery is steeped in configuration management. Software pipelines that take code from the version control system out to lower environments and on to production are configuration management.
Typically, these pipelines are responsible for running the committed code against a unit, integration, and functional test suites. Ultimately, these pipelines can also create packaged deployable versions of the tested code or even push that code out to a production environment. These are a series of steps, configured ahead of time, that drive toward the desired state.
Configuration Management Tools
There are many configuration management tools available today. The right tool to use largely depends on the needs of the organization. They are all geared toward automating the process by which systems are defined, built, and maintained. Some examples of configuration management tools in high use today include Ansible, Chef, Puppet, and SaltStack.
There are different methodologies employed by other configuration management tools. Chef, for example, has an imperative configuration style. This essentially means that the user defines each step of configuration. After each step completes, Chef moves on to the next, and so on. Actions may be dependent upon one another, and their implicit definition ultimately determines the state at which the system will arrive.
Puppet, on the other hand, employs a declarative paradigm. The big difference here is that there is a higher level of abstraction of the individual steps required to achieve the desired state. The user will declare what the desired state is and then trust Puppet to take care of the rest. A puppet configuration may be applied multiple times to ensure that the selected design is achieved.
Ansible and SaltStack are examples of configuration management tools that employ a hybridized approach. Ansible and SaltStack were both originally built and designed as execution engines. This means they were built to be able to run commands on multiple machines concurrently. They can infer what should happen based on the desired state’s declaration or execute a configuration based on implicit instructions. The directives are typically written in a YAML-based language provided in either playbooks or SLS files. Despite the differences in execution and design, all configuration management tools can facilitate the centralized modification of configurations, classify different systems into groups, and identify non-compliant structures and provide remediation.
Services offered via the web or other means will inevitably continue to become more complex. The offerings themselves will become more intuitive and will fulfill more nuanced fields of interest. In turn, the implementation of these services will also, out of necessity, grow in complexity.
Providing consistency of performance is paramount in creating a quality user experience. No matter how well-designed and redundant a system is, without proper configuration management and automation of the configuration management, delivering a highly available and smooth user experience is nigh impossible. Implementing proper control processes in and around system configuration and changes will ensure a higher level of system reliability and, as a result, user confidence in that system.
Start Your Journey Toward Stability Today!
Contact us today at 1.800.580.4985 to speak to a knowledgeable Hosting Solutions Provider who can get you the info you need right away to make an informed decision.
Too busy to talk? Click HERE to open a quick chat with us to find out more. Would you like the information in an email you can review at your leisure? Email us today to get solid advice on which products would best suit your needs.
We look forward to hearing from you!