Software development has always been a demanding field of work. Unlike many other professions, software developers always have to be up to date with the latest and greatest in the tech industry. The breadth of knowledge a person can have is limited, however. As systems became more complex, dividing the software development process into development and deployment made much more sense. Devops handles the deployment end of the process.
While deployment and systems administration is a major task in itself, devops engineers are no longer limited to the conventional boundaries of a sysadmin. This change has been caused by the industry wide shift to cloud based systems from on-premise systems. Devops encompasses a much broader range of skills today. The most important skills a devops engineer must have in 2018 are discussed below.
Working with the cloud
Nearly all jobs in the devops field today are related to cloud based service administration. The term “cloud” broadly refers to someone else’s computer, for example the offerings from Amazon AWS, Google Cloud Platform, Microsoft Azure and DigitalOcean. These providers allow the user to provision and destroy servers on demand. This layer of abstraction gives rise to a very powerful way of architecting and scaling services based on the real-time demand. A devops engineer must be very comfortable with using these providers, provisioning servers programmatically using a deployment tool like Ansible, Puppet, or Chef, handling firewalls, and other sysadmin specific tasks.
Today, everyone uses continuous integration. Providers like TravisCI and CircleCI allow the user to run builds on their systems based on conditions like new commits to the codebase and report back the results to the required endpoints using webhooks. Once a build succeeds, they can hook into the production or staging servers and perform the actual deployment. A devops engineer must be comfortable with using and setting up continuous integration. Familiarity with the popular OSS alternative Jenkins is an added bonus.
As the industry largely moves from monolithic applications to microservices architecture, the deployment process has become much more complex. A devops engineer must be familiar with the design choices made in microservices based architectures and the rationale behind them.
One important benefit of microservices is the scaling potential they provide. Individual services can be scaled horizontally or vertically as per the demand. A devops engineer must know about orchestration, setting up load balancers/proxies, when to scale and in which direction, and sharding databases.
Distributed systems are required because of the limits imposed by vertical scaling. As microservices become more and more parallel, distributed systems concepts come into play. A devops engineer must know how to work with message queues, setting up replication on databases, service discovery, and inter-process communication techniques. On the theoretical side, a good devops engineer must know about the CAP theorem, the various tradeoffs and various consensus algorithms.
[easy-tweet tweet=”Devops engineers are often required to automate processes other than software development” hashtags=”Devops, Cloud”]
Good devops engineers automate as much as they can. A devops engineer must know about setting up automatic backups to a storage platform like Amazon S3, automated deployment systems, monitoring, and automated alerts to the relevant people. Devops engineers are often required to automate processes other than software development. Automation is an indispensable requirement in achieving business growth. Open source marketing automation software like Mautic can be used for this. A devops engineer must be comfortable in automating services by joining them via webhooks.
Virtualization is the backbone of all cloud based services today and containers are right at the center of this development. Docker and rkt are two popular container engines used widely in production by many companies. A devops engineer must be familiar with these container engines and other alternatives like containerd, and BSD Jails. Additionally, devops engineers should have experience with container orchestration, networking with containers, service discovery, integration with build systems, init system for multi-service containers, and setting up security profiles for AppArmor and SELinux.
Logs are the unifying layer in many distributed systems. A good devops engineer must be experienced with rotating logs, a metrics server like Graphite, logging drivers like Syslog, Fluentd, and systemd logging via Journald. Bonus points for being familiar with making containers work with different logging drivers, sending logs to data processing pipelines, and setting up log based replication in databases.
The breadth of knowledge required for becoming a good devops engineer can be daunting. Devops engineers need to match the pace of change in the industry. With large scale automation coming into the picture, the role of a devops engineer has become very crucial. Trying out new and challenging paradigms is the key to moving forward and staying relevant as a devops engineer.