DevOps Là Gì? Giải Mã Văn Hóa DevOps và Con Đường Trở Thành DevOps Engineer

DevOps là một văn hóa làm việc đề cao sự hợp tác, kéo hai giai đoạn phát triển (development) và vận hành (operations) xích lại gần nhau hơn. Khái niệm DevOps ra đời nhằm tối ưu hóa chu trình phát triển phần mềm, giúp sản phẩm IT được release nhanh và thường xuyên hơn. Vậy DevOps là gì và làm thế nào để trở thành một DevOps Engineer chuyên nghiệp?

Để trả lời câu hỏi này, hãy cùng lắng nghe chia sẻ từ anh Nguyễn Đăng Phong, DevOps Manager tại Paradise Game Technology Ltd., và anh Trần Minh Tấn, Lead Engineer kiêm DevOps Engineer tại Giao Hàng Nhanh.

DevOps Là Gì? Định Nghĩa Ngắn Gọn

Minh Tấn: DevOps là một văn hóa làm việc đề cao sự hợp tác, hướng đến việc kéo hai giai đoạn phát triển và vận hành xích lại gần nhau hơn.

Cụ thể, 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 và vận hành.

  • Giai đoạn phát triển (development) bao gồm phần việc của designer, developer, QA, QC…
  • Giai đoạn vận hành (operations) có sự tham gia của system engineer, system administrator, operation executive, release engineer, DBA, network engineer, security engineer…

Hai giai đoạn này thường tách rời nhau, đặc biệt ở các công ty có quy mô trung bình trở lên. DevOps ra đời nhằm 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 nhanh và thường xuyên hơn.

Mô tả trực quan về quy trình DevOps, kết hợp phát triển và vận hành để tạo ra sản phẩm chất lượng caoMô tả trực quan về quy trình DevOps, kết hợp phát triển và vận hành để tạo ra sản phẩm chất lượng cao

DevOps Có Phải Là Một Nghề Nghiệp Mới?

Minh Tấn: DevOps không phải là một nhánh nghề nghiệp mới, mà là sự kế thừa và phát triển của một quan niệm về phát triển phần mềm đã tồn tại từ lâu.

Để hiểu rõ hơn, ta cần nhìn lại lịch sử ngành phần mềm. Thuở sơ khai, quy trình phát triển phần mềm không có sự phân tách rõ rệt giữa phát triển và vận hành. Kỹ sư đảm nhiệm cả việc phát triển, kiểm thử và triển khai sản phẩm. Điều này vẫn đúng với các sản phẩm vừa và nhỏ, vì người phát triển hiểu rõ sản phẩm và có thể chọn cách vận hành phù hợp nhất.

Tuy nhiên, sự bùng nổ về quy mô của các công ty và sản phẩm công nghệ dẫn đến sự chuyên môn hóa cao độ. 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, khiến 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 bộc lộ nhiều nhược điểm. Ngành phát triển phần mềm cũng dịch chuyển theo hướng microservices: một sản phẩm lớn được chia tách thành nhiều service nhỏ, liên kết với nhau để tạo thành một sản phẩm hoàn chỉnh.

Những bài toán mới được đặt ra:

  • Về quy trình, làm thế nào để các bộ phận hợp tác trơn tru hơn?
  • Về sản phẩm, làm thế nào để các service kết nối và giao tiếp hiệu quả, cũng như đảm bảo việc mở rộng (scaling) được “êm ái”?

Sự ra đời của DevOps là để giải quyết những vấn đề này.

DevOps Engineer Là Gì? Có Phải Là Sysadmin “Kiểu Mới”?

Đăng Phong: DevOps là một văn hóa làm việc mới, một phương thức tiếp cận để thu hẹp khoảng cách giữa quá trình phát triển và vận hành phần mềm, nhằm cung cấp phần mềm và dịch vụ nhanh hơn, tin cậy hơn.

DevOps Engineer là một vị trí nảy sinh do nhu cầu thực tiễn, có thể định nghĩa như sau:

DevOps Engineer = Tư tưởng mới + Công cụ mới + Kỹ năng mới

Mô hình DevOps Engineer kết hợp tư tưởng, công cụ và kỹ năng mớiMô hình DevOps Engineer kết hợp tư tưởng, công cụ và kỹ năng mới

