what is Devops ?


Jobs and Careers
As a software engineer, how do I shift my career to devops?
I work as a Software Engineer ( mainly with java , python , xml ,.. etc ) but I've been engaging lately in the operations part like working with Oracle weblogic , write shell scripting and so . so I've been thinking about instead of entirely leave the development ( this my current case ) instead of leaving my entire experience with the development ( 4 years for that matter ) I can get the best of both world and join the DevOps and maybe use my experience at development and newly added experience with the operations . I need to know how exactly I could do that in the best/software-enginner-mindset-friendly way possible ,
Re-AskFollow33
3 ANSWERS
Jonathan Fenocchi
Jonathan Fenocchi, DevOps Engineer at Bazaarvoice
108 upvotes by Vishal Biyani, William Emmanuel Yu, Quora User, Chris Krough, (more)
I'm going to answer this question as wholly and honestly as I possibly can. Nevertheless, I have filled this answer with an occasional shameless plug. You've been warned.

For starters, I work at www.bazaarvoice.com | Bazaarvoice. We're big fans of cloud. Real big. We're also fans of DevOps. There's a lot of discussion these days about "What is DevOps?" Usually, this term is used to describe Systems Programmers (sometimes called Infrastructure Engineers, Systems Engineers, Operations Engineers or, in the most unfortunate case, Systems Administrators). This is not what DevOps means, but in the context of career development, it carries the connotation of a "modern" Systems Programmer.

So, you're a developer and you want to get in on the ops action. Boy, are you in for a surprise. This isn't about installing Arch Linux and learning to write Perl. There's a place for that kind of thing (a very small, dark place in a very distant corner of the universe), but let's first consider a few things about what DevOps is and what DevOps is not.

What a DevOps role is:

Writing code / software.
Building tools.
Doing the painful things, as often as you can.
Being on the on-call rotation for 2 a.m. production outages.
Infrastructure design.
*NIX. Because Windows freaking sucks. (That said, I use OS X and prefer it to any *NIX distribution, but under the hood, it's *NIX, too.)
Scaling stuff. Scale matters.
Maintenance. Like rebooting that frail vhost with a memory leak that no one's bothered to fix or take ownership of.
Monitoring. Lots of it.
Virtualization.
Agile development methodology.
Software release cycles and management.
Automation. Automation. Automation.
Designing a branch/release strategy for the provided SCM (git, Mercurial, svn, etc).
Metrics / reporting. Goes hand-in-hand with monitoring.
Optimization / tuning.
Load / performance testing and benchmarking, including performance testing of highly complex systems.
Cloud. Really, you don't have to have cloud experience, but it can fundamentally change the way you think about complex systems.
Configuration management. (You've surely heard of Puppet, Chef, Ansible, etc. Yes?)
Security.
Load balancing / proxying. (Of services, systems, components and processes.)
Authentication services.
Command-line fu (like awk.
Package management. Freaking package management.
CI/CIT/CD -- continuous integration, continuous integration testing, and continuous deployment. This is the closest thing to the real meaning of "DevOps" that a Systems Programmer will do.
Databases. All of them. SQL, NoSQL, whatever.
Solid systems expertise. We're talking about the networking stack, how hard disks work, how filesystems work, how system memory works, how CPU's work, and how all these things come together. This is the traditional "operations" expertise you've heard about.

What a DevOps role is not:

Easier than being a software engineer.
Never writing code. I write tons of code.
Installing Linux and never touching your favorite OS again.
Working the third shift. (At least, it shouldn't be; if it is, quit your job and come work with me: Keep Austin Bazaar.)
More "fun" than being a software engineer.
Greenfield. You'll deal with old stuff in addition to new stuff.

A career shift

Here are a few things you should do to begin positioning yourself as a DevOps engineer.

Interview at a company that's hiring DevOps. If you get hired, you'll learn the operations side of things fast. Real fast. Or get fired. If you don't get hired, you'll learn what is still missing from your resume / experience that's preventing you from becoming a full-time DevOps engineer. Incidentally, we're hiring: Keep Austin Bazaar
Tell your boss you want to become a DevOps engineer at your company. Your boss should help you to this end. If he/she does not, quit. Then come work at Bazaarvoice with me and a bunch of other really awesome, super talented engineers working on some really awesome and challenging problems.
Obtain practical experience by using your skills as a software engineer to build tools rather than software. Look at any of the open source projects Netflix has written for examples / ideas.
Learn OpenStack. You can do this on your own time and budget. It's not important whether OpenStack sucks compared to Rackspace Cloud. What's important is that you understand all of the various components and why they are important. Have a wad of cash lying around? Learn Amazon Web Services instead.
Participate in anything your team does involving operations -- deployment, scale, etc. (See list above: "What DevOps is.") If your team doesn't do any of that (i.e., they send artifacts over to Operations and the Operations team does deployment), go over to the Operations team and sit in on a few deployments.

puppet test

Write a puppet master and slave application that does the following.

1: Ensures that all nodes in the system have the following config

a)Nginx is configured, running and has the following config in its home.conf file.

server_name home.somedomin.in 192.168.10.1;

# uWSGI serving Django.
upstream django-somedomin-home {
# Distribute requests to servers based on client IP. This keeps load
# balancing fair but consistent per-client. In this instance we're
# only using one uWGSI worker anyway.
ip_hash;
#server unix:///tmp/home-somedomin-uwsgi.sock;
server localhost:8005;
}


b) DNSMasq is running, it exists and has the following config 


c) Interfaces file exists, network manager is running and the following config is applied to all Client nodes

# /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# Example to keep MAC address between reboots
#hwaddress ether DE:AD:BE:EF:CA:FE
# WiFi Example
auto wlan0
iface wlan0 inet static
address 192.168.10.1
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1

Once you are done with the application. Please push your code to github and share the github account with me. 

You will be rated on 
1: Code quality
2: Commenting and clarity of thought
3: using libraries to achieve your task.


Questions to answer - 

1: If you had to solve one problem in the world, what would that be.
2: If we had to deploy a 1 million nodes network server infrastructure, what do you for see as possible challenges, issues. How would you overcome each? What measures would you put in place to detect such issues before the customer? How would you ensure that somedomin product is running 100% of the time, both online on AWS and offline through the network servers.  

Draw out the possible architecture for such a solution and list down the technologies you will chose. 

Other Articles

Enter your email address: