卓越營運設計原則
「良好架構框架」(Well-Architected Framework) 其中一項原則(pillar)「卓越營運」(operational excellence),其核心是透過標準化工作流程與團隊凝聚力,確保工作負載(workload)的品質,稱為DevOps 實踐。
卓越營運這個原則定義了開發實作、可監測性與發行版本管理的作業流程,目標是將流程差異、人為錯誤的機會和對客戶服務中斷降到最低。若要評估您的營運健康狀態,請從以下問題開始著手:
-
您是否依照技術領域的規範執行營運系統作業?
-
客戶使用工作負載時,是否對於工作負載最終產出效果擁有最大的可預期性?
-
您如何從經驗與收集到的資料中學習,以持續改善系統?
沒有明確的權責劃分或管理時,工作負載作業可能會演變成一團亂。在此狀況中, 團隊營運系統通常會事倍功半,導致使用者體驗不佳,而且處理問題的方式通常只能滿足短期目標,長期效益仍必須透過持續評估與策略性投資來實現。
設計原則的目的,是在營運策略上指引您考量如何應對根本原因,而不僅僅是緩解癥狀。從建議的方法開始,然後觀察哪些有效,哪些無效,找出需要改善的地方。制訂策略後,繼續使用卓越營運設計檢查清單來推動行動。
工作負載的營運要求與其業務要求一樣重要。高效率的流程可確保工作負載實現業務成果,並且符合組織內外部的合規性,而高效率流程的關鍵在於找到可重複性與一致性。卓越營運的目標是以正確的方式,做正確的事,並團隊合作解決正確的問題。
如果您實現卓越營運目標,即使遭遇任何變化,系統工作負載仍會以可靠與可預測的狀態運作。相反地,未能達成卓越營運要求,可能會導致部署失敗、使用者體驗不一致,以及成本增加等問題,這些問題原本都可以透過適當規劃與簡化運作而避免。
接納 DevOps 文化
目標:讓開發與營運團隊能夠透過共同協作、分擔權責的心態努力合作,以持續改善系統設計與流程。
DevOps 是一個實踐社群,透過多樣的觀點與技術來實現同一項使命。團隊必須營造一個共享知識的協作環境而非各自孤立學習。使用共享的機制,努力克服資源方面的限制。
良好的 DevOps 文化特性會在共同責任中萌芽茁壯。開發與營運團隊設定目標與優先順序時,應儘量貼近客戶期望,並牢記業務重點。開發團隊應該讓營運團隊有機會反應意見,以便推動上游任務改善,並使其他團隊一併受益。
相對地,營運團隊會負責藉由共享資源與反饋意見,使開發團隊在業務中獲得成功。 同時,DevOps 做法會明確劃分每個團隊的權責界線。無論應用程式在哪執行,工作負載團隊都該對其負責。
DevOps 改善營運任務,使其具有效率但不會過於繁重。為了充分發揮 DevOps 的優勢,DevOps 文化應該透過技術改善流程,並提供流程促使組織中的人員溝通透明化。
方法 | 效益 |
---|---|
使用常見系統與工具推動協作環境,方便溝通與追蹤進度。 | 常見工具與流程可以實現溝通透明化。讓開發與營運團隊都能掌握各種環境的情況、常見的支援問題以及整體挑戰和成功。團隊應熟悉發生事件時的處理流程與步驟。共享待辦項目(backlog),可以更容易釐清開發新功能或修復錯誤等作業的優先順序。 |
在整個開發週期中建立持續學習與實驗思維。 支援跨團隊知識共享,並維護文件供重複使用。進行對事不對人(不責難)的分析(blameless analysis)並在發布後或事件後回顧檢驗。 | 透過 A/B 測試與驗證概念等這類實驗機制,你可以鼓勵創新,同時節省成本。透過協作與共享知識,讓團隊精通設計方法、工具與流程。在專案結束後展開回顧,也有助於識別需要改善的面向。 |
採用經過實證的業界敏捷式做法,聚焦於行動最佳化。尋找在流程作業中「左移」(shift left)的機會,以取得手動和自動化流程、部署與品質控管做法,以及可監測性的機會。 | 敏捷式開發實務會縮短發布生命週期,這正是商業價值的指標。儘早偵測、解決並預防問題,通常比較不會干擾流程。 |
為所有開發與營運作業制訂標準流程,並定期加以審查與驗證。這些程序含日常任務、帶外流程(out-of-band processes)、緊急演練與緊急情況、工具選擇、監測程序、培訓計畫,甚至是對利害關係人的溝通與資訊揭露。做決策必須有意識且明確。 | 訂定標準能增加營運的可預期性,並使流程與實踐具可擴展性。驗證標準是找出改善點的好方法。透過定期演練為緊急情況與復原情況做好準備。精確執行並進行治理,以防止異常情況發生,導致風險。 |
善用具有專業技能與豐富經驗的集中式營運團隊。 | 對營運作業與資源有效使用而言,共享資源都具有成本效益。雖然您管理自己的工作負載,但集中式營運團隊可以協助您掌握跨職能技能,例如事件管理、主動監測視角以及可信任的外包專業。 |
建立開發標準
目標:透過標準化開發實作、執行品質控管以及透過系統化變更管理來追蹤進度與成果,改善生產效率。
開發團隊負責在發布之前、用最有效率的方式解決工作負載問題。請注意開發人員的效率,並改善從撰寫程式碼到測試結果的快速處理週期。實作有效且正確的流程,以規劃與標準化技術活動,並推動團隊與利害關係人之間達成共識。
方法 | 效益 |
---|---|
記錄工作負載特性並維繫客戶利益。推論出架構的範圍,以及詳細的功能與非功能需求。建立規模估算模型以報告所涉及任務的範圍與成本。 | 良好的規範可以支援更高生產效率且簡化的開發週期,來降低營運成本與失敗的機會。開始程式碼撰寫週期之前,開發人員需了解技術設計、目標與完成標準。良好的文件有助於重複溝通與新團隊成員的入職教育訓練。 |
使用符合業界標準的軟體開發方法,根據您的工作負載與團隊規模需求適當調整。維護可供所有職務共用的待辦項目(backlog)。 | 採用眾所周知的方法,確立專案的節奏。透過提供團隊成員明確的期望與問責,去除流程的模糊性。透過追蹤共用的代辦事項清單,即可以使用標準方法來精簡任務並確定優先順序。讓專案將更有機會能按時交付。標準化的方法有助於風險管理。設定目標較小、期程較短的里程碑來加以審查,讓開發人員可以在潛在問題演變成重大問題之前加以因應。 |
對所有程式碼、指令碼、部署範本、流水線定義與相關文件使用統一的原始碼版控機制。分支策略(branching strategy)必須達到流暢發布更新的目的,含開發獨立功能或具耦合性的多個功能、錯誤修復與快速修復(hotfix)等類型的更新。利用整個組織的共享知識,來建立您的分支策略與部署流程。 | 正確使用原始碼版控機制,才能達到同步協作與版本控制。維護可重複的工作流程,以發布各種規模與不同風險的變更,在流程內進行同儕程式碼審查(peer review),並保留稽核紀錄。 |
採用強調在開發生命週期早期進行測試的品質保證流程。要保留測試過程的所有部署產物(artifact),例如作為功能發布或更新一部分的應用程式元件、基礎架構與資料層面的作業。在透過環境升級部署產物時,將部署產物視為不可變的(immutable),以及在每次經過品質檢驗時,都能提升部署信心。在可行的情況下,自動進行例行檢查。 | 品質檢驗可確保功能與非功能需求都符合標準,這會對客戶產生正面的影響。制訂測試計畫可確保品質與完整性,並考量可能的故障情況。透過品管標準,您可以強制實施最佳做法來降低風險。不可變的部署產物確保系統在測試與發布階段的狀態是一致的,可以提升部署信心。除非滿足品質檢驗,否則測試環節會有效的阻擋進入後續流程。 |
使用格式指南與工具來推動一致性,以強制執行慣例,並採用常見工具鏈進行開發、測試與利害關係人的溝通。開發人員實作的技術標準應該含採用設計模式、API 設計、記錄、異常狀況處理與其他流程。 | 程式碼的一致性可提高可讀性並更容易維護。它也降低了複雜性,並能實現程式碼再利用。常見工具與慣例也可以幫助團隊改善流程,而不需解決一次性案例。 |