DevOps đang là một trong những từ khóa hot nhất trong ngành công nghệ thông tin hiện nay. Nhưng DevOps là gì? DevOps Engineer làm gì? Để “giải mã” những khái niệm này, hãy cùng tìm hiểu chi tiết về DevOps, vai trò của DevOps Engineer và những kỹ năng cần thiết để thành công trong lĩnh vực này.
Mục Lục
DevOps Là Gì?
Để hiểu rõ DevOps là gì, trước tiên cần nắm vững chu trình phát triển phần mềm (Software Development Life Cycle), bao gồm hai giai đoạn chính: phát triển (development) và vận hành (operations). Trong nhiều công ty, đặc biệt là các công ty có quy mô trung bình trở lên, hai giai đoạn này thường tách biệt nhau.
DevOps ra đời nhằm mục đích tối ưu hóa chu trình phát triển phần mềm, giúp sản phẩm IT được phát hành (release) nhanh chóng và thường xuyên hơn.
Định Nghĩa DevOps
DevOps là sự kết hợp giữa Development (phát triển) và Operations (vận hành), là sự kế thừa và phát triển của các phương pháp phát triển phần mềm đã tồn tại từ lâu.
- Giai đoạn phát triển (Development): Bao gồm công việc của designer, developer, QA/QC…
- Giai đoạn vận hành (Operations): Bao gồm công việc của system engineer, system administrator, operation executive, release engineer, DBA, network engineer, security engineer…
Để hiểu rõ hơn về DevOps, hãy cùng nhìn lại lịch sử phát triển của ngành phần mềm:
-
Thời kỳ sơ khai của kỷ nguyên máy tính: Quy trình phát triển phần mềm không có sự phân tách rõ ràng giữa hai giai đoạn phát triển và vận hành, đặc biệt đối với các sản phẩm vừa và nhỏ. Developer, với vai trò là người phát triển sản phẩm, sẽ hiểu rõ về sản phẩm và lựa chọn cách vận hành phù hợp nhất, đồng thời đảm nhiệm luôn việc kiểm thử (test) và triển khai (deploy) sản phẩm.
-
Sự bùng nổ về quy mô của các công ty và sản phẩm công nghệ: Điều này kéo theo sự gia tăng theo cấp số nhân về quy mô hệ thống. Từ một vài máy chủ (server), hệ thống có thể phát triển lên đến hàng chục, hàng trăm, hàng nghìn, hoặc thậm chí hàng triệu server. Yêu cầu chuyên môn hóa trở nên khắt khe, khiến quy trình phát triển phần mềm chia tách thành những giai đoạn riêng biệt. Đây là giai đoạn mà Dev và Ops tách bạch.
-
Khoảng một thập kỷ trở lại đây: Trước nhu cầu phát triển và cải tiến sản phẩm liên tục để đáp ứng thị trường, sự chia tách này lại bộc lộ những nhược điểm rõ rệt. Ngành phát triển phần mềm cũng dịch chuyển theo hướng microservices.
Microservices: Một sản phẩm lớn được chia thành nhiều service nhỏ, các service này liên kết với nhau tạo thành một sản phẩm hoàn chỉnh. Ví dụ, một trang web thương mại điện tử bao gồm nhiều tính năng như đăng ký, đăng nhập, tìm kiếm,… Mỗi tính năng này là một service riêng, có thể sử dụng ngôn ngữ lập trình và database riêng.
Lợi Ích Của DevOps
DevOps, cùng với phương pháp Agile, giúp hoàn thiện việc chuyển đổi quy trình phát triển và vận hành phần mềm từ mô hình thác nước (waterfall) sang mô hình phát triển/phát hành liên tục (continuous development/releases).
Những lợi ích chính của DevOps bao gồm:
- Tăng cường sự cộng tác chặt chẽ giữa nhóm phát triển và nhóm vận hành, cũng như khả năng làm việc liên chức năng (cross-functional).
- Nâng cao tần suất triển khai (deployment), giúp rút ngắn thời gian phát triển/cải tiến sản phẩm.
- Tận dụng các công cụ tự động hóa, giúp hạn chế rủi ro, giảm tỉ lệ thất bại.
- Thời gian phục hồi sản phẩm nhanh hơn.
Tất cả những điều này phục vụ cho mục đích cuối cùng là cải thiện khả năng cung cấp dịch vụ IT một cách nhanh chóng, từ đó tăng khả năng cạnh tranh của sản phẩm/doanh nghiệp.
Công Việc Của DevOps Engineer
DevOps Engineer là sự kết hợp giữa tư duy mới, công cụ mới và kỹ năng mới. DevOps Engineer cần đảm bảo sự hợp tác trơn tru giữa các bộ phận, đồng thời đảm bảo các service kết nối và giao tiếp hiệu quả, cũng như đảm bảo khả năng mở rộng (scaling) dễ dàng.
Dưới đây là chi tiết về công việc của một DevOps Engineer:
1. Tư Tưởng Mới:
DevOps Engineer cần đặt lợi ích của doanh nghiệp và sản phẩm lên hàng đầu, nhận thức rằng tất cả các team đều thuộc cùng một “phe”, cùng chia sẻ lợi ích và rủi ro. Thay vì đợi team Dev phát triển xong sản phẩm rồi team Ops mới tham gia vận hành, DevOps Engineer nên tham gia ngay từ đầu với đội ngũ phát triển.
- Hiểu rõ sản phẩm hơn để tối ưu hóa sản phẩm tốt hơn.
- Học ngôn ngữ lập trình mà công ty sử dụng để nắm được logic code, mài sắc khả năng tư duy và nắm được tiến trình của code.
Khi triển khai code (deploy code), nếu gặp vấn đề, DevOps Engineer có thể chủ động tìm lỗi và sửa (fix) mà không cần phải chờ developer.
2. Công Cụ Mới:
Nhiệm vụ quan trọng của DevOps Engineer là tự động hóa hệ thống. Do đó, DevOps Engineer cần liên tục tìm hiểu, lựa chọn và sử dụng các công cụ mới, hoặc thậm chí tự phát triển các automation tool cho công ty. Ví dụ:
- Để hỗ trợ Agile/Scrum: JIRA, Redmine…
- Để chuẩn bị cho Infrastructure as code và xây dựng CI/CD process: Terraform, Ansible, Jenkins, Github, Gitlab…
3. Kỹ Năng Mới:
Công việc chính của DevOps Engineer rất gần với công việc của Sysadmin, bao gồm: triển khai (deploy), tối ưu hóa (optimizing), giám sát (monitoring), phân tích (analysis)… Điểm khác biệt là:
- DevOps Engineer đòi hỏi nhiều kỹ năng mềm hơn, đồng thời phải biết sử dụng coding, scripting để automate hệ thống.
- DevOps Engineer cần tìm hiểu về stack mà sản phẩm công ty đang sử dụng để có thể review bug, viết unit test và triển khai CI/CD “êm ái” hơn.
Kỹ Năng và Tố Chất Cần Thiết Của DevOps Engineer
Để thành công trong vai trò DevOps Engineer, bạn cần trang bị những kỹ năng và tố chất sau:
-
Kỹ năng lập trình “cứng”: DevOps Engineer thường là vị trí kiêm nhiệm (Developer kiêm nhiệm thêm phần operations, hoặc System Engineer kiêm nhiệm thêm một phần việc của dev…). Do đó, kỹ năng lập trình là yếu tố bắt buộc. Ngôn ngữ lập trình phổ biến cho DevOps Engineer là Python, shell script. Ngoài ra, cần hiểu sâu về hệ điều hành đang sử dụng (Linux, Docker…).
-
Kỹ năng research tốt: Khả năng research giúp DevOps Engineer nhanh chóng tìm ra giải pháp và xử lý tình huống. Ví dụ, khi muốn chuyển toàn bộ sản phẩm lên cloud, DevOps Engineer cần nhanh chóng tìm ra cách để di chuyển mọi thứ từ on-premise lên cloud.
-
Sự cẩn thận, tỉ mỉ: DevOps Engineer thường đảm nhiệm những công việc như migrate data cho công ty, do đó cần đề cao sự tỉ mỉ. Một sai sót nhỏ, ví dụ như sai IP server, có thể gây ảnh hưởng đến toàn hệ thống.
-
Luôn đặt lợi ích tập thể lên hàng đầu: DevOps sinh ra để giải quyết mâu thuẫn giữa các team. Tiêu chí này thể hiện qua cách DevOps Engineer suy nghĩ, tổ chức, cấu trúc code/thư mục, chia sẻ best practices để mọi người có thể cùng đọc và hiểu code, cùng tham gia.
-
Nhìn nhận mọi thứ từ nhiều khía cạnh: Mâu thuẫn giữa nhóm phát triển và vận hành thường nảy sinh từ sự khác biệt về góc nhìn. DevOps Engineer cần nhìn nhận mọi thứ từ nhiều khía cạnh để khách quan, sáng suốt hơn và biết “thông cảm” hơn.
-
Giao tiếp và hợp tác tốt với các team khác: Mối quan hệ tốt giúp mọi việc trở nên dễ dàng hơn. Để xây dựng mối quan hệ tốt, nên gạt bỏ chức danh và giao tiếp với mọi người như bạn bè bình đẳng.
Ngoài ra, một DevOps Engineer cũng cần có:
- Kinh nghiệm với system và IT operations, quản lý dữ liệu.
- Nắm vững các tiến trình (CI/CD) và công cụ tự động hóa.
- Khả năng sử dụng nhiều công nghệ và mã nguồn mở, coding/scripting.
Tài Liệu Tham Khảo DevOps
Dưới đây là một số tài liệu DevOps mà bạn có thể tham khảo:
- Sách Devops – The Phoenix Project: Giúp bạn có mindset đúng về công việc, luôn hướng đến lợi ích tập thể và doanh nghiệp.
- Những khóa học DevOps của Edward Viaene trên Udemy: Đặc biệt là khóa Learn DevOps: Continuously Deliver Better Software.
- DevOps Tutorials: Cung cấp kiến thức nền tảng và các công cụ phục vụ cho công việc của DevOps.
- DevOps Việt Nam: Hội nhóm mở trên Facebook dành riêng cho các DevOps tại Việt Nam.
- What is DevOps: Bài viết thú vị về sự ra đời và những nguyên lý của DevOps.
DevOps trước hết là vấn đề mindset, nên bạn cần phải “đả thông tư tưởng” trước. Bạn có thể tìm hiểu từ sách báo, diễn đàn và học một số ngôn ngữ lập trình cần thiết như Python, Ruby, Lua Scripting. Sau đó, hãy xem các trang web tuyển dụng để biết thị trường đang cần những kỹ năng và công cụ gì.
