DevOps là gì? Cần học gì để trở thành DevOps

DevOps là gì?

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

Tuy nhiên, 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, khái niệm DevOps ra đời.

Định nghĩa DevOps là gì?

DevOps là tên gọi mới, 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ừ khá lâu.

DevOps là sự kết hợp của từ Development (phát triển tính năng sản phẩm) + Operations (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…

Để cho dễ hình dung, và cũng để trả lời rõ hơn cho câu hỏi “DevOps là gì”, ta cần ngược trở lại lịch sử ngành phần mềm một chút:

  • Ở buổi ban sơ của kỷ nguyên máy tính:

Quy trình phát triển phần mềm không hề có sự phân tách rạch ròi giữa hai giai đoạn phát triển (development) và vận hành (operations), nhất là đối với các sản phẩm vừa và nhỏ. Vì là người phát triển sản phẩm, Developer sẽ hiểu rõ về sản phẩm để chọn cách vận hành phù hợp nhất nên anh ta sẽ đảm nhiệm việc develop, đồng thời cũng kiêm luôn việc test, deploy sản phẩm.

  • Sau đó, sự bùng nổ về quy mô của các công ty và sản phẩm công nghệ diễn ra:

Từ đó, kéo theo quy mô hệ thống phình ra theo cấp số nhân. Từ một vài 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 (ví dụ như trường hợp của Google, Facebook).

Yêu cầu chuyên môn hóa trở nên gắt gao, 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.

Ngoài ra, ngành phát triển phần mềm cũng dịch chuyển theo một hướng khác – microservices.

Microservices: Một sản phẩm lớn được chia tách làm rất 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ụ, đối với người dùng, một trang web thương mại điện tử là một sản phẩm hoàn chỉnh. Nhưng trên thực tế, trang web này được gộp lại từ rất nhiều feature như đăng kí, đăng nhập, tìm kiếm.v.v… Mỗi feature 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

Cùng với phương pháp Agile, DevOps 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).

Ngoài ra, 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.

Công việc của DevOps Engineer là gì?

DevOps Engineer là sự kết hợp theo công thức:

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

Nếu ta hiểu được DevOps là gì – 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 thì ta sẽ hiểu được DevOps Engineer là một vị trí nảy sinh do nhu cầu thực tiễn công việc, có thể tạm định nghĩa gồm tư tưởng, công cụ và kĩ năng mới.

Vậy công việc của một người làm DevOps là gì?

  • Về mặt quy trình, DevOps cần đảm bảo làm thế nào để các bộ phận hợp tác trơn tru thuận lợi hơn.
  • Về mặt sản phẩm, DevOps cần làm thế nào để các service kết nối và giao tiếp với nhau theo rules hiệu quả, cũng như đảm bảo việc scaling được “êm ái”.

Dựa trên công thức trên, ta có:

1. Tư tưởng mới:

Tư tưởng mới ở đây chính là DevOps Engineer cần cần đặt lợi ích doanh nghiệp, lợi ích sản phẩm lên hàng đầu, đồng thời 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 cũng như rủi ro.

Vậy thì, người làm DevOps Engineer là phải có tư tưởng – mindset đúng đầu tiên.

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 tương đối độc lập với nhau: Developer, Tester, Sysadmin.v.v… Cũng từ đó, kiểu tư duy “chúng ta” – “chúng nó” hình thành, tạo nên nhiều xung đột không đáng có, gây ảnh hưởng xấu đến doanh nghiệp/sản phẩm.

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 như trước kia. Thì nay, DevOps Engineer nên tham gia ngay từ đầu với đội ngũ phát triển. Nhằm:

  • 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 chạy như thế nào.v.v…

Khi deploy code, nếu gặp vấn đề ở chỗ nào, DevOps Engineer sẽ có thể chủ động tìm lỗi và fix luôn 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. Cũng nghĩa là, DevOps Engineer 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 thì 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 thì sử dụng công cụ như: Terraform, Ansible, Jenkins, hay Github, Gitlab…

3. Kỹ năng mới:

Nhìn chung, 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: 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 dùng coding, scripting để automate hệ thống.
  • Người làm DevOps Engineer cũng 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 những unit test thông thường, và để khi phát triển tiến trình CI/CD thì deploy “êm ái” hơn.

