DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports Events Over 2 million developers have joined DZone. Join Today! Thanks for visiting DZone today,
Edit Profile Manage Email Subscriptions Moderation Admin Console How to Post to DZone Article Submission Guidelines
View Profile
Sign Out
Refcards
Trend Reports
Events
Zones
Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Partner Zones AWS Cloud
by AWS Developer Relations
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Partner Zones
AWS Cloud
by AWS Developer Relations
The Latest "Software Integration: The Intersection of APIs, Microservices, and Cloud-Based Systems" Trend Report
Get the report
  1. DZone
  2. Data Engineering
  3. Data
  4. DevOps: Flexible configuration management? Not so fast!

DevOps: Flexible configuration management? Not so fast!

Paul Jenson user avatar by
Paul Jenson
·
Dec. 19, 11 · Interview
Like (0)
Save
Tweet
Share
5.32K Views

Join the DZone community and get the full member experience.

Join For Free
you’re in charge of establishing a department-wide deployment automation capability. your fellow developers are excited about it, and their managers are too. there is no shortage of ideas on how it might work:


  • “let us create our own workflows!”
  • “we should be able to configure our own servers.”
  • “it should be able to deploy from nexus, artifactory, s3, or whatever we choose.”
  • “we can finally use the app versioning scheme my team likes.”
  • “my team should get to do parallel installs if we want”
  • “we should have open apis so anybody can execute their own deployment solution.”
  • “each team should be able to configure the middleware for their application’s needs.”




developers hate being told how to do things, so there is a general consensus that if you can make this deployment tool as flexible as possible, you’ll be able to build the best deployment automation system the world has ever seen.

sounds great, except that it’s totally wrong.

flexibility kills quality

drift is evil.  drift causes downtime and rollbacks.  flexibility creates drift.

i’ve been involved in data center migration projects where almost every server in a production farm was configured differently.  it’s amazing the application even worked!  on many other occasions we have rolled back code because the qa and prod configurations were so different that our testing failed to uncover critical bugs.  although these environments sound ridiculous, i’m confident that it describes a common scenario across enterprise environments.  i will also state that we had talented systems administrators managing the environments, unfortunately each one had the flexibility to manage the systems to their liking.

our initial investment in deployment automation (and what became devops) was largely driven by a need to eliminate drift and increase availability.  we knew automated deployments should be driven by data, and server instance data would be sourced from a cmdb.  however, we quickly realized that our cmdb schema allowed for configuration drift. this led to one of our first devops principles: don’t manage problems that you can eliminate .

eliminate drift with inflexible schema data .  tools from operations teams tend to be server or device centric and we wanted our deployment automation to be app and farm centric.  in other words, we wanted to deploy apps to a farm entity, where the server instances are attributes of the farm.  however, we found traditional schema for configuration data was very flexible.  the diagram below shows a typical farm with multiple instances, and each instance has an os version.  since the os version can be independently selected for each instance, the schema allows the ability to represent drift across the farm.  while architecting our app deployment cmdb (interestingly named deathburrito), we specifically did not want to manage farm configuration consistency.  we simply wanted a guarantee that our farm deployments did not have drift.

a typical cmdb schema that allows farm drift.

to achieve this we made a simple change to the schema that did just that – prevented the data from representing farm drift (picture below).  although you can incorrectly represent farm attributes, the data driven deployment is either 100% right or 100% wrong.

a better cmdb schema that prevents farm drift.

gratuitous flexibility and useful flexibility

eliminating schema flexibility to control drift is not that controversial since most people get it — and support it.  when you start limiting personal preference, man look out, people get really passionate over stupid things.  so we started communicating another one of our devops principles: flexibility is not always a good thing.

your deployment automation should start with inflexibility and provide flexibility as needed.  don’t get me wrong, we absolutely support innovation and the ability to empower our department with tools that enable creativity.  i often confuse the hell out of people by saying weird stuff like, “by limiting your flexibility, i can offer you more flexibility.”  and i actually mean it — because we focus on the flexibility that is actually valuable.  the objective is to distinguish between value-added flexibility and gratuitous flexibility, and eliminate the gratuitous junk.

  • value-added flexibility can be represented by a middleware option between tomcat, jboss and glassfish.  each solution provides different features to the development team and they should have the ability to choose the best match (within reason) for developing to application requirements.  easy enough, there is value to the options.
  • gratuitous flexibility can be represented by allowing multiple install directory variations for each tomcat app.  sysadmins usually have a preference and sometimes make it a very passionate preference.  although the configuration matters, it should support automation and security, not personal preference.  there is no inherent value gained by allowing your environment to have different install directories such as /opt , /app , /u01 .  in fact, allowing options creates complexity for install scripts, logging, permissions, service accounts, monitoring etc. pick one and restrict the rest.

one of the great things about automation is the ability to make the deployment platform deliver what you want, and fail what you don’t want.  it’s a platform that gives the devops team enforcement power in the it department that is rearly available.  like most organizations, you probably have many awesome design standards that are drafted, but in effect are just glorious shelfware documents.   automation empowers your ability to eliminate drift, control flexibility and operationalize the shelfware.

so back to my statement about limiting flexibility to offer more flexibility?  i will argue that by eliminating all the gratuitous variations, you can simplify environment complexity and eliminate the associated busy work and waste.  i also believe that eliminating the gratuitous variations will allow your devops teams to focus on delivering the value of predictable self-service deployments… real flexibility is the ability to provide your developer and test teams self-service deployments at any time, over weekends and around the clock.

source: http://skydingo.com/blog/?p=56

DevOps Data (computing)

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • Documentation 101: How to Properly Document Your Cloud Infrastructure Project
  • Introduction Garbage Collection Java
  • When Should We Move to Microservices?
  • How We Solved an OOM Issue in TiDB with GOMEMLIMIT

Comments

Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends: