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