Facebook 的 DevOps 案例研究與相關工具

翻譯:瘋狂的技術宅
原文: https://www.edureka.co/blog/w...

本文首發微信公衆號:前端先鋒
歡迎關注,天天都給你推送新鮮的前端技術文章前端


瞭解什麼是 DevOps 的關鍵在於搞清楚 DevOps 的意圖,即建立高質量的軟件,同時在團隊之間進行更快速、更可靠的溝通和協做。至於團隊,咱們能夠參考這兩個:開發團隊IT運營團隊ios

實際上並非由於這兩個團隊的合做提供了更好的軟件,而是因爲「開發」 和 「運維」 團隊之間的協做致使了軟件的不斷改進並以更快的速度進行交付。不要忘記 DevOps 工具在自動化方面所起的做用。他們在基礎上支持整個 DevOps 的結構。程序員

這種「一體」的感受是由開發和運維工程師之間的技能組合、實踐的橋接以及自動化(DevOps)工具的實現引發的。世界各地的先進的公司都採用了 DevOps 方法來完全改進它們的性能、安全性和團隊動態。面試

在本文中,讓咱們瞭解什麼是 DevOps,以及爲何它是如此的重要!咱們將會先回顧是什麼致使了軟件開發方法向 DevOps 演變的,而後探索什麼是 DevOps 及其生命週期,並經過評估 Facebook 等頂級公司是怎樣使用 DevOps 方法的。segmentfault

軟件開發的演變

爲了響應業務需求,DevOps 從現有的軟件開發策略和方法發展而來。讓咱們簡要地看一下這些模型是如何演變的,以及它們最適合的場景有哪些。安全

clipboard.png

緩慢而繁瑣的瀑布模型演變成了敏捷開發,開發團隊在短短的不到兩週的時間內衝刺他們的工做。擁有如此短的發佈週期將有助於開發團隊及時處理客戶的反饋,並將其在修復下一版本的錯誤時一併修改。雖然這種敏捷SCRUM方法爲開發帶來了靈活性,但在運營方面卻失去了敏捷實踐的速度。開發人員和運營工程師之間所缺少的協做仍然會減緩開發過程和發佈。 DevOps 的誕生源於對更的好協做和更快的交付的需求。 DevOps 能夠實現持續軟件交付,可以簡單、更快速的解決問題。服務器

什麼是DevOps?

DevOps 是一種軟件開發方法,涉及軟件在整個開發生命週期中的持續開發、持續測試、持續集成、持續部署和持續監控。這些活動只能在 DevOps 中實現,而不是敏捷或瀑布方法,這就是爲何 Facebook 和其餘頂級公司選擇 DevOps 做爲其業務目標的前進方向。 DevOps 是在較短的開發週期內開發高質量軟件的首選方法,能夠提升客戶滿意度。微信

若是不瞭解 DevOps 生命週期,那麼你對 DevOps 的理解是不完整的。如今讓咱們看一下 DevOps 生命週期,並探討它們如何與下圖所示的軟件開發階段相關聯。多線程

clipboard.png

持續發展:

這是 DevOps 生命週期中不斷開發軟件的階段。與瀑布模型不一樣,軟件可交付的成果被分解爲多個短時間開發週期的衝刺,在很短的時間內開發並交付。這個階段涉及編碼和構建,並使用 GitSVN 等工具來維護代碼的不一樣版本,以及 AntMavenGradle 等工具用於將代碼構建或打包成可執行文件,而後就能夠轉發給 QA 進行測試了。架構

持續測試:

這是針對開發的軟件不斷測試 Bug 的階段。對於連續測試,可使用自動化測試工具,如 SeleniumTestNGJUnit等。這些工具容許 QA 並行地對多個代碼庫進行完全的測試,以確保功能中沒有缺陷。在這個階段,使用 Docker 容器來動態模擬「測試環境」也是首選。代碼通過測試後,會不斷與現有代碼進行集成。

持續集成:

這是將支持新功能的代碼與現有代碼進行集成的階段。因爲軟件的不斷髮展,更新的代碼須要與系統一塊兒連續集成,以便將變化反映給最終用戶。更改後的代碼還應確保在運行時環境中沒有錯誤,容許咱們對更改進行測試並檢查它對其餘更改的反應。

Jenkins 是一種很是流行的工具,用於持續集成。使用 Jenkins 能夠從 GIT 存儲庫中提取最新的代碼修訂版,並生成最終能夠部署到測試或生產服務器的構建版本。它能夠設置爲在 GIT 存儲庫發生更改時自動觸發新構建,也能夠在單擊按鈕時手動觸發。

持續部署:

它是將代碼部署到生產環境的階段。在這裏,咱們要確保在全部服務器上都能正確地部署代碼。若是添加或引入了任何新功能,那麼就應該準備好迎接更多的網站流量。所以 SysAdmin 還有責任對服務器進行擴展以便容納更多的用戶。

