Tuesday, October 18, 2016

Short notes on DevOps

DevOps: 

Integrates Developers and Operations teams in order to improve collaboration and productivity by Development of systems or application and automating infrastructure, deployment and monitoring performance.

Traditional approach and pitfalls:
Initially Developers(Application developers with programming skills and QA engineers) and Operations (Skills of configuring Networking/Firewall, Installing Windows/Unix/Linux/Database and other products, Deployment and monitoring of applications) are two different roles/groups.
The implementation of application would always start by Developers in their local boxes, where developer is responsible for Planning, Architecting, Designing, Implementing, Testing, Building, Packaging and Deploying in his local machine or in less capable environment or sandbox.

When it is decided by IT management or Business teams to take it to higher environments ( Functional Automation Testing, Performance Testing, User Acceptance Testing and finally into Production), an engagement of Infrastructure & Operations (I&O) team is required to create these environments on right infrastructure and with firewall configuration to isolate internal/external access.

By this time, I&O team has no clue about application release and has to find out the capacity to support this asset in all desired environments. The team may also needs to plan to upgrade H/W and change number of instances/clusters and increase disk space and RAM to make the asset more stable in production environment.

The turnaround time to promote a smallest change from conceptual to working solution is huge and the business may fall behind if the speed to market and attract/retain end customers is a very important part of Business Strategy.
This clearly shows the IT is falling behind the Business strategy.

New Approach:
If both Developers and Operations teams work together from the beginning of building the Application by following new standards,  the amount of time that will take to promote/release the asset into higher environments can be reduced.

How is this possible now?

The innovation and advancement of concepts in Hardware and software to manage the hardware has opened for following new practices to emerge.

a. Virtualization / Containerization (Docker)
 Allowing software to run multiple operating systems at the same time on same Hardware.
The software (Ex. Hypervisors) offers layer of abstraction, and allow to install many Guest OS and work with shared Hardware, Memory and other hardware resources.
b. Cloud (Utility) Computing.
c. Automating Infrastructure with scripts (Chef, Puppet, Saltstack and Ansible) and Vagrant for creating portable environments to run any other OS/Host.
d. The new concepts and practices are being evolved continuously and watch out or new disrupting concepts....

How do we engage this?
There are several vendors offering a complete suite of tool-chain to help IT organizations to realize the benefits of DevOps.  Mixing the other standards or methodologies (Agile/XP) of software development will take the complete Software Development and Delivery process to new level so that IT organization can immediately meet and align with Business priorities.

Other Benefits:
a. Innovate faster
b. Speed to market and get the feedback faster to improve the product.
c. Code little, build, test (Automated functional and performance, regression scripts) and release/deploy (using CI and CD practices) into all (including Prod) env in Iterative manner in collaboration with Operations team
d. Automate everything (Building, Automated Functional Testing, Automated Performance Testing, Regression Testing and  Release into Infrastructure),
e. Keep configuration of all (Dev, QA, PerfT, UAT and Prod) environments same to avoid surprises.
f. Monitor the application performance

Emphasizes a  Continuous Development (Developers) and Deployment (Operations/Administrators) using Agile practices. It is a cultural shift to IT teams (Software Engineering, Quality Assurance and Infrastructure Operations).

Automates the software delivery and infrastructure operations (i&o) in very collaborated manner very often and repeatedly.The following are key stages of DevOps.
Please refer to spreadsheet.DevOps Phases and Tools

DevOps Tools:  GitHub (source code management), Jeninks/Hudson (Continuous Integration & Deployment), Chef/Puppet (Infrastructure as code), Docker-Container, Hyper (vagrant), NewRelic (Application peformance monitoring of Logs) and SiteScope for alerts, Openshift