DevOps là gì? 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. 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ể.

Nhằm “giải mã” DevOps là gì, công việc của DevOps là gì và DevOps Engineer cần thành thạo những kỹ năng gì, ITviec đã có buổi phỏng vấn với hai DevOps nhiều năm kinh nghiệm:

  • Anh Nguyễn Đăng Phong, DevOps Manager tại Paradise Game Technology Ltd.
  • Anh Trần Minh Tấn, Lead Engineer kiêm DevOps Engineer tại Giao Hàng Nhanh

Xem việc làm DevOps Engineer tại ITviec

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…
devops-la-gi-1
DevOpsDevelopment (phát triển tính năng sản phẩm) + Operations (vận hành)

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

Tham khảo thêm: Sự phát triển và tương lai của DevOps

Lợi ích của DevOps

Khi được hỏi “Lợi ích của DevOps là gì?”, anh Minh Tấn chia sẻ, “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ì?

Theo anh Đăng Phong, 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

Anh diễn giải thêm, 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.

devops-engineer-la-gi

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”

Anh Đăng Phong chia sẻ, 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.

Việc làm DevOps Engineer TPHCM

Việc làm DevOps Engineer Hà Nội

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.

Tham khảo thêm: DevOps Engineer vs System Engineer có phải là một vị trí?

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-la-gi-2
Những kĩ năng và công cụ cần cho DevOps – bấm vào đây để xem hình phóng lớn

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

Dựa trên những chia sẻ của anh Minh Tấn và Đăng Phong, 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

Anh Minh Tấn chia sẻ rằng 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.
Anh Tấn đưa ra một ví dụ vô cùng trực quan, dễ hiểu:

Tấn triển khai services trên nền tảng on premise. Một ngày “đẹp trời” nào đó, hệ thống gặp vấn đề, Tấn muốn move toàn bộ sản phẩm của mình lên cloud. Tuy nhiên, có rất nhiều cloud, nên chọn dùng cloud nào cho phù hợp?

Rõ ràng, trong tình huống này, nếu khả năng research không tốt, không nhanh chóng tìm ra cách để move toàn bộ mọi thứ đang chứa trên on premise lên cloud, thì sản phẩm của mình bị đình trệ rồi.

Hoặc, trong DevOps có rất nhiều bài toán hóc búa liên quan đến phần network, I/O, infra system .v.v… Một anh cứng về develop nhưng không hiểu sâu về phía Infra thì khi làm DevOps sẽ gặp rất nhiều khó khăn. Anh ta buộc phải research về Infra để phục vụ cho công việc.

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

Theo anh Tấn, 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, theo anh Đăng Phong, 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, anh Phong khẳng định rằng 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 của anh Phong 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.

Anh Đăng Phong nhấn mạnh rằ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ì.

devops-la-gi
Một số tool thông dụng cho người làm DevOps.

Tham khảo thêm: 8 công việc lương cao nhất ngành IT (DevOps!)

Tài liệu DevOps tham khảo

Anh Đăng Phong và Minh Tấn đề xuất một số nguồn tài liệu DevOps sau:

  • Sách Devops – The Phoenix Project: Cuốn sách này rất nổi tiếng, cá nhân mình đặc biệt thích vì nó giúp mình 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: Đây là khóa học đầu tiên về DevOps mà mình theo. Mình thấy rất sáng rõ, dễ hiểu, và thiết thực trong công việc.
  • 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.
  • 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. Bạn có thể tìm thấy rất nhiều thông tin từ chia sẻ tài liệu, kinh nghiệm cho đến tuyển dụng DevOps tại đây.
  • 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.

DevOps Engineer trong ngành nói gì?

Anh Minh Tấn vui vẻ chia sẻ về những sai lầm mà anh đã từng gặp phải khi làm DevOps và bài học anh rút ra được. Anh còn giỡn vui “Sai lầm thì nhiều lắm, Tấn húc đầu vào tường hoài chứ gì. Có lần còn “trót dại” húc suýt bể đầu luôn (cười)”.

  • Phải tuân thủ nghiêm ngặt quy trình QA QC