因爲新代碼是持續部署的,所以配置管理工具能夠快速、頻繁地執行任務。 PuppetChefSaltStackAnsible 是在這個階段使用的一些流行工具。

容器化工具在部署階段也發揮着重要做用。 DockerVagrant 是很是流行的工具,有助於在開發、測試、生產和構建環境中實現一致性。除此以外,它們還有助於輕鬆擴展和縮小實例。

持續監控:

這是 DevOps 生命週期中很是關鍵的階段,旨在經過對軟件的性能進行監控來提升軟件的質量。這種作法涉及運維團隊的參與,他們會監視用戶活動中出現的 bug 和系統的不正當行爲。這也能夠經過使用專用監控工具來實現,該工具將持續監控應用程序性能指出問題所在。

相關的流行工具備 SplunkELK StackNagiosNewRelicSensu。這些工具可幫你密切監視程序和服務器,以主動檢查系統的運行情況。它們還能夠提升生產率並提升系統的可靠性,從而下降 IT 支持成本。發現的任何重大問題均可以隨時報告給開發團隊,以即可以在持續開發階段進行修復。

這些 DevOps 階段連續循環進行,直到達到所需的產品質量。下面給出的圖表展現了在 DevOps 生命週期的不一樣階段使用的工具。

clipboard.png

咱們已經知道了 DevOps 的重要性,並瞭解了它生命週期的不一樣階段以及所涉及到的 DevOps 工具,接下來讓咱們研究一下 Facebook 的案例,並瞭解他們爲什麼從敏捷遷移到 DevOps 的緣由。咱們將研究 Facebook 曾經在 2011年推出的新功能的案例,這些功能致使了他們對產品交付過程的從新評估,並採用了 DevOps 方法。

2011年,Facebook 向遍及全球的 5 億用戶推出了一系列新功能 —— 時間線、自動推薦和音樂功能。在發佈後產生的巨大流量致使了服務器的崩潰。推出的新功能得到了用戶的熱烈響應,這就致使了新功能的有效性產生了不可預知結果,他們沒有相關的預案。

clipboard.png

這致使了 Facebook 對策略的評估和調整,從而推出了暗啓動技術。基於 DevOps 原則,Facebook 爲其新版本的發佈建立了如下方法。

clipboard.png

Facebook 的暗啓動技術

暗發佈是在新功能徹底發佈以前先逐步推廣到選定的一組用戶的過程。這容許開發團隊儘早得到用戶反饋和測試錯誤,而且還能夠測試基礎架構性能。這種發佈方法是持續交付的直接結果,有助於實現快速迭代的版本,以確保應用程序性能不會受到影響,並使用戶能夠很好地更新該版本。

在暗啓動技術中,新功能經過專用的部署管道發佈給小型用戶羣。在下面給出的 Facebook Dark Launch 圖表中,你能夠看到只打開了一個部署管道,將新功能部署到了一組選定用戶。此時剩餘的數百條管道所有關閉。持續監視已部署新功能的特定用戶羣以收集反饋並識別錯誤。這些錯誤和反饋將被歸入在同一用戶羣中的開發,測試和部署,直到功能變得穩定。一旦穩定以後,將會打開其餘部署管道,把這些功能逐步的部署在其餘用戶羣上。

clipboard.png

Facebook 經過將代碼包裝在功能標記或功能切換中來實現此目的,該切換用於控制誰能夠看到新功能以及什麼時候可以查看。同時模擬向用戶啓動代碼的所有效果,這能夠提前暴露基礎架構的痛點。在功能穩定以後,將會經過多個版本部署到其他用戶。

這樣,Facebook 就擁有了一個可控或穩定的機制,能夠爲其龐大的用戶羣開發新功能。相反,若是該功能沒有獲得很好的響應,他們能夠選擇回滾部署。這也有助於他們爲部署準備服務器,由於他們能夠預測網站上的用戶活動,而且能夠相應地對服務器進行擴展。上面給出的圖表描述瞭如何在 Facebook 上進行黑暗發佈。

Facebook、亞馬遜、Netflix 和谷歌以及不少領先的科技巨頭,在向全部人發佈以前先用暗發佈向一小部分用戶發佈和測試新功能。

DevOps 的目的是更快速、更可靠地建立質量更好的軟件,同時開發和運維團隊之間進行更多的溝通和協做。它也是一個自動化過程,容許進行快速、安全和高質量的軟件開發和發佈,同時保持全部利益相關者之間的循環。這就是爲何 DevOps 愈來愈受到青睞的緣由。


本文首發微信公衆號:前端先鋒

歡迎掃描二維碼關注公衆號,天天都給你推送新鮮的前端技術文章

歡迎掃描二維碼關注公衆號,天天都給你推送新鮮的前端技術文章


歡迎繼續閱讀本專欄其它高贊文章:


相關文章
相關標籤/搜索