Microsoft 如何使用 DevOps 運作可靠的系統

自商業因特網最早以來,Microsoft 一直在操作複雜的在線平臺。 一路上,我們演進了一組大量的做法,讓系統保持可用、健康且安全。 這些做法是維護及改善即時網站文化的較大計劃的一部分。

實時網站文化特性

實時網站文化是組織的重點,可優先處理即時網站的體驗和可靠性。其他所有專案。 畢竟,客戶現在可以使用雲端和以因特網為基礎的服務,輕鬆地跨服務提供者移動,大大放大了客戶信任的重要性。 即時網站必須一律可供使用,並依承諾對客戶執行。

有各種因素可促成成功的即時網站文化。

Diagram of Microsoft's live site culture.

即時網站優先

將即時網站體驗放在第一位是成功平臺不可或缺的一部分。 Teams 無法將所有焦點放在新、閃亮的功能上,並忽略這些功能呈現給用戶的途徑。 我們依賴 安全部署做法 ,協助確保我們的客戶享有不間斷的平臺存取。 這在發行版本服務更新時 不會停機,可能會變得特別複雜。

透過功能旗標控制曝光

當我們透過 通道和階段進行部署時, 使用功能旗標控制曝光,我們偶爾 會在生產環境中發現問題 。 儘管我們的所有自動化和評論,但事情有時仍然發生。 正如他們所說, 沒有像生產這樣的地方!

通常,當某個專案不正確時,健康情況監視和遙測會警示我們。 開發人員可以建立分支 main、進行修正,並將要求它提取到 main。 保留相同的一般工作流程表示開發人員不需要進行內容切換,或瞭解不同程式碼變更的不同程式。

若要解決 Hotfix 部署問題,需要再執行一個步驟,也就是將變更挑選到發行分支。 我們會在每個工作日早上從最新發行分支執行 Hotfix 部署,不過我們也可以視需要進行緊急修正。 修正實際上會先從發行分支中叫用生產環境。 但是,因為我們先開發 main ,所以我們知道當從 main建立新的發行分支時,它不會回歸下一個短期衝刺。

雖然沒有部署步調和階段,但內部部署產品的發行大致相同。 此外,由於我們在不同的組態和數據圖形上執行更多手動測試,因此在切割發行分支並將產品放在客戶手中之間會有較長的尾端。

應以個人方式取得安全性

重點是讓弱點成為真實和個人。 這可確保人們真正關心。 我們也利用 戰爭遊戲 ,在程式碼中尋找並解決整個系統的安全性風險。 當紅色小組可以透過倒置對話框來顯示它們進入程式碼時,它確實會激勵程式代碼擁有者解決問題,並確保它不會再發生在其他地方。 這種競爭比關於潛在 XSS 風險的靜態分析警告更真實和更個人化。 我們通過戰爭遊戲和其他安全演習創造了這種文化和動態。 人員 以駭客攻擊彼此的程式代碼或能夠封鎖嘗試而感到自豪。 這會灌輸安全程序代碼文化特性。

我們無法針對每個攻擊媒介進行規劃,但我們可以做的是假設會有缺口,並規劃我們可以對缺口做出反應的速度。 對於我們的團隊來說,許多安全工作一直圍繞這一點。

最後,人類犯了錯誤。 它們有時會延遲,並執行將密碼儲存在檔案共用之類的動作。 我們可以告訴他們不要,我們可以將它們傳送給安全性訓練,我們可以做各種其他事情。 大多數人學習,但只需要一個人來打破系統。 您可以擁有各種最佳做法清單,但除非您要實作,否則您必須假設人們會犯錯。 這需要某種程度的監督,以確保要遵循重要的程式。

工程不僅僅是作業合作夥伴

我們早就學會了現場網站,成為工程小組責任的重要組成部分。 這對我們來說是巨大的,因為過去,一個人可以去部署一些東西,離開週末,並返回星期一,尋找900個客戶問題,客戶支援和操作小組正在處理所有週末。 工程必須支付即時網站問題的價格。 否則,不會激勵建置可避免這些問題的系統。 當你在淩晨2點被叫來修復你破碎的東西時,你記得。

隨著我們發展這個責任, 即時網站是我們做的 最重要的事情,成為整個團隊的口頭禪。 這是他們現在擁有的客戶體驗,不僅僅是稅金。 這實際上是人們從我們身上指望的東西,我們為此感到自豪。 它必須是產品的不同功能。

生產遙測是您服務的活動訊號

為了在快節奏的世界生存下來,幾乎任何事情都出了問題,我們需要偉大的警示系統。 無法操作的警示、備援警示或壓倒性的警示磁碟區可讓您忽略所有警示。 建立太多警示很容易,所以此程式真的會縮減為簡單的問題: 此警示是否可採取動作? 這可確保我們參與正確的客戶問題,並儘快處理它們。

當工程小組對可採取動作的警示進行零時,他們注意到,出現很多問題,特別是在半夜,往往有類似的修正,至少暫時。 這導致專注於更善於故障轉移和自我修復的系統。 現在問題發生、發出警示,然後自行修正,讓工程小組等到早上才能修正。 如果工程小組只是推出一些讓其他人晚上上床的位,就不會發生這種事。 現在,他們努力平衡這些改善,不僅是特徵速度,而且工程改進速度的一部分。

摘要

採用即時網站文化會影響 Microsoft 建置及傳遞軟體的方式。 藉由讓工程小組成為安全性和作業的關鍵部分,我們的程式代碼和用戶體驗的品質已大幅改善。 成為作業的完整參與者,使工程成為重要的項目關係人,進而產生專為更佳作業而設計的系統。