DevOps là gì? Tại sao Developer nên biết và bắt đầu từ đâu?
DepOps là gì? Những kĩ năng và công cụ cần thiết cho DevOps. Cơ hội nghề nghiệp và phát triển
DevOps là gì?
Sơ đồ Venn của DevOpsTheo Wikipedia:
DevOps (kết hợp của cụm từ tiếng Anh “software DEVelopment” và “information technology OPerationS“) là một thuật ngữ để chỉ một tập hợp các hành động trong đó nhấn mạnh sự hợp tác và trao đổi thông tin của các lập trình viên và chuyên viên tin học khi cùng làm việc để tự động hóa quá trình chuyển giao sản phẩm phần mềm và thay đổi kiến trúc hệ thống. Điều này nhằm thiết lập một nền văn hóa và môi trường nơi mà việc build (biên dịch phần mềm), kiểm tra, và phát hành phần mềm có thể xảy ra nhanh chóng, thường xuyên, và đáng tin cậy hơn.
Theo mình hiểu một cách đơn giản thì DevOps là một văn hoá làm việc. Nơi mà các DevOps Engineer đòi hỏi nhiều kĩ năng hơn những Developer thông thường. Ngoài kĩ năng phát triển phần mềm thông thường, còn phải biết dùng kĩ năng coding của mình để phát triển các hệ thống deploy, monitor,… một cách tự động.
Khi mà bạn có thêm kĩ năng về DevOps thì cùng một vấn đề có thể bạn sẽ có thể có nhiều phương án giải quyết hơn. Từ đó tìm được những phương án tối ưu nhất.
Những kĩ năng và công cụ cần thiết cho DevOps
Chúng ta hãy cùng tìm hiểu về lộ trình để trở thành 1 DevOps Engineer.
Learn a Programming Language
Bạn cần học ít nhất 1 trong ba ngôn ngữ lập trình cơ bản: Java, Python, JavaScript.
Ngoài ra mình có suggest thêm có thể học PHP. Vì những ưu điểm vượt trội của PHP như dễ học, tài liệu, thư viện nhiều. Có một cộng đồng đông đảo…
Học một ngôn ngữ lập trình sẽ giúp bạn nâng cao tư duy lập trình. Giúp đỡ rất nhiều trong việc tạo ra các đoạn script một cách dễ dàng hơn.
Understand different OS concepts
Không nhất thiết cần hiểu sâu về OS và hardware như một Sysadmin. Nhưng ít nhất cũng nên có kiến thức cơ bản về: Process Management, Threads and Concurrency, Sockets, I/O Management, Virtualization, Memory storage and File systems
Mình nghĩ nên bắt đầu với Ubuntu (a Linux distribution). Vì nó Open Source, giao diện thân thiện, cộng đồng người dùng lớn. Là một trong những Best Linux Desktop Environment.
Learn to Live in terminal
Với một DevOps Engineer thì gần như đây là một điều bắt buộc.
Nguyên nhân ư? Chính là do CLI thì mạnh mẽ hơn rất nhiều so với GUI. Mặc dù GUI thì dễ sử dụng nhưng việc có thêm GUI sẽ làm cho OS trở nên nặng nề.
Có thể bắt đầu làm quen với một vài Linux shell: Bash, Ksh hoặc một vài tool phổ biến: find, grep, awk, sed, lsof, nslookup, netstat. (Nó sẽ rất hữu dụng khi làm việc trên môi trường CLI.)
Networking and Security
Đã qua rồi cái ngày mọi thứ bị cô lập, các hệ thống hoàn toàn không có sự tương tác qua lại với nhau. Trong thế giới hiện nay Vạn vật đều có thể kết nối, tương tác với nhau do đó Network và Security càng trở lên quan trọng.
Vì thế nên có kiến thức cơ bản về: DNS, HTTP, HTTPS, FTP, SSL. Hoặc tìm hiểu thêm về các lỗ hổng bảo mật thường gặp.
What is and how to setup
Bạn có thể bắt đầu làm quen và thử setup một vài Web Server phổ biến như: Apache và Nginx.
Tìm hiểu một số khái niệm và chức năng thường được sử dụng: Caching Server, Load balancer, Reverse Proxy, and Firewall
Có thể bắt đầu với một vài practice với Docker đơn giản như:
- Setup thử một vài cache server
- Giả lập có nhiều servers dưới local bằng cách dùng các Docker container. Sử dụng chức năng Load balancer của Web server để cân bằng tải cho server.
Learn Infrastructure as code
Mình nghĩ đây là một trong những vấn đề quan trọng nhất của một DevOps. Một DevOps Engineer nên biết
- Containers: Docker, Kubernetes
- Các công cụ quản lý cấu hình: Ansible, Pupet, Chef,..
Learn some Continuous Integration and Delivery (CI/CD) tools
Điều này cũng quan trọng không kém việc Learn Infrastructure as code. Khi nó giúp giảm thiểu công sức, sự nhàm chán khi cứ phải lặp đi lặp lại các thao tác mà mình hoàn toàn có thể làm nó một cách tự động.
Một vài CI/CD tool phổ biến như: Jenkins, TeamCity, Drone..
Hồi đầu mình làm quen với Jenkins. Mình có thử tạo 1 freestype project. Với những Step cơ bản như:
- Pull source code from git
- Build source code
- Chạy test code (Nếu cần thiết)
- Deploy to server
- Thông báo kết quả của việc build
Learn to monitor software and infrastructure
Ngoài việc setup và deploy lên server thì một phần không thể thiếu đó là việc monitoring server.
Bạn không thể ngồi 24 giờ/1 ngày, 7 ngày/1 tuần chỉ để biết con server còn sống hay đã chết. Các service có còn hoạt động hay không? Hay là việc Server đang dùng những tài nguyên như thế nào. Có dùng quá mức quy định hay không?
Có nhiều công cụ tốt bạn có thể thử như: Nagios, Zabbix, Icing, Datadog,…
Khi mà có hệ thống monitoring hoạt động ổn đinh. Bạn có thể dành thời gian để làm những việc khác. Khi có điều gì đó bất thường thì monitoring system sẽ gửi thông báo cho bạn thông qua mail hoặc điện thoại…
Learn about Cloud Provides
Định nghĩ về Cloud Computing trên Wikipedia
Có bao giờ bạn tự hỏi là tại sao các doanh nghiệp hiện nay lại dùng Cloud Server cho các ứng dụng mà họ phát triển. Mình điểm qua những ưu điểm vượt trội của Cloud server như sau:
- Dynamic computing resources: Khả năng mở rộng resource của hệ thống nhanh, hiệu quả, tiết kiệm. Khi chỉ cần 1 cú click chuột là bạn có thể thay đổi cấu hình của hệ thống.
- Giảm chi phí: Doanh nghiệp sẽ có khả năng cắt giảm chi phí để mua bán, cài đặt và bảo trì tài nguyên.
- Giảm độ phức tạp trong cơ cấu của doanh nghiệp: Doanh nghiệp sẽ giảm được nhân sự bên vận hành, bảo trì máy chủ. Nhất là với những công ty không làm việc trong lĩnh vực IT.
Nhắc đến Cloud Provides không thể kể đến 3 ông lớn đó là: AWS, Google Cloud và Microsoft Azure.
Tổng kết
Khi mà 1 Developer có thêm kiến thức về DevOps thì cơ hội nghề nghiệp của bạn cũng sẽ rộng mở hơn rất nhiều. Nhất là đối với những công ty có quy mô nhỏ. Không có những chuyên gia trong lĩnh vực DevOps.
Bạn có thể trở thành một key member của công ty khi có thể vừa tham gia vào quá trình phát triển hệ thống vừa đảm nhiệm thêm phần việc của 1 DevOps Engineer.