In the near future, even as DevOps adoption go on to accelerating in both large enterprises and web-native organizations, confusion lingers about what precisely the term refer to and how is Devops Engineer oriented.
The History of DevOps Establishment
At the beginning of the computer era, when DevOps Engineer doesnot appear, the software development process did not have a clear separation between the two stages of development and operation. Engineers are also responsible for developing and concurrently testing, deploying products. And this is still true for small and medium products. The simple reason is that developer is a person making products so he also understands the products to choose the most suitable way to operate.
The explosion in the size of companies and technology products leads to an exponential expansion of the system. From some servers, the system can grow to tens, hundreds, thousands or even millions of servers (for example, Google, Facebook).
The requirement for specialization becomes severe, making the software development process separate into distinct stages. This is the period when dev and ops separate.
DevOps (combination of English words "software DEVelopment" and "information technology OPerationS") is a term for a set of actions that emphasize the cooperation and exchange of information of programmers and IT experts working together to automate software product transfer and system architecture changes. This is to establish a culture and environment where software development, testing, and software release can happen quickly, frequently, and more reliably.
The popular programming language for DevOps Engineer is Python, shell script.
In general, DevOps is a working culture that promotes collaboration, aimed at pulling two stages of development - operation together.
Specifically, the software development progress (Software Development Life Cycle) consists of two main stages: development and operation.
Development stage (development) includes the work of designer, developer, QA QC ...
Operations stage with the participation of system engineer, system administrator, operation executive, release engineer, DBA, network engineer, security engineer, …
These two periods are relatively separate, especially in companies with average or higher size. Therefore, the DevOps concept was created to optimize the software development cycle, help IT products release faster and more frequent.
In addition, the software development industry shifted in a different direction - microservices.
Microservices: a large product is split into many small services, these services are linked together to create a complete product.
For instance, with users, an e-commerce website is a complete product. But in fact, this site is bundled with lots of features like registration, search, etc. Each of these features is a distinct service, which can use its own programming language and database.
DevOps Engineer - Career and Skills
DevOps Engineer is a position that arises due to the practical needs of the work of developing and operating software products.
In general, the main work of DevOps Engineer is very close to the work of System Administrator (Sysadmin), including: deploy, optimizing, monitoring, analysis, ... The difference is:
- DevOps Engineer requires more soft skills, and must know to use coding and scripting to automate the system.
- DevOps Engineer also needs to find out about the stack used in the company products, to be able to review the bug, write common unit tests, and when developing the CI / CD process (the combined practices of Continuous Integration and Continuous Delivery and/or Continuous Deployment) it will deploy smoother. It can be said that DevOps Engineer is a "new style" Sysadmin.
Skills and personality needed for DevOps Engineers:
- With Dev, "Proficient" programming skills are required.
- In addition, to Ops, need to understand deeply and proficient in the operating system in use (Linux, Docker, ...)
- In particular, people who work with DevOps must have good research capabilities to quickly find solutions and handle situations.
- As for personality of DevOps Engineer, care and meticulosity are the most important.
Because DevOps is a cultural and collaborative change (between software development, operating and testing teams), there is not only one "DevOps tool" but instead the tool chain DevOps covers many tools.
Usually, the DevOps tool chain used to do the job is suitable for one or more categories, which reflects the key aspects of software development and software delivery process:
Code – code development and approval, code management tools, code merging
Build – continuous integration tools and build status
Test – continuous testing tools, determining performance results that provide quick and timely feedback on business risks
Package – artifact repository, stages of application in pre-deployment
Release – change management, release approvals and automatic release
Configure – infrastructure configuration and management as well as infrastructure as code tools
Monitor – applications performance monitoring, end-user experience