18頁PPT帶你深度解讀運維自動化

一、概述

   在前面的文章中,提到【運維的本質—可視化】,在其中著重強調是自動化的可視化和數據化的可視化。在這個文章中,全面解碼看看自動化的極致狀態為什么是可視化?在前面的另外一篇文章【運維平臺全體系介紹】中,也講到運維平臺體系的構成,提出“**及服務”的理念,其中有幾部分和自動化密切相關,比如說資源及服務、配置及服務、架構及服務,持續集成服務,最終都服務于面向業務的可視化調度平臺目標上去。讓我們再回顧一下平臺規劃體系(涉及自動化部分的,我用紅色框中):

18頁PPT帶你深度解讀運維自動化

二、運維自動化的三重境界

宋代禪宗大師青原行思(六祖門下首座)提出參禪的三重境界:

參禪之初,看山是山,看水是水;

禪有悟時,看山不是山,看水不是水;

禪中徹悟,看山仍然山,看水仍然是水。

這三種境界其實和我們眼中運維自動化的三重境界類似。


自動化第一重界:看山是山,看水是水
開始接觸運維自動化的時候,我們看到了很多工具認為就代表著自動化,比如說早期把expect+ssh封裝之后,就以為可以實現批量運維??吹接腥苏fpuppet可以做配置管理,這個時候也就認為puppet可以做配置管理,甚至是發布管理。這個時期的典型問題,就是以偏概全,對于某個開源自動化工具來說,還沒法去界定它的使用場景和范圍,直接影響系統的建設效益。這個時候已經開始知道我們看到的山不是真正的山,是迷霧環繞的深山。

自動化第二重界:看山不是山,看水不是是水。
此時我們知道expect+ssh不夠,隨著業務規模的變化,我們需要一個更完整的概念來做發布系統,真正的發布系統要做版本管理、環境管理、配置管理、還要做他們的生命周期管理等等;puppet真正要做自動化,其實還依賴OS和應用層很多標準化。對于其他資源對象的管理來說,生命周期的概念都在穿行其中,比如說DNS、LVS、接口、配置、應用包等等。為了有效標識資源的生命周期狀態,需要用大量的數據來實時反饋。這是運維自動化的更具體了,把一個個的山貌看清楚了。

自動化第三重界:看山還是山,看水還是水。

這是一種自動化本質上的追究,站在山頂之巔,俯覽眾山,會發出原來如此的感嘆:所有自動化的本質都是為了可視化,讓所有的人看到一致的服務,確保結果一致;從底層來說,你會說所有自動化的本質都是指令+文件分發的組合;你會進一步抽象系統的能力,提供即插即用的機制;結合服務化的需求,進一步云化所有的運維系統,確保內外一致性的使用。這是化境!

三、維自動化的多維解讀

第一、基于應用變更場景的維度劃分

我們增加探討過所有的運維價值導向最終都是面向業務、面向用戶,所以自然而然就需要從業務的維度進行劃分。而運維是有很多種場景的,但從業務的角度來說,核心的幾種業務場景就那么幾種,如:業務上線、業務下線、業務擴容、業務縮容、應用升級等五種。我用一種場景為例帶大家把整個流程穿越起來看看,讓大家和我一起識別流程的節點到底對接了哪些系統?那么針對其他的業務場景,你也可以用同類的方法去分析。首先預設架構如下:

18頁PPT帶你深度解讀運維自動化

1、業務上線。

表示一個完整的應用上線,從無到有部署整個業務上線。具體的流程如下:

18頁PPT帶你深度解讀運維自動化
仔細看其中的流程,我們會發現涉及到多個系統,每個系統完成職能都有不同,這個地方只是大概的描述了一下。但這個流程一清晰的梳理出來,就知道我們真正要實現一個應用全部上線有多么復雜了。但看完這個圖又覺得簡單了,因為其實從業務上線的流程來看,我們只需要一個上層的流程調度引擎調加對應的執行器,執行器通過API和底層各個系統對接。所以說之前在框架圖中,為什么要求各個專業系統一定要向上提供API,并且要求這個API的風格是一致的。

最復雜的業務上線已經梳理完成之后,其實業務下線就很簡單,它是上線過程的逆過程,上線負責裝,下線負責拆。

業務上線之后,隨著用戶活躍度的上升,此時業務的容量會有出現不足的情況,此時就需要進行業務擴容。
擴容就很簡單,當哪類節點不足的時候,對他進行擴容。至于擴容要做哪些變更,其實都是業務上線的子流程。比如說web層容量不夠,那就無非申請機器,安裝組件、下發應用包,自動化測試。這個時候需要注意:在業務上線的過程中,我們把很多的配置信息都下放到CMDB中了,但我們選擇擴容的時候,就從CMDB把信息讀取出來,指導變更。

應用升級,
目前持續集成講的自動化都是在這塊。簡單來講,就是升級程序包、升級配置、執行額外指令等等,逃脫不了這幾種模式。如果你說的這么簡單,是不是我把ssh封裝一個UI出來,就可以了。當然不是,這個時候需要你帶著運維的理解,需要在底層做一些標準化的工作,否則你提供的是一個工具,完全沒有運維的思路,比如說程序運行屬主、運行路徑、監控的策略等等。另外建設應用發布平臺的目的,就是要讓測試、Production環境的運維變更可控。

是不是以上幾個運維場景的自動化要一次全部做完呢?不是,是有先后和主次之分。對于以上的運維場景,我在當前我負責的游戲運維中下做過統計,數據如下:

A、持續部署的數量,一個月2000次左右

18頁PPT帶你深度解讀運維自動化
B、其他場景的分布情況.

一個月上線一次、下線兩次、擴容一次左右。

有了這個數據,我們建設一個自動化系統的時候,就能識別先做什么后做什么。當然不同的企業有不同的實際,還是要找到核心痛點。不是一上來就建設完整的業務變更系統,見效不快,且容易讓項目收益不大,而遇到很大的阻力。

第二、基于系統層次的維度劃分

18頁PPT帶你深度解讀運維自動化

給出這樣的分層體系圖,其實是為了讓大家更好的識別系統的職責和范圍,下層干上層的活,上層干下層的活都是越界,越界帶來的是耦合。舉個例子,系統服務層puppet(或者chef)配置管理,在網上看到的很多資料都說可以來做發布,就是說可以做應用服務層的事情。后來我看過幾家公司,用puppet來做應用服務層的發布,最后都走不下去,應用包的需求變化太大,靠puppet編寫factor的模式來適應所有的場景,基本上是不可能,所以說它適合的是系統配置管理。以上說的就是一種越界!

第三、基于和業務程序耦合緊密程度的維度劃分

這點非常重要,這個劃分其實是確定系統建設的Owner,避免讓運維團隊承擔過多的系統建設職能,而讓運維能力提升緩慢。那怎么來判斷和業務程序的耦合緊密程度?我的準則就非常簡單,程序直接調用的就是緊耦合,類似api/SDK類的后端服務,比如研發建設;程序不直接使用的就是松耦合的就是運維來建設。

那有一種情況,我們很多應用程序中,DNS和LVS服務也在程序調用鏈中存在,怎么辦?在我的方案中,絕對不允許內部服務走DNS和LVS。我們都知道DNS和LVS的服務對于服務異常的處理(DNS無狀態、LVS是七層能力弱),遠遠達不到線上服務的要求,所以要堅決拒絕。如果他們真的要使用,第一告訴他們業務風險;第二,故障產生的時候,需要讓研發參與處理。另外這也是系統的邊界沒劃清楚,是讓運維組件去承擔業務上應該具備的容災容錯功能,會給后面的運維系統建設增加很多不必要的功能。

我這邊的分類就很簡單,如下:

18頁PPT帶你深度解讀運維自動化

四、運維自動化的方法論

第一、全局驅動

無論是從全部的自動化管理平臺規劃,還是某個平臺的規劃,都希望大家都能找到一個全局的立足點。比如說我們當時成立持續部署服務平臺的時候,大家把全局目標一說,開發、測試、運維很快就達成共識了。目前這個平臺建設完成之后,運維已經徹底的退出發布變更流程之中,真正實現了讓運維變成的審核者。

第二、分而治之

在上面的幾個維度看到了很多系統,我們發現每個系統都要建設的話,其實周期和難度都很大。所以需要分而治之,特別是線上架構組件的管理系統,更需要隨著組件的交付一起交付管理能力。之前我也表達過類似的觀點,所有只交付組件,不交付管理能力的研發都是耍流氓。因為從運維的角度來說,越來越多這樣低價值的交付產品,會導致運維不堪重負。而讓運維從頭去構建這個管理,則需要花費運維很多的時間去了解,讓系統建設周期拉長。舉個例子,比如說某個分布式cache服務,做的不好的,通過讀取日志然后對其監控,做的好的,給你開啟一個管理端口,從端口中讀取狀態信息。這就大大降低的系統的復雜度(不用日志采集和處理組件了)。分而治之,其實就是讓不同的團隊做不同的事情,不要全部壓給運維;其次不同的時期建設不同的系統,不要在同一時刻做很多系統,避免戰線過長。當然如果有很多運維研發人員來說,另當別論哈。

第三、自底向上

自底向上,其實是讓大家找到一個更清晰而具體的系統建設目標來展開工作。從系統分解上,來規避大家被一個龐大而模糊的目標帶入歧途。如果一上來,我們就說要做一個全自動的運維管理系統,很容易讓運維研發團隊迷失方向。所以這個地方可以把全局和最終目標設定在哪兒(全自動化),然后從底下逐步構建地基,做框架,最后再蓋一個完整的房子。

第四、邊界清晰

邊界有兩個維度,一個是管理邊界;一個是職能邊界。第一個邊界是從Owner者的角度出發的,誰產生服務,誰就是owner,管理統一都是運維。比如研發提供一個統一分布式消息隊列服務,Owner是研發,他應該對可運維性負第一責任,不要讓運維去承擔這個服務的webAdmin管理系統建設任務。其次是職能邊界,深層次的理解是組件的功能范圍。有時候對運維架構師的考驗就在這兒,比如說讓LVS去承擔業務異常的容災和容錯切換,不合適;讓DNS跨過LVS層,負責對后端服務異常的自動容錯處理,也不合適。沒有把職能界定清楚,會導致系統做很多無用功。

第五、插件化

插件化的思維無處不在,但我們面對紛繁復雜的管理對象時,我們進行抽象,提供管理模式,具體的實現交給用戶,這個我們日常所見的運維系統中經常可以簡單。比如說nagios就是一種插件化的采集思路。對于配置管理來說,puppet也是采用這個思路。到我們最上層的調度管理系統來說,可以讓運維自己去編寫自己的執行器,特別是和業務緊密相關的,但最終運維整形控制權還是交給平臺。而我的經驗是,在【應用服務層】和【架構服務層】,不要引入插件化的管理方案,過多的插件化部署,會讓我們生產環境的管理最終混亂不堪,最終失控。所以提供類SSH界面的運維發布和部署平臺,是沒有任何運維價值的。

五、運維自動化系統的實現

挑戰一個自動化的極致場景(可視化),是運維人對極致的追求。接下來,我會拿幾個典型的運維自動化系統供大家參考。

第一、DNS管理系統

簡介:DNS
系統傳統web形態下的一個重要入口,用戶服務的訪問嚴格依賴這個服務入口。現在外面一般都叫GSLB(全局服務負載均衡調度),目前是CDN服務里面的重要服務節點。實現的目標都是要解決運維從哪里來,到那里去最快,當目標機房故障的時候,如何把服務調度走。概念圖如下:

18頁PPT帶你深度解讀運維自動化

在移動app的今天,DNS協議的缺點已經逐漸暴露出來了,DNS解析時間長,另外還經常被劫持的。因為有端的控制,現在逐漸開始走httpDNS的服務,通過http服務的方式獲取域名對應的IP地址,此時由DNS平臺直接提供http服務對外。在有端APP的情況下,還可以識別非自己權威DNS域名是否存在被劫持的情況下,這個可以借助端的數據挖掘技術。此時系統需要保持和業務的與時俱進。

這個地方還有一個問題要注意的,內部DNS是不是可以統一管理?理論是可以的,把一個一個機房當成一個個的view,不過我不建議兩個場景耦合在一起,雖然能夠實現。

系統Demo:

18頁PPT帶你深度解讀運維自動化


第二、CMDB管理系統

簡介:在之前的【運維平臺之CMDB系統建設】,我有全面的體系化介紹,不再細述。

系統Demo:

18頁PPT帶你深度解讀運維自動化

第三、名字服務中心系統

簡介:概念最初來自于zookeeper,我們結合我們的實際,實現了名字服務中心。把程序接口之間的調用抽象一個一個的服務之間的調用,在服務中心來實現調度的統一注冊、鑒權、acl、容災容錯控制。說這是線上服務最核心的系統,一點不為過,并且是收益最大的系統,直接替換掉DNS、LVS。我后面挑一個專門的章節來介紹這個系統,以便給你們的線上服務架構提供參考。

系統Demo:

18頁PPT帶你深度解讀運維自動化

第四、持續部署管理系統

簡介:持續部署,是我們應用升級的核心系統,每個月承擔著大量的變更。在系統規劃之初,我們就給他設定了清晰的業務管理目標:做持續集成的一部分,實現四個下圖的四個維度管理目標;也設定了具體業務運維目標:結果所有的包、配置升級,且讓業務運維徹底的退出業務變更流程。如下:

18頁PPT帶你深度解讀運維自動化


系統Demo

18頁PPT帶你深度解讀運維自動化

這個界面實現了最復雜的配置管理職能。

第五、業務調度管理系統

簡介:面向業務的調度管理系統,是一個流程調度引擎+執行器來完成的,目前我們當前正在實現中。其實大家可以看看云編排服務,基本原理類似。

Demo(09年左右實現的一鍵化變更系統),如下:

18頁PPT帶你深度解讀運維自動化

還有數據庫運維管理平臺和分布式cache管理系統……都有相應的實現,這個地方不貼圖介紹了。

六、運維自動系統的API參考實現

所有底層的系統對外提供服務都是通過API暴漏的,供各個系統使用。接口的使用需要通過授權獲得,建議這個授權可以基于系統級別,也可以到接口級別,而不是統一開放的模式。另外接口內需要有相應的一些權限控制,避免底層服務被任意操作。可以仿照AWS的接口實現方式,統一實現API的接口開放訪問地址,同時協議統一(http、https),協議可以使用Get的方式進行訪問。

18頁PPT帶你深度解讀運維自動化

七、運維自動化依賴的團隊模型

我從能力模型、驅動模型和技能模型三個角度來闡述運維團隊和個人的能力要求,最后給出一個參考的組織結構。

第一、團隊的能力模型

18頁PPT帶你深度解讀運維自動化

在我帶過的應用運維團隊中,我都會從如上三個方面的能力對組員提出要求。

業務運維。在我們的考核體系中放的比重越來越低,因為這塊能力要求越來越低。日常的變更、擴容、故障定位、運維規劃對人的能力要求都非常的低,這些工作都能模式化且平臺化,可以減少對人的倚重,

運維研發。我希望每個應用運維人都有運維研發的能力,但現實是不可能的。但對于一個應用運維團隊和一個運維部門來說,運維研發的配備必不可少。在應用運維團隊內部,可以讓有研發能力的人迅速承擔面向業務運維平臺的建設或者參與到部門的運維系統建設中,可以50%時間參與研發。運維研發能力是讓團隊價值迅速達成的保證,
沒有研發能力的運維不是一個好運維(包括我自己)。

技術研究。運維是個技術團隊,需要通過技術體現價值,當找到好的技術就想著如何應用到業務上,給用戶帶來價值,比如說用戶體驗提升,成本減少等等。

這個時候有個問題,應用運維團隊里面的人也會運維研發,然后又有專職的運維研發團隊?那他們的職責分工如何解決,在工作上是否會存在重復建設?我的回答是這樣的:

  首先,可以把運維研發初期定位在公共服務平臺研發上,比如說DNS、LVS、配置管理、監控系統、CMDB、數據分析平臺等等。

  其次,運維研發還需要制定相應的運維研發規范,代碼規范、UI規范、測試規范等等,讓所有參與運維研發的人統一遵守,包括應用運維研發的組員。

  最后,說一下應用運維小組內的研發能力該如何發揮的問題。其實在很多運維團隊中,運維都是跟隨業務,一則可以讓應用運維研發人員開發面向業務的運維系統,他們最懂該業務的需求,實現自己想要的;另外一種更好的操作方式,讓應用運維小組內的研發人員50%時間參與到以運維研發牽頭成立的虛擬研發小組中。一則可以進一步提高應用運維的研發水平;另可以提高運維研發對業務運維的理解,同時提高帶隊作戰的能力。

  關于運維研發和應用運維的比例該設置成多少?2:1吧,這也是初步拍的。大家也可以自檢一下,自己的運維團隊到底設置了多少運維研發人員?另外運維研發配備是否足夠,可以周期性看看運維團隊取得的進步,特別是效率、質量維度。