Cho nên, nếu coi DevOps Engineer là Sysadmin “kiểu mới” thì cũng không sai.

Tuy nhiên, 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 thì họ cần phải biết automation.

Cũng có nghĩa, họ cần 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.

DevOps cần thành thạo những kỹ năng và tố chất gì?

DevOps cần học nhiều một số ngôn ngữ lập trình cần thiết như: Python, Ruby, Lua Scripting và cả một số tool tùy theo yêu cầu công việc cụ thể.

Một DevOps muốn thành công cần phải sở hữu những kỹ năng và tố chất sau:

  • Kỹ năng lập trình “cứng” là điều bắt buộc

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 là System Engineer kiêm nhiệm thêm một phần việc của dev, v.v…) chính vì thế một DevOps cần phải có kỹ năng lập trình cứng.

Ví dụ, Tấn là System Engineer kiêm DevOps Engineer. Tấn muốn deploy version mới của sản phẩm lên 100 server. Nếu thực hiện việc này thủ công thì sẽ mất rất nhiều thời gian, và không tránh khỏi sai sót.

Trong trường hợp deploy thành công 50 con server, còn 50 con thất bại, thì cũng có nghĩa là sản phẩm của mình thất bại. Bởi vì cùng lúc sản phẩm sẽ chạy 2 version khác nhau, mà mình lại không kiểm soát 2 version này được. Muốn khắc phục thì cũng phải có thời gian.

Như vậy, để deploy nhanh hơn, hỗ trợ việc back-up, restore, đồng thời giảm thiểu rủi ro, thì với vai trò DevOps Engineer, Tấn sẽ viết automated script để ship code tự động lên server.

Ngôn ngữ lập trình phổ biến cho DevOps Engineer là Python, shell script.

Ngoài ra, để Ops, DevOps Engineer cũng cần hiểu sâu, thông thạo về hệ điều hành đang sử dụng (Linux, Docker.v.v…)

  • Kỹ năng research tốt

Đặ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.

  • Sự cẩn thận, tỉ mỉ là quan trọng nhất

DevOps Engineer thường sẽ đảm nhiệm những công việc như migrate data cho công ty nên họ cần đề cao sự tỉ mỉ. Khi đó, chỉ cần xảy ra một sai sót nhỏ, ví dụ như sai 1 IP server, thì sẽ 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

Đâ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 DevOps Engineer suy nghĩ, tổ chức, cấu trúc code/thư mục như thế nào, 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.

  • 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. Cho nên, DevOps Engineer là người 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.

Cụ thể, khi deploy mà code không chạy, thì DevOps Engineer cần xem xét kĩ: vấn đề nằm ở phía code hay phía môi trường.

Ví dụ, trường hợp làm với Laravel (PHP Framework), file config là .env. Sysadmin không có kinh nghiệm thì dễ mắc sai lầm là chỉ lấy phần code đó xuống và chạy và lỗi thì loay hoay và thường nghĩ do code.

Trong khi, lẽ ra cần phải hiểu những cấu hình liên quan đến môi trường và cách thức hoạt động của Laravel, và phải tác động vào file .env trước đã.

  • 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, và ngược lại.

Để xây dựng mối quan hệ tốt, anh Phong nghĩ nên gạt chức danh lead/manager gì gì đó qua một bên, để giao tiếp với họ như là bạn bè bình đẳng.

Bạn tôn trọng họ, thì họ cũng sẽ tôn trọng, dễ dàng chia sẻ với bạn hơn. Mà khi xảy ra chuyện, cần nhờ vả thì họ cũng dễ dàng đồng ý hơn.

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.
    Liệt kê ra thì dông dài như vậy, nhưng tóm gọn lại, tiêu chí để “chọn” DevOps Engineer nên 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”.
  • Tất cả chúng ta – manager, dev, tester, DBA, Sysadmin.v.v… đều cùng một phe, cùng cố gắng để đạt mục tiêu chung: cung cấp phần mềm chất lượng tốt, đáng tin cậy, và đem lại lợi nhuận kinh doanh cho khách hàng.

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, v.v…

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 của 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ì.

Related Posts
Sorry no related post found

Hãy bình luận đầu tiên

Để lại một phản hồi