DevOps là thuật ngữ được nhắc đến rất nhiều trong thời gian gần đây kéo theo nghi vấn của rất nhiều người về DevOps. Vậy DevOps là gì mà được nhiều người chú ý như vậy? DevOps là một công cụ hay một phương pháp? Hãy theo dõi bài viết sau đây để hiểu thêm về DevOps nhé!
DevOps là gì?
DevOps là một sự kết hợp của các nguyên lý, thực hành, quy trình và các tool giúp tự động hóa quá trình lập trình và chuyển giao phần mềm. Với DevOps, các công ty có thể “release” các tính năng nhỏ rất nhanh và kết hợp các phản hồi mà họ nhận được một cách nhanh chóng. DevOps là kết hợp của các cụm từ tiếng Anh software development và information technology operations.
Giai đoạn phát triển (development) bao gồm phần việc của UI 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,…
Hai giai đoạn này tương đối tách rời nhau. Đặc biệt là ở những công ty có quy mô từ trung bình trở lên. Vì thế, 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 phần mềm được release nhanh và thường xuyên hơn.
DevOps Engineer là gì?
Các công việc chính của DevOps Engineer gần giống 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 như phải có coding skill, scripting để automation hệ thống.
DevOps Engineer cần tìm hiểu về tech stack mà sản phẩm công ty đang sử dụng. Ngoài ra họ cũng có thể cùng review bug hay viết những unit test thông thường.
DevOps Engineer nay thường phải tham gia ngay vào giai đoạn phát triển nhằm:
Chuẩn hóa môi trường làm việc từ local cho đến production.
Hiểu sản phẩm hơn, để tối ưu hóa sản phẩm tốt hơn.
Nắm được cơ bản logic code, nắm được tiến trình của code chạy như thế nào.v.v…
DevOps cần học những gì?
Để làm được devops bạn phải biết khá nhiều thứ về system cũng như coding và nhiều kỹ năng sau đây:
Biết và sử dụng thành thạo linux, window, macOS. Biết dùng thành thạo lệnh Terminal trong linux, CMD và powercell trong window và lệnh trong Linux hoặc Macos. Có kiến thức cơ bản về: Process Management, Threads and Concurrency, Sockets, I/O Management, Virtualization, Memory storage and File systems.
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.
Biết cài đặt và sử dụng 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.
Biết và sử dụng một số dịch vụ cloud như AWS của amazon, google cloud, và azure của microsoft.
Biết code một số ngôn ngữ hệ thống như bashscript, java, javascipt , python, Php…
Biết dùng 1 số tool để triển khai CI&CD như jenkins, jira , git (Gitlab, Bitbucket…)… Một DevOps Engineer nên biết Infrastructure as code):
Containers: Docker, Kubernetes
Các công cụ quản lý cấu hình: Ansible, Pupet, Chef,..
Biết sử dụng các tool monitoring server như: Nagios, Zabbix, Icing, Datadog…
DevOps là làm gì?
DevOps là một thành phần cực kỳ quan trọng trong quy trình phát triển phần mềm 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 (CI/CD).
Tất cả đều phục vụ cho mục đích cuối cùng là cải thiện khả năng triển khai phần mềm 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.
CI (Continuous Integration): Một hình thức trong việc phát triển phần mềm, các developer thường gộp hoặc chuyển các thay đổi trong code về một repo master, và các build và test sau đó sẽ tự động chạy. Mục tiêu của CI đó là tìm bug nhanh hơn từ sớm, cải thiện chất lượng phần mềm, và giảm thiểu thời gian để xác thực và ra mắt các update mới.
CD (Continuous Deployment) : Mọi thay đổi được duyệt qua test sẽ tự động được triển khai trên production. Nghĩa là bạn pull bản build mới nhất hoặc tìm repo mới nhất đã được test và tiến hành deploy trên production. CD là một cách tuyệt vời để tăng tốc quá trình deploy sản phẩm liên tục để đáp ứng các yêu cầu liên tục của khách hàng.
Xây dựng kiến trúc (Infrastructure as code) hệ thống như là code: Định nghĩa này hơi khó hiểu, có thể hiểu như là một phương pháp để đảm bảo rằng bạn có thể maintain chất lượng version control trong khi sử dụng CI. Infrastructure cần được cấu hình tự động hoàn toàn để các server được chuẩn hóa các bản patch và version mới nhất.
Communication và Collaboration: Collaboration và communication là các nhân tố bí ẩn giúp doanh nghiệp phát triển và đánh giá DevOps. Nó đẩy nhanh quá trình phát triển, vận hành và cả các team khác như marketing, sales, cho phép các bộ phận của tổ chức tiến gần hơn với việc đạt được mục tiêu.
Lợi ích của DevOps
Tốc độ : DevOps giúp các developers và team operations đạt được mục tiêu ở một tốc độ khác giúp cải tiến sản phẩm nhanh chóng phục vụ người dùng, thích nghi với thị trường tốt hơn và điều chỉnh hiệu quả kinh doanh hiệu quả hơn.
Chuyển giao nhanh chóng: Tăng tốc độ release thường xuyên để chúng ta cải thiện sản phẩm nhanh hơn và cho ra mắt các feature nhanh hơn cũng như fix bug, giúp phản hồi cho khách hàng nhanh chóng và xây dựng nên lợi thế cạnh tranh tốt hơn.
Độ tin cậy : DevOps đảm bảo chất lượng bằng cách áp dụng CI /CD, Monitoring và logging process. Bằng cách update mà team infrastructure cấp quyền cho team development để chuyển giao nhanh hơn mà vẫn duy trì được trải nghiệm người dùng tốt.
Mở rộng : Team vận hành, quản lý infra và các quy trình. Lên kế hoạch về quy mô và nâng cấp môi trường giúp quản trị các hệ thống phức tạp hoặc hay thay đổi hiệu quả cũng như giảm thiểu rủi ro.
Bảo mật : DevOps giúp di chuyển mà không chịu tổn thất về bảo mật bằng các chính sách, kiểm soát và phương pháp quản lý configuration. Thậm chí các team có thể kêu gọi bạn theo các tiêu chuẩn từ sớm bằng cách cung cấp các setup các tool theo dõi.
DevOps Culture
Với cách làm việc truyền thống trước đây – dev làm việc riêng và operations làm việc riêng, họ sẽ có mục tiêu công việc khác nhau. Nếu như mục tiêu của dev là xây dựng function đúng với requirement và release cho khách hàng càng nhanh càng tốt thì mục tiêu của operations là tạo ra một hệ thống ổn định. Trong một hoàn cảnh nào đó, hai mục tiêu này sẽ đối lập nhau, function có thể chạy tốt lúc release nhưng sau một thời gian có thể xuất hiện nhiều lỗi hoặc chạy chậm. Hoặc một sản phẩm suy nghĩ nhiều về maintaince system sẽ làm chậm thời gian release. Vì thế, DevOps được sinh ra với ý tưởng là kết hợp Dev và Ops mới một mục tiêu chung là “Speed and Stability” – Tốc độ và ổn định.
Khi có 1 team DevOps, những mục tiêu cần đạt đến phải cụ thể như sau:
Fast time – to market (TTM) : code nhanh, deploy nhanh
Few production failures : khi sản phẩm được đảm bảo về tính ổn định ngay từ đầu thì lỗi sẽ ít xảy ra hơn
Immediate recovery from failures: không may nếu xảy ra lỗi, vì chúng ta có 1 team đầy đủ dev và ops nên có thể nhanh chóng nhận định nguyên nhân lỗi là do program hay do cấu trúc hệ thống,… và có thể nhanh chóng giải quyết vấn đề ngay lập tức.
Trong DevOps culture, cả dev và operations đều phải quan tâm đến tính ổn định và tốc độ của sản phẩm.Vì thế, dev và operations sẽ phải làm việc cùng nhau, sử dụng những tools kiểm tra tốc độ và tính ổn định của sản phẩm, nhờ vậy mà có thể tạo ra những sản phẩm tốt hơn.
DevOps Concepts và những Practices
Build Automation
Build Automation là một quy trình tự động để chuẩn bị source code deploy lên môi trường bằng cách sử dụng script hoặc tool. Tùy vào ngôn ngữ được sử dụng mà cần phải compile, transform hoặc thực hiện unit test,… đối với code. Thông thường build automation cũng giống như việc chạy một command – line tool để chạy đoạn code đã được viết script hoặc được setting trong file config. Việc build automation không nên bị phụ thuộc vào IDE cũng như những config của máy tính. Nó có nghĩa là code của bạn có thể được build trên bất cứ PC nào, dù là của bạn hay của người khác.
Vậy tại sao phải build automation?
Build automation sẽ giúp tiết kiệm thời gian, có thể handle được những task cần phải build theo một quy trình nhất định nào đó. Việc build automation cũng đảm bảo code sẽ luôn được build theo một quy trình chuẩn, mà ko xảy ra lỗi do nhầm lẫn hay một nguyên nhân nào đó. Ngoài ra, build automation còn giúp thực hiện việc build code trên bất kỳ PC nào, bất cứ ai trong team cũng có thể làm được. Nó giống như việc bạn cho 1 file lên server shared và bất cứ ai có quyền cũng có thể truy cập, sử dụng file đó.
Continuous Intergration
CI là phương pháp đòi hỏi các developer phải thường xuyên merge code thay đổi. Với cách làm việc truyền thống, các developer sẽ làm việc riêng biệt với nhau và sau một khoảng thời gian nhất định chẳng hạn như 1 tuần họ sẽ tiến hành merge code. Tuy nhiên, với CI thì developer phải merge code của họ mỗi ngày và sẽ chạy auto test để detect những vấn đề khi merge code. CI cũng được tự động hóa, và thông thường được hỗ trợ bở một CI Server. Khi developer commit source code thay đổi của họ lên, CI Server sẽ thấy sự thay đổi này và bắt đầu thực hiện build, test source code thay đổi một cách tự động. Quá trình này sẽ được thực hiện nhiều lần trong 1 ngày, và nếu CI server phát hiện có vấn đề xảy ra nó sẽ ngay lập tức hiển thị thông báo cho developer.
Trường hợp có một người khác đưa code của họ lên và xảy ra lỗi trong quá trình build hệ thống sẽ thông báo lỗi cho người đó tiến hành fix, đồng thời sẽ rollback lại để không làm ảnh hưởng đến những người khác.
CI sẽ giúp phát hiện ra bug sớm, thông báo cho developer. Developer có thể fix ngay lập tức hoặc rollback để không làm ảnh hưởng đến người khác. Tiếp theo, áp dụng CI sẽ giúp tránh việc phải merge một lượng code lớn khi release. Thay vào đó code sẽ được merge tự động mỗi ngày. Đồng thời, nhờ vào việc code được merge mỗi ngày nên chúng ta có thể release thường xuyên chứ không cần chờ đến cuối giai đoạn khi tất cả mọi thứ đã xong xuôi mới có thể release được. Khi code được build liên tục nó cũng tạo ra Continuous Testing (Test liên tục), QA có thể test ngay lập tức những chỉnh sửa đã được đưa lên mà không cần chờ đến khi mọi thứ hoàn thành. CI tạo ra một thói quen tốt cho develop, việc thường xuyên commit sẽ làm developer viết ra những đoạn code đơn giản, đúng chuẩn.
Continuous Delivery và Continuous Deployment
Continuous Delivery (CD) là method đảm bảo code có thể được deploy bất cứ lúc nào. Thay vì phải quyết định có nên deploy code hay không thì team phải build, merge, test,… để đảm bảo code luôn ở trạng thái có thể deploy.
Một số người khi nhắc đến Continuous Delivery thường viết tắt là CD, tuy nhiên cách gọi tắt này sẽ khiến nhầm lẫn giữa Continuous Delivery và Continuous Deployment.
Continuous Deployment là một practice đảm bảo code thay đổi (có size nhỏ) được deploy liên tục lên product.
Continous Delivery đảm bảo cho code có thể deploy bất cứ lúc nào. Trong khi Continuous Deployment là deploy thực tế lên product nhiều lần trong ngày.
Trên thực tế Continuous Delivery và Continuous Deployment được thực hiện theo flow sau:
Mỗi version code đưa lên đều trải qua một quy trình giống nhau, bao gồm: build automation, test automation,… Và nếu không có vấn đề gì xảy ra nghĩa là code đó có thể deploy.
Sau khi quyết định deploy thì sẽ thực hiện deploy tự động (deploy automation).
Nếu việc deploy gặp lỗi, hệ thống sẽ tự động rollback.
Developer sẽ nhanh chóng fix lỗi và redeploy version fix lỗi.
Với cách làm như vậy Continuous Delivery và Continuous Deployment sẽ đem lại những lợi ích như dưới đây:
Nhanh chóng đưa sản phẩm đến tay khách hàng
Giảm thiểu các vấn đề xảy ra khi deploy
Giảm thiếu risk: lượng deploy trong 1 lần càng nhiều, risk càng cao. Việc chia nhỏ lượng deploy sẽ giảm thiểu risk.
Rollback lập tức khi xảy ra lỗi
Giúp developer không còn lo lắng khi deploy khi đã có chức năng rollback automation.
Infrastructure as Code (IaC)
Infrastructure as Code là method giúp quản lý, xây dựng cơ sở hạ tầng (Infra) cho sản phẩm của bạn. Với Infrastructure as Code, thay vì thực hiện thủ công theo manual. Bạn có thể viết code và cho chạy tự động.
Các đối tượng xây dựng trong Infra bao gồm: Server, Instance, môi trường, Container,…
IaC đảm bảo việc tạo và quản lý resource đúng tiêu chuẩn. Tất cả mọi việc được thực hiện automation, ko có những sai sót nếu thực hiện bằng tay.
IaC cho phép thực hiện cùng một thay đổi giống nhau trên nhiều host, và có thể sử dụng lại trong tương lai.
Khi cần thêm instance bạn chỉ cần cho chạy lại config giống với instance có sẵn và một instance mới được tạo ra chỉ trong vài phút hoặc vài giây.
Với IaC để xem những config của hệ thống chỉ cần xem trong source control, bạn không cần phải log lại hoặc tạo 1 tài liệu bất kỳ nào để lưu giữ thông tin config. Chính bản thân code được dùng để build infra chính là document.
Những kỹ năng và công cụ cần thiết cho một DevOps
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 bạn 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
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. 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.
Networking and Security
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 set up
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
Đâ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 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 freestyle 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
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 có hệ thống monitoring hoạt động ổn định. 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 email hoặc điện thoại…
Learn about Cloud Provides
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.
Những cơ hội nghề nghiệp DevOps
Không có điều kiện tiên quyết cụ thể nào để theo đuổi một nghề nghiệp trong DevOps. Bất cứ ai có kinh nghiệm hay kiến thức cơ bản trong bất kỳ các công việc sau đây có thể học để tiếp cận DevOps:
Lập trình (bất kỳ ngôn ngữ nào)
Shell scripting
Quản trị hệ thống
Các dịch vụ IT – Ops và Hỗ trợ
Xây dựng và phát hành (Build and release)
QA hoặc Testing…
Sự phát triển của DevOps
Những người làm công việc DevOps thường được trả lương cao nhất trong giới chuyên gia về CNTT hiện nay, và nhu cầu thị trường cho công việc này phát triển nhanh chóng vì các tổ chức sử dụng DevOps ngày càng tăng cao. Theo một báo cáo gần đây được công bố bởi Puppetlabs, các tổ chức sử dụng hướng tiếp cận DevOps triển khai code với tần suất nhiều hơn 30 lần so với các đối thủ cạnh tranh của họ, và số lần triển khai thất bại của họ ít hơn đến 50%.
Chỉ trong vòng 2 năm, danh sách các công việc DevOps trên trang tuyển dụng uy tín Indeed.com đã tăng đến 75%. Trên LinkedIn.com, số lượng đề cập đến kỹ năng DevOps đã tăng 50%. Trong một cuộc khảo sát gần đây của Puppetlabs, một nửa số người được hỏi trong tổng số 4.000 người tham gia (ở hơn 90 quốc gia) cho biết công ty của họ có quan tâm nhiều đến kỹ năng DevOps khi tuyển dụng.
Tương lai của DevOps
Tư tưởng DevOps có rất nhiều tiềm năng phát triển trong tương lai. Ngay cả trong giai đoạn trứng nước, DevOps đã tạo ra một cuộc cách mạng trong ngành công nghiệp này. Cùng với sự thay đổi nhanh chóng của ngành công nghiệp IT, nhưng developer không có kiến thức về quản trị hệ thống (hoặc ops) và những quản trị hệ thống (hoặc ops) mà không biết phát triển sản phẩm sẽ trở nên kém quan trọng và nhanh chóng bị đào thải. DevOps sẽ biến đổi một người có một kỹ năng duy nhất thành một người đa năng bao gồm lập trình, xây dựng hạ tầng và cấu hình, thử nghiệm, xây dựng và phát hành.
Qua bài viết trên bạn đã biết DevOps là gì rồi đúng không? DevOps mang đến rất nhiều lợi ích trong công việc nếu được áp dụng đúng cách. Tương lai của ngành DevOps là vô hạn vì vậy nếu có đam mê bạn đừng ngại mà hãy theo đuổi nhé! Chúc các bạn thành công!