Để rút ra được bài học này, anh Tấn đã phải “nếm” phải sai lầm và trả giá đắt. Chỉ là sai sót nhỏ trong một dòng code, đã ảnh hưởng nghiêm trọng đến toàn bộ workflow sản phẩm. Sau đó, cả team anh, gồm 7 người, đã phải cày cật lực 10 ngày để khắc phục hậu quả.

Đợt ấy, team Tấn (ở công ty cũ) phụ trách migrate data sản phẩm, cụ thể là shipping data bằng automated tool.

Do chủ quan “code nhà mình” thì chắc “ngon lành cành đào” rồi, nên Tấn review không thật sự kĩ lưỡng. Tấn cũng chỉ test một phần (chứ không phải toàn bộ) trên môi trường staging – server test mà thôi.

Đến lúc đẩy code lên môi trường production thì, bùm, sự cố xảy ra!

Đại khái là sản phẩm lúc đó có tình trạng 2-3 user sử dụng 2-3 số điện thoại riêng biệt để đăng kí dùng chung 1 ID account. Khi những user này đăng nhập thành công, họ đều được redirect đến cùng 1 account.

Sự cố đã ảnh hưởng nghiêm trọng đến chuyện thanh toán tiền bạc của những ID account dùng chung, cũng như toàn bộ workflow của sản phẩm.

Từ sự cố kể trên, Tấn 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.

  • Phải giữ bình tĩnh trong mọi tình huống

Trong lúc làm việc, bạn cần phải giữ bình tĩnh trong mọi tình huống, vì cuống lên cũng không giải quyết được gì, mà chỉ thêm rối.

Có lần anh em team mình ở lại văn phòng làm việc khuya. Đến khoảng 3 giờ sáng thì xảy ra sự cố. Cả team vừa mệt vừa hoảng, nên cứ cuống lên rồi bị cuốn theo cái “hố đen” sự cố đến tận ngày hôm sau. Nếu bình tĩnh hơn, có lẽ bọn mình đã nhìn ra được giải pháp tốt nhất để xử lý tình huống ngay lúc đó.

  • Làm việc nhóm thì phải biết thông cảm, an ủi người khác

Khi sản phẩm bị bug trên production, thì người chịu trách nhiệm về những tính năng đó đang rất áp lực. Lúc này, nếu leader chỉ biết la lối, làm căng lên thì bạn đó sẽ không còn tinh thần để tiếp tục làm việc/giải quyết vấn đề.

Một leader tốt cần giữ bình tĩnh để trấn tĩnh tinh thần anh em, đồng thời phải cùng lao vào giải quyết vấn đề, chứ không phải chỉ đứng đằng sau chỉ trỏ.

Tiểu sử:

nguyen-dang-phong

Anh Nguyễn Đăng Phong bắt đầu sự nghiệp với vị trí Network Engineer tại một công ty bất động sản, tiếp đến là công ty game Gloops. Sau đó, anh Phong dần chuyển sang hướng System.

Trải qua các vị trí System Infrastructure, System Infrastructure Leader, DevOps Lead lần lượt tại Pinetech, Hotdeal, Inspectorio; hiện tại anh Phong là DevOps Manager ở Paradise Game Technology Ltd.

Nếu muốn trao đổi thêm về DevOps, bạn đọc của ITviec có thể ping anh Phong qua Skype cntt040, hoặc email cntt040@gmail.com. Anh rất vui được trò chuyện, chia sẻ kinh nghiệm cùng các bạn để học hỏi lẫn nhau.

***

tran-minh-tan

Anh Trần Minh Tấn tốt nghiệp Thạc sĩ chuyên ngành Khoa học Máy tính, Đại học Kĩ thuật Công nghệ TP.HCM (Hutech) năm 2015. Anh bắt đầu sự nghiệp với vị trí Senior Software Engineer tại Tappy, sau đó là Chợ Tốt.

Hiện tại, anh Tấn đảm nhiệm vị trí Lead Engineer kiêm DevOps Engineer tại Giao Hàng Nhanh.

Đừng quên tham khảo việc làm DevOps Engineer tại ITviec!

Robby2