Công việc chính của DevOps Engineer gần với Sysadmin, bao gồm: deploy, optimizing, monitoring, 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 coding, scripting để tự động hóa 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ể cùng review bug, viết unit test, và phát triển tiến trình CI/CD để deploy “êm ái” hơn.

Có thể coi DevOps Engineer là Sysadmin “kiểu mới”.

Giải Thích Rõ Hơn Về “Tư Tưởng Mới, Công Cụ Mới, Kỹ Năng Mới”

1. Tư Tưởng Mới

Trong hầu hết các công ty/dự án phần mềm, đội ngũ phát triển và vận hành bị chia tách thành nhiều team làm việc độc lập: Developer, Tester, Sysadmin… Từ đó, kiểu tư duy “chúng ta” – “chúng nó” hình thành, gây ra xung đột và ảnh hưởng xấu đến doanh nghiệp/sản phẩm.

Người làm DevOps Engineer trước hết phải có tư tưởng đúng: đặt lợi ích doanh nghiệp, lợi ích sản phẩm lên hàng đầu, và thấy rằng toàn bộ các team thực chất là 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 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, nắm được tiến trình của code.

Khi deploy code, nếu gặp vấn đề, DevOps Engineer có thể chủ động tìm lỗi và sửa mà không cần 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. Anh ta cần liên tục tìm hiểu, 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, sử dụng các công cụ như: JIRA, Redmine …
  • Để chuẩn bị cho Infrastructure as code, và xây dựng CI/CD process, sử dụng công cụ như: Terraform, Ansible, Jenkins, hay Github, Gitlab…

3. Kỹ Năng Mới

Sysadmin “kiểu cũ” rất lười code. Nhưng trong bối cảnh hiện nay, để tiếp tục theo đuổi ngành System, họ cần phải biết automation, tức là rèn luyện kỹ năng coding, scripting, và thậm chí học cả những ngôn ngữ lập trình mới theo công nghệ/stack mà nhóm phát triển sản phẩm sử dụng.

Các kỹ năng và công cụ cần thiết cho DevOps EngineerCác kỹ năng và công cụ cần thiết cho DevOps Engineer

Lợi Ích Lớn Nhất Của Việc Sử Dụng DevOps?

Minh Tấn: Đóng góp lớn nhất của DevOps là, cùng với phương pháp Agile, nó 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 là:

  • Tăng cường sự cộng tác chặt chẽ giữa nhóm phát triển (development) và nhóm vận hành (operation), 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ả đều 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.

Những Kỹ Năng và Tố Chất Cần Thiết Để Làm DevOps Là Gì?

Minh Tấn: DevOps Engineer thường là vị trí kiêm nhiệm (Developer kiêm nhiệm thêm phần việc operations, hoặc System Engineer kiêm nhiệm thêm một phần việc của dev…).

Kỹ năng lập trình “cứng” là điều 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, thông thạo về hệ điều hành đang sử dụng (Linux, Docker…).

Đặc biệt, người làm DevOps phải có khả năng research tốt để nhanh chóng tìm ra giải pháp, xử lý tình huống.

Về tố chất, sự cẩn thận, tỉ mỉ là quan trọng nhất, bởi vì DevOps Engineer thường đảm nhiệm những công việc như migrate data cho công ty. Một sai sót nhỏ có thể gây ảnh hưởng đến toàn hệ thống.

Một số công cụ thông dụng cho người làm DevOpsMột số công cụ thông dụng cho người làm DevOps

Tiêu Chí Quan Trọng Nhất Khi Tuyển DevOps Engineer?

Đăng Phong:

1. Luôn đặt lợi ích tập thể lên hàng đầu

Đây là tiêu chí quan trọng nhất, vì DevOps sinh ra là để giải quyết mâu thuẫn. Tiêu chí này thể hiện qua những việc rất nhỏ nhặt cụ thể, ví dụ như cách anh ta suy nghĩ, tổ chức, cấu trúc code/thư mục, chia sẻ những best practices… để mọi người có thể cùng nhau đọc và hiểu code đó, cùng tham gia được với mình.

2. 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 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, biết “thông cảm” hơn.

