為什麼大公司一定要使用DevOps?

Hack_Bug發表於2020-12-09

0 DevOps的意圖

 

究竟什麼是DevOps? 要想回答這個問題,首先要明確DevOps這個過程參與的人員是誰?即開發團隊和IT運維團隊!那麼,DevOps的意圖是什麼呢?即在兩個團隊之間,建立良好的溝通和協作,更快更可靠的建立高質量軟體!

 

事實上,並不是這兩個團隊之間的協作幫助交付了更好的軟體,而是“開發”和“運維”團隊之間的統一導致了軟體的改進,並以更快的速度交付。我們不要忘記DevOps工具在實現自動化方面所扮演的角色。

 

開發和運維“一體”的感覺是由開發人員和操作工程師之間的技能組合和實踐的橋接以及自動化(DevOps)工具的實現引起的。 世界各地的大型網際網路公司已採用DevOps方法來徹底改進其效能,安全性和團隊動態。 

 

在本篇文章中,讓我們看看什麼是DevOps,為什麼它如此重要! 我們將首先跟蹤導致DevOps的軟體開發方法的演變,然後探索什麼是DevOps及其生命週期,並通過評估世界頂級公司,來看看如何使用DevOps來獲得益處。

 

1 軟體開發的演變

 

多年來,DevOps從現有的軟體開發策略/方法發展而來,以響應業務需求。讓我們簡要地看一下這些模型是如何演變的,以及它們最適合的場景。

640?wx_fmt=png

緩慢而繁瑣的瀑布模型演變成敏捷,開發團隊在短時間內完成軟體開發,持續時間甚至不超過兩週。如此短的釋出週期幫助開發團隊處理客戶反饋,並將其與bug修復一起合併到下一個版本中。

 

雖然這種敏捷的SCRUM方法為開發帶來了敏捷性,但它在運維方面卻失去了敏捷實踐的速度。開發人員和運維工程師之間缺乏協作仍然會減慢開發過程和釋出。

 

DevOps方法就是基於對更好的協作和更快的交付的需求而產生的。DevOps允許用較少複雜問題的持續軟體交付來修復和更快地解決問題。

 

現在我們已經瞭解了DevOps的發展,讓我們來詳細看看DevOps是什麼。

 

2 什麼是DevOps?

 

DevOps是一種軟體開發方法,涉及軟體在整個開發生命週期中的持續開發,持續測試,持續整合,持續部署和持續監控。 這些活動只能在DevOps中實現,而不是敏捷或瀑布,這就是為什麼頂級網際網路公司選擇DevOps作為其業務目標的前進方向。 DevOps是在較短的開發週期內開發高質量軟體的首選方法,可以提高客戶滿意度。 

 

在不瞭解DevOps生命週期的情況下,對DevOps的理解也會片面化。現在讓我們看看DevOps生命週期,並探討它們如何與下圖所示的軟體開發階段相關聯。

 

640?wx_fmt=jpeg

 

持續開發:

這是DevOps生命週期中軟體不斷開發的階段。與瀑布模型不同的是,軟體可交付成果被分解為短開發週期的多個任務節點,在很短的時間內開發並交付。

 

這個階段包括編碼和構建階段,並使用Git和SVN等工具來維護不同版本的程式碼,以及Ant、Maven、Gradle等工具來構建/打包程式碼到可執行檔案中,這些檔案可以轉發給自動化測試系統進行測試。

 

 

持續測試:

 

在這個階段,開發的軟體將被持續地測試bug。對於持續測試,使用自動化測試工具,如Selenium、TestNG、JUnit等。這些工具允許質量管理系統完全並行地測試多個程式碼庫,以確保功能中沒有缺陷。在這個階段,使用Docker容器實時模擬“測試環境”也是首選。一旦程式碼測試通過,它就會不斷地與現有程式碼整合。

 

持續整合:

 

這是支援新功能的程式碼與現有程式碼整合的階段。由於軟體在不斷地開發,更新後的程式碼需要不斷地整合,並順利地與系統整合,以反映對終端使用者的需求更改。更改後的程式碼,還應該確保執行時環境中沒有錯誤,允許我們測試更改並檢查它如何與其他更改發生反應。

 

Jenkins是一個非常流行的用於持續整合的工具。使用Jenkins,可以從git儲存庫提取最新的程式碼修訂,並生成一個構建,最終可以部署到測試或生產伺服器。可以將其設定為在git儲存庫中發生更改時自動觸發新構建,也可以在單擊按鈕時手動觸發。

 

持續部署:

它是將程式碼部署到生產環境的階段。 在這裡,我們確保在所有伺服器上正確部署程式碼。 如果新增了任何功能或引入了新功能,那麼應該準備好迎接更多的網站流量。 因此,系統運維人員還有責任擴充套件伺服器以容納更多使用者。

 

