《自動化運維之架構設計六要點》要點:
本文介紹了自動化運維之架構設計六要點,希望對您有用。如果有疑問,可以聯系我們。
梁定安
騰訊織云負責人,目前就職于騰訊社交網絡運營部,開放運維聯盟委員,騰訊云布道師,騰訊學院講師,EXIN DevOps Master講師,鳳凰項目沙盤教練,復旦大學客座講師.
運維自動化是我們所渴望獲得的,但是我們在一味強調自動化能力時,卻忽略了影響自動化落地的一個關鍵因素.那便是跟運維朝夕相處,讓人又愛又恨的業務架構.
因為業務架構是決定運維效率和質量的關鍵因素之一,所以我想跟大家一起聊一下怎么樣的架構設計是對運維友好的.結合這些年在騰訊遇到的業務架構和做運維規劃時對業務非功能規范的思考,我們可以把面向運維的架構設計分成六大設計要點.
任何架構的產生都是為了滿足特定的業務訴求,如果我們在滿足業務要求的同時,能夠兼顧運維對架構管理的非功能性要求.那么我們有理由認為這樣的架構是對運維友好的.
站在運維的角度,所訴求的架構獨立包含四個方面:獨立部署,獨立測試,組件化和技術解耦.
① 獨立部署
指的是一份源代碼,可以按照便于運維的管理要求去部署、升級、伸縮等,可通過配置來區分地域分布.服務間相互調用通過接口請求實現,部署獨立性也是運維獨立性的前提.
② 獨立測試
運維能夠通過一些便捷的測試用例或者工具,驗證該業務架構或服務的可用性.具備該能力的業務架構或服務讓運維具備了獨立上線的能力,而不需要每次發布或變更都需要開發或測試人員的參與.
③ 組件規范
指的是在同一個公司內對相關的技術能有很好的框架支持,從而避免不同的開發團隊使用不同的技術棧或者組件,造成公司內部的技術架構失控.
這種做法能夠限制運維對象的無序增加,讓運維對生產環境始終保持著掌控.同時也能夠讓運維保持更多的精力投入,來圍繞著標準組件做更多的效率與質量的建設工作.
④ 技術解耦
指的是降低服務和服務之間相互依賴的關系,也包含了降低代碼對配置文件的依賴.這也是實現微服務的基礎,實現獨立部署、獨立測試、組件化的基礎.
DevOps 中有大量的篇幅講述持續交付的技術實踐,希望從端到端打通開發、測試、運維的所有技術環節,以實現快速部署和交付價值的目標.可見,部署是運維日常工作很重要的組成部分,是屬于計劃內的工作,重復度高,必須提升效率.
實現高效可靠的部署能力,要做好全局規劃,以保證部署以及運營階段的全方位運維掌控.有五個緯度的內容是與部署友好相關的:
① CMDB配置
在每次部署操作前,運維需要清晰的掌握該應用與架構、與業務的關系,為了更好的全局理解和評估工作量和潛在風險.
在織云自動化運維平臺中,我們習慣于將業務關系、集群管理、運營狀態、重要級別、架構層等配置信息作為運維的管理對象納管于CMDB配置管理數據庫中.這種管理辦法的好處很明顯,集中存儲運維對象的配置信息,對日后涉及的運維操作、監控和告警等自動化能力建設,將提供大量的配置數據支撐和決策輔助的功效.
② 環境配置
在運維標準化程度不高的企業中,阻礙部署交付效率的原罪之一便是環境配置,這也是容器化技術主要希望解決的運維痛點之一.
騰訊的運維實踐中,對開發、測試、生產三大主要環境的標準化管理,通過枚舉納管與環境相關的資源集合與運維操作,結合自動初始化工具以實現標準環境管理的落地.
③ 依賴管理
解決應用軟件對庫、運營環境等依賴關系的管理.在織云實踐經驗中,我們利用包管理,將依賴的庫文件或環境的配置,通過整體打包和前后置執行腳本的方案,解決應用軟件在不同環境部署的難題.業界還有更輕量的容器化交付方法,也是不錯的選擇.
④ 部署方式
持續交付原則提到要打造可靠可重復的交付流水線,對應用軟件的部署操作,我們也強烈按此目標來規劃.業界有很多案例可以參考,如Docker的Build、Ship、Run,如織云的通過配置描述、標準化流程的一鍵部署等等.
⑤ 發布自測
發布自測包含兩部分:
- 應用的輕量級測試;
- 發布/變更內容的校對.
建設這兩種能力以應對不同的運維場景需求,如在增量發布時,使用發布內容的校對能力,運維人員可快速的獲取變更文件md5,或對相關的進程和端口的配置信息進行檢查比對,確保每次發布變更的可靠.
同理,輕量級測試則是滿足發布時對服務可用性檢測的需求,此步驟可以檢測服務的連通性,也可以跑些主干的測試用例.
⑥ 灰度上線
在《日常運維三十六計》中有這么一句話:對不可逆的刪除或修改操作,盡量延遲或慢速執行.這便是灰度的思想,無論是從用戶、時間、服務器等緯度的灰度上線,都是希望盡量降低上線操作的風險,業務架構支持灰度發布的能力,讓應用部署過程的風險降低,對運維更友好.
運維腦海中最理想的微服務架構,首當其沖的肯定是可運維性強的那類.不具可運維性的應用或架構,對運維團隊帶來的不僅僅是黑鍋,還有對他們職業發展的深深的傷害,因為維護一個沒有可運維性的架構,簡直就是在浪費運維人員的生命.
可運維性按操作規范和管理規范可以被歸納為以下七點:
① 配置管理
在微服務架構管理中,我們提議將應用的二進制文件與配置分離管理,以便于實現獨立部署的目的.
被分離出來的應用配置,有三種管理辦法:
- 文件模式;
- 配置項模式;
- 分布式配置中心模式.
限于篇幅不就以上三種方式的優劣展開討論.不同的企業可選用最適用的配置管理辦法,關鍵是要求各業務使用一致的方案,運維便可以有針對性的建設工具和系統來做好配置管理.
② 版本管理
DevOps持續交付八大原則之一“把所有的東西都納入版本控制”.就運維對象而言,想要管理好它,就必須能夠清晰的描述它.
和源代碼管理的要求類似,運維也需要對日常操作的對象,如包、配置、腳本等都進行腳本化管理,以備在運維系統在完成自動化操作時,能夠準確無誤的選定被操作的對象和版本.
③ 標準操作
運維日常有大量重復度高的工作需要被執行,從精益思想的視角看,這里存在極大的浪費:學習成本、無價值操作、重復建設的腳本/工具、人肉執行的風險等等.
倘若能在企業內形成統一的運維操作規范,如文件傳輸、遠程執行、應用啟動停止等等操作都被規范化、集中化、一鍵化的操作,運維的效率和質量將得以極大的提升.
④ 進程管理
包括應用安裝路徑、目錄結構、規范進程名、規范端口號、啟停方式、監控方案等等,被收納在進程管理的范疇.做好進程管理的全局規劃,能夠極大的提升自動化運維程度,減少計劃外任務的發生.
⑤ 空間管理
做好磁盤空間使用的管理,是為了保證業務數據的有序存放,也是降低計劃外任務發生的有效手段.
要求提前做好的規劃:備份策略、存儲方案、容量預警、清理策略等,輔以行之有效的工具,讓這些任務不再困擾運維.
⑥ 日志管理
日志規范的推行和貫徹需要研發密切配合,在實踐中得出的經驗,運維理想中的日志規范要包含這些要求:
- 業務數據與日志分離
- 日志與業務邏輯解耦
- 日志格式統一
- 返回碼及注釋清晰
- 可獲取業務指標(請求量/成功率/延時)
- 定義關鍵事件
- 輸出級別
- 管理方案(存放時長、壓縮備份等)
當具體上述條件的日志規范得以落地,開發、運維和業務都能相應的獲得較好的監控分析能力.
⑦ 集中管控
運維的工作先天就容易被切割成不同的部分,發布變更、監控分析、故障處理、項目支持、多云管理等等,我們訴求一站式的運維管理平臺,使得所有的工作信息能夠銜接起來和傳承經驗,杜絕因為信息孤島或人工傳遞信息而造成的運營風險,提升整體運維管控的效率和質量.
在騰訊技術運營(運維)的四大職責:質量、效率、成本、安全.質量是首要保障的陣地,轉換成架構的視角,運維眼中理想的高可用架構架構設計應該包含以下幾點:
① 負載均衡
無論是軟件或硬件的負責均衡的方案,從運維的角度出發,我們總希望業務架構是無狀態的,路由尋址是智能化的,集群容錯是自動實現的.
在騰訊多年的路由軟件實踐中,軟件的負載均衡方案被廣泛應用,為業務架構實現高可用立下汗馬功勞.
② 可調度性
在移動互聯網盛行的年代,可調度性是容災容錯的一項極其重要的運維手段.在業務遭遇無法立刻解決的故障時,將用戶或服務調離異常區域,是海量運營實踐中屢試不爽的技巧,也是騰訊QQ和微信保障平臺業務質量的核心運維能力之一.
結合域名、VIP、接入網關等技術,讓架構支持調度的能力,豐富運維管理手段,有能力更從容的應對各種故障場景.
③ 異地多活
異地多活是數據高可用的訴求,是可調度性的前提.針對不同的業務場景,技術實現的手段不限.
騰訊社交的實踐可以參考周小軍老師的文章“2億QQ用戶大調度背后的架構設計和高效運營”.
④ 主從切換
在數據庫的高可用方案中,主從切換是最常見的容災容錯方案.通過在業務邏輯中實現讀寫分離,再結合智能路由選擇實現無人職守的主從切換自動化,無疑是架構設計對DBA最好的饋贈.
⑤ 柔性可用
“先扛住再優化”是騰訊海量運營思想之一,也為我們在做業務架構的高可用設計點明了方向.
如何在業務量突增的情況下,最大程度的保障業務可用?是做架構規劃和設計時不可回避的問題.巧妙的設置柔性開關,或者在架構中內置自動拒絕超額請求的邏輯,能夠在關鍵時刻保證后端服務不雪崩,確保業務架構的高可用.
保障和提高業務質量是運維努力追逐的目標,而監控能力是我們實現目標的重要技術手段.運維希望架構為質量監控提供便利和數據支持,要求實現以下幾點:
① 指標度量
每個架構都必須能被指標度量,同時,我們希望的是最好只有唯一的指標度量.對于業務日趨完善的立體化監控,監控指標的數量隨之會成倍增長.因此,架構的指標度量,我們希望的是最好只有唯一的指標度量.
② 基礎監控
指的是網絡、專線、主機、系統等低層次的指標能力,這類監控點大多屬于非侵入式,很容易實現數據的采集.
在自動化運維能力健全的企業,基礎監控產生的告警數據絕大部分會被收斂掉.同時,這部分監控數據將為高層次的業務監控提供數據支撐和決策依據,或者被包裝成更貼近上層應用場景的業務監控數據使用,如容量、多維指標等.
③ 組件監控
騰訊習慣把開發框架、路由服務、中間件等都統稱為組件,這類監控介于基礎監控和業務監控之間,運維常寄希望于在組件中內嵌監控邏輯,通過組件的推廣,讓組件監控的覆蓋度提高,獲取數據的成本屬中等.如利用路由組件的監控,運維可以獲得每個路由服務的請求量、延時等狀態和質量指標.
④ 業務監控
業務監控的實現方法分主動和被動的監控,即可侵入式實現,又能以旁路的方式達到目的.這類監控方案要求開發的配合,與編碼和架構相關.
通常業務監控的指標都能歸納為請求量、成功率、延時3種指標.實現手段很多,有日志監控、流數據監控、波測等等,業務監控屬于高層次的監控,往往能直接反饋業務問題,但倘若要深入分析出問題的根源,就必須結合必要的運維監控管理規范,如返回碼定義、日志協議等.需要業務架構在設計時,前置考慮運維監控管理的訴求,全局規劃好的范疇.
⑤ 全鏈路監控
基礎、組件、業務的監控手段更多的是聚焦于點的監控,在分布式架構的業務場景中,要做好監控,我們必須要考慮到服務請求鏈路的監控.
基于唯一的交易ID或RPC的調用關系,通過技術手段還原調用關系鏈,再通過模型或事件觸發監控告警,來反饋服務鏈路的狀態和質量.該監控手段屬于監控的高階應用,同樣需要業務架構規劃時做好前置規劃和代碼埋點..
⑥ 質量考核
任何監控能力的推進,質量的優化,都需要有管理的閉環,考核是一個不錯的手段,從監控覆蓋率、指標全面性、事件管理機制到報表考核打分,運維和開發可以攜手打造一個持續反饋的質量管理閉環,讓業務架構能夠不斷進化提升.
在騰訊,所有的技術運營人員都肩負著一個重要的職能,就是要確保業務運營成本的合理.為此,我們必須對應用吞吐性能、業務容量規劃和運營成本都要有相應的管理辦法.
① 吞吐性能
DevOps持續交付方法論中,在測試階段進行的非功能需求測試,其中很重要一點便是對架構吞吐性能的壓測,并以此確保應用上線后業務容量的健康.
在騰訊的實踐中,不僅限于測試階段會做性能壓測,我們會結合路由組件的功能,對業務模塊、業務SET進行真實請求的壓測,以此建立業務容量模型的基準.也從側面提供數據論證該業務架構的吞吐性能是否達到成本考核的要求,利用不同業務間性能數據的對比,來推動架構性能的不斷提高.
② 容量規劃
英文capacity一詞可以翻譯成:應用性能、服務容量、業務總請求量,運維的容量規劃是指在應用性能達標的前提下,基于業務總請求量的合理的服務容量規劃.對容量規劃與優化的手段,可參考“運維如何為公司節省一個億?”.
③ 運營成本
減少運營成本,是為公司減少現金流的投入,對企業的價值絲毫不弱于質量與效率的提升.
騰訊以社交、UGC、云計算、游戲、視頻等富媒體業務為主,每年消耗在帶寬、設備等運營成本的金額十分巨大.運維想要優化運營成本,常常會涉及到產品功能和業務架構的優化.因此,運維理想的業務架構設計需要有足夠的成本意識,
騰訊的成本優化措施,可參考“榨干運營成本:一億之后再省兩億”.
本文純屬個人以運維視角整理的對微服務架構設計的一些愚見,要實現運維價值最大化,要確保業務質量、效率、成本的全面提高,業務架構這塊硬骨頭是不得不啃的.
運維人需要有架構意識,能站在不同角度對業務架構提出建議或需求,這也是DevOps 精神所提倡的,開發和運維聯手,持續優化出最好的業務架構.
文章來自微信公眾號:高效運維