3. Giao tiếp và hợp tác tốt với các team khác

Trong công việc, mối quan hệ tốt thì cái gì cũng dễ dàng. Để xây dựng mối quan hệ tốt, nên gạt chức danh lead/manager qua một bên, để chơi với họ như là 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óm gọn lại, tiêu chí để chọn DevOps Engineer là: những sysadmin-coder tài năng, có kinh nghiệm, đồng thời hiểu rõ hai mục tiêu quan trọng của việc viết phần mềm là “kiếm tiền” và “giao hàng”, và tất cả mọi người đều cùng một phe, cùng cố gắng để đạt mục tiêu chung.

Chuyển Hướng Sang DevOps Engineer Như Thế Nào?

Đăng Phong: Do dòng đời xô đẩy (cười). Ban đầu, tôi xác định sẽ theo Network. Khi mới đi làm, tôi bắt đầu từ vị trí Network Engineer. Sau đó, tôi chuyển hướng sang System và làm cho công ty game của Nhật, lần đầu tiếp xúc với khái niệm Amazon Web Service.

Làm trên nền tảng Amazon, tôi được tiếp xúc với một số automated tools thế hệ đầu như Chef OpsCode/ Puppet/ CF-Engine. Nhờ vậy, tôi phát triển được phần automation của Infra. Cũng thời gian này, tôi lần đầu tiên tiếp xúc với khái niệm DevOps, hiểu được DevOps Engineer là gì, và cảm thấy cực kì hứng thú. Tôi bèn học thêm về coding, version control, những hệ thống quản lý task/bug như Redmine, Bugzilla, đồng thời hoàn thiện các kỹ năng mềm để theo đuổi hướng DevOps.

Bài Học Quan Trọng Đúc Rút Được Khi Làm DevOps?

Minh Tấn: Từ một sự cố khi migrate data sản phẩm, tôi rút ra bài học nhớ đời là phải cực kỳ cẩn trọng, tuân thủ nghiêm ngặt quy trình QA QC trước khi release. Ngoài ra, cần phải giữ bình tĩnh trong mọi tình huống, vì có cuống lên cũng không giải quyết được gì, mà chỉ thêm rối.

Và, từ kinh nghiệm cá nhân, tôi nhận thấy rằng làm việc nhóm thì phải biết thông cảm, an ủi người khác, đặc biệt là khi sản phẩm bị bug trên production.

Các Bạn Trẻ Muốn Trở Thành DevOps Engineer Thì Nên Bắt Đầu Từ Đâu?

Đăng Phong: 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 “DevOps là gì” từ sách báo, qua các trao đổi trên diễn đàn. Bạn cũng cần học một số ngôn ngữ lập trình cần thiết cho DevOps như: Python, Ruby, Lua Scripting.

Tiếp đến, bạn có thể lên các trang web tuyển dụng để đọc mô tả công việc, ví dụ như tin tuyển dụng DevOps. Từ đó, bạn sẽ biết thị trường đang cần những kỹ năng gì, xu hướng dùng những tools gì.

Ngoài ra, tôi đề xuất thêm một số tài liệu DevOps sau:

  • Sách DevOps – The Phoenix Project: Giúp có mindset đúng về công việc (luôn hướng đến lợi ích tập thể, lợi ích của doanh nghiệp).
  • Những khóa học DevOps của Edward Viaene trên Udemy: Đặc biệt là Learn DevOps: Continuously Deliver Better Software.
  • DevOps Tutorials: Cung cấp những kiến thức nền tảng cũng như những công cụ phục vụ cho công việc của DevOps.

Minh Tấn: Các bạn có thể tìm hiểu về DevOps qua:

  • 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 rất thú vị về sự ra đời cũng như những nguyên lý của DevOps.

Kết Luận

DevOps là một văn hóa làm việc mang lại nhiều lợi ích cho doanh nghiệp, giúp tăng tốc độ phát triển và triển khai phần mềm, đồng thời nâng cao chất lượng sản phẩm. Để trở thành một DevOps Engineer thành công, bạn cần trang bị cho mình những kiến thức, kỹ năng và tố chất phù hợp, cũng như luôn học hỏi và cập nhật những xu hướng mới nhất trong ngành.