由於新程式碼是連續部署的,因此配置管理工具可以快速,頻繁地執行任務。 Puppet,Chef,SaltStack和Ansible是這個階段使用的一些流行工具。

 

容器化工具在部署階段也發揮著重要作用。 Docker和Vagrant是流行的工具,有助於在開發,測試,登臺和生產環境中實現一致性。 除此之外,它們還有助於輕鬆擴充套件和縮小例項。

 

持續監控:

這是DevOps生命週期中非常關鍵的階段,旨在通過監控軟體的效能來提高軟體的質量。這種做法涉及運營團隊的參與,他們將監視使用者活動中的錯誤/系統的任何不正當行為。這也可以通過使用專用監控工具來實現,該工具將持續監控應用程式效能並突出問題。

 

使用的一些流行工具是Splunk,ELK Stack,Nagios,NewRelic和Sensu。這些工具可幫助密切監視應用程式和伺服器,以主動檢查系統的執行狀況。它們還可以提高生產率並提高系統的可靠性,從而降低IT支援成本。發現的任何重大問題都可以向開發團隊報告,以便可以在持續開發階段進行修復。

 

這些DevOps階段連續迴圈進行,直到達到所需的產品質量。下面的圖表將顯示可以在DevOps生命週期的哪個階段使用哪些工具。

640?wx_fmt=jpeg

 

既然我們已經確定了DevOps的重要性,並且瞭解了它的不同階段以及所涉及的DevOps工具,現在讓我們看看Facebook的一個案例研究,並理解為什麼他們從敏捷轉向DevOps。我們將採用Facebook曾推出的新特性的用例,這些新特性導致Facebook重新評估其產品交付並採用DevOps方法。

 

3 DevOps案例研究

 

曾經,Facebook向遍佈全球的若干億使用者推出了一系列新功能 - 時間軸,推薦和音樂功能。 釋出後Facebook上產生的巨大流量導致伺服器崩潰。 推出的功能獲得了使用者的大規模超常規響應,這導致了新功能產生了不可控的結果,使他們沒有預料到。

640?wx_fmt=jpeg

這導致了Facebook重新評估和戰略調整,從而使Facebook推出了暗啟動技術。 使用DevOps原則,Facebook為其新版本的釋出建立了以下方法。

640?wx_fmt=jpeg

 

Facebook暗啟動技術

暗啟動是在新功能完全釋出給所有使用者之前,逐步將新功能,推廣到選定的一組使用者的過程。 這允許開發團隊儘早獲得使用者反饋,測試錯誤,並且還可以測試基礎架構效能。 這種釋出方法是持續交付的直接結果,有助於實現更快,更迭代的版本,確保應用程式效能不會受到影響,並且使用者可以很好地更新該版本。

640?wx_fmt=jpeg

在暗啟動技術中,新功能通過專用的部署管道釋出給小型使用者群。 在上面給出的Facebook暗啟動圖表中,您可以看到只開啟了一個部署管道,將新功能部署到一組選定使用者。 此時剩餘的數百條管道全部關閉。

 

持續監視部署功能的特定使用者群,以收集反饋並識別錯誤。 這些錯誤和反饋將被納入開發,測試和部署在同一使用者群中,直到功能變得穩定。 一旦實現穩定性,通過啟用其他部署管道,將逐步在其他使用者群上部署這些功能。

 

Facebook通過將程式碼包裝在功能標記或功能切換中來實現此目的,該切換用於控制誰可以看到新功能以及何時檢視。與此同時,模擬向使用者啟動程式碼的全部效果,在向使用者開放全部功能之前,可以及早的暴露應用程式基礎架構的痛點和區域,功能穩定後,將通過多個版本將其部署到其餘使用者。

 

通過這種方式,Facebook擁有一個受控或穩定的機制,可以為其龐大的使用者群開發新功能。相反,如果功能沒有得到很好的響應,他們可以選擇完全回滾部署。這也幫助他們為部署準備伺服器,因為他們可以預測網站上的使用者活動,並相應地擴充套件伺服器。上面給出的圖表描述了Facebook的暗啟動過程。

 

4 總結

 

微信,淘寶,以及許多領先的科技巨頭,在向所有人釋出之前,都使用暗釋出逐漸向一小部分使用者釋出和測試新功能。

 

DevOps的目的是更快速,更可靠地建立質量更好的軟體,同時開發,運維團隊之間進行更多的溝通和協作。 它是一個自動化過程,允許快速,安全和高質量的軟體開發和釋出,同時保持所有利益相關者在一個迴圈中。 這就是DevOps獲得越來越多的大型網際網路公司青睞的真正原因。

相關文章