第二、團隊的驅動模型

18頁PPT帶你深度解讀運維自動化

團隊的驅動力不同,帶來結果的就完全不同。為什么很多運維人員都說自己很苦逼,這個地方可以看看到底是什么在引導著你在做運維工作?傳統的維護,都是集中在第一和第二階段,而進入到高階運維體系之后,我們需要迅速切換到價值驅動、用戶驅動的維度上來。有了用戶驅動和價值驅動,對運維的效率、質量都有了更高的要求,反向驅動我們必須走自動化和平臺這條道路。

第三、團隊的技能模型

在BAT很早就實施了職業通道體系,對于運維人員的成長有明確的要求和衡量體系,在此我就不詳細介紹了。下圖是騰訊的高級應用運維工程師的技能要求雷達圖,供大家參考:

18頁PPT帶你深度解讀運維自動化

第四、參考的運維團隊組織結構

不一定要按照這個結構明確設置運維小組,但是運維的職能差不多是這樣。我還有另外一個建議,最好公共服務研發團隊最好和運維團隊放在一個組織結構下,會有利于公共化服務的推廣,而公共服務化對運維的效率影響是最大的。

18頁PPT帶你深度解讀運維自動化


至此,自動化平臺的深度解碼已經完成。從多個層面帶大家了解運維自動化,其實還是希望給大家帶去一點借鑒意義。大膽的往前走吧,一切都有可能,唯獨那些實現不了,都是我們人的問題,別無其他。


原文鏈接:http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=204109654&idx=1&sn=9a2d3c3841814ffc46954ea862bb1fdb&scene=5#rd


原創文章,作者:追馬,如若轉載,請注明出處:http://www.www58058.com/2413

(1)
追馬追馬
上一篇 2015-04-03
下一篇 2015-04-03

相關推薦

  • CentOS6系統啟動流程

    概述     了解系統的啟動流程,有助于我們了解Linux系統上的一些工作原理,有助于我們深入的理解一個系統的運作方式,那么本篇就以CentOS6系統為例,介紹一下有關Linux系統啟動相關的內容,分為一下幾個部分:     1、Linux系統的一些基礎概念  &nbs…

    Linux干貨 2016-09-09
  • 人志建,則無敵—磁盤、LVM2和簡單腳本練習

    馬哥網絡班21期-第七周博客 1、創建一個10G分區,并格式為ext4文件系統;  disk /dev/sdb         Command (m for help): n    &nbs…

    Linux干貨 2016-08-19
  • 運維學習筆記-Puppet之Hiera初探

    為什么使用Hiera? Puppet中的manifest同時包含靜態的代碼(判斷/循環邏輯,依賴關系,類定義,資源類型定義等等)和動態的數據(類聲明時的參數值和資源聲明時的屬性值)。說代碼是靜態的是因為如果在設計階段考慮比較全面,代碼寫成之后是很少變化的。但是數據要根據具體情況賦予不同的值。如果manifest設計的不是很靈活,比如某些數據被固化(hardc…

    Linux干貨 2016-07-07
  • 運維面試題, 不知是否正確的答案

    1、簡述TCP三次握手四次揮手過程及各過程中客戶端和服務器端的狀態。 握手: client 發送請求SYN到 server; 狀態:server;初始狀態為LISTEN,client 發送SYN后變為SYN_SENT server 發送ACK回應,并發送SYN請求到 client;狀態:服務器收到SYN后,變為SYN_RCVD,發送ACK+SYN后,變為ES…

    Linux干貨 2016-06-23
  • puppet部署多臺服務器

    利用puppet實現自動化部署 配置前準備:   圖中:藍線表示各個服務器之間通信      紅線表示puppetmaster主機向各個agent主機部署信道 A主機puppet-master主機:192.168.126.129 B主機做兩種服務:keepalived高性能和nginx反代  &nb…

    2017-07-23
  • 馬哥教育網絡22期+第四周作業博客

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。    [root@centos-rpi3 skel]# cp -r /etc/skel /home/tuser1 && chmod -R g-rwx,o-rwx /home/tuser1 …

    Linux干貨 2016-09-08

評論列表(1條)

  • stanley
    stanley 2015-04-03 09:36

    精辟透徹,精典之余,mark!

欧美性久久久久