高清亚洲日韩欧洲不卡在线3D,我们的资源覆盖全网,99久久久无码精品亚洲国产真实乱子伦精品视频在线观看亚洲欧美日本,亚洲国产中文精品无码专区网站,亚洲性在线看高清h片国产综合亚洲专区在线视频免费,国产精品99久久久久久人,国产高清在线?视频大全,自拍日韩 无码视频

一名運維者的思考:云計算時代的自動化運維走向

發(fā)表于:2017/7/12 15:02:48??閱讀量:?[關(guān)閉]



  關(guān)于題目“云計算時代的自動化運維”,用通俗的話講,就是應(yīng)用的自動化部署。

  第一個關(guān)鍵詞是自動化,自動化代表高速效率、低成本;第二個關(guān)鍵詞是應(yīng)用部署。即,不涉及講物理基礎(chǔ)設(shè)施的運維(如機房基建、能源、消防、安保、布線等等)。

  假設(shè)一個企業(yè)要做一個電商網(wǎng)站,典型的運維流程是這樣:

  1. 購買硬件設(shè)備:服務(wù)器、交換機??赡苓€有路由器、負載均衡器、防火墻,不一一窮舉了。

  2. 在服務(wù)器上安裝操作系統(tǒng)

  3. 在服務(wù)器上安裝配置基礎(chǔ)環(huán)境(數(shù)據(jù)庫、Web服務(wù)器、搜索引擎等)

  4. 在服務(wù)器上安裝配置應(yīng)用軟件(用Java、PHP開發(fā)的電商軟件)

  5. 把硬件設(shè)備送進機房托管,開通公網(wǎng)訪問

  6. 監(jiān)控運維中的業(yè)務(wù),并做日常備份、擴容/縮容、遷移、升級

  如果是使用公有云,則沒有第1,2,5步,直接購買公有云的虛擬機、容器、平臺服務(wù)(文件存儲、關(guān)系數(shù)據(jù)庫、內(nèi)容分發(fā)等)

  應(yīng)用環(huán)境和應(yīng)用軟件部署是指第3步和第4步。

  1 操作系統(tǒng)自動化部署

  第2步是物理祼機的部署,現(xiàn)在市面上的主流服務(wù)器,都支持IPMI管理,通電接上管理端口就可以完成BIOS設(shè)置,再輔以DHCP, TFTP, KickStart可以實現(xiàn)無人值守的自動化安裝操作系統(tǒng)。

  目前虛擬化、私有云、公有云已經(jīng)相當(dāng)普及,除了一些對特殊硬件有要求的場合,和一些歷史遺留場合,其它大部分場合都可以用虛擬機,物理機上安裝的是宿主操作系統(tǒng),應(yīng)用軟件裝在虛擬機里,這樣物理祼機就只需要安裝宿主操作系統(tǒng),需求相對簡單,沒有應(yīng)用部署那么復(fù)雜。裝完之后不會經(jīng)常去改動,運行穩(wěn)定。

  2 應(yīng)用部署

  與操作系統(tǒng)部署相比,應(yīng)用部署復(fù)雜性高得多,主要表現(xiàn)在:

  · 場景繁多

  一個小型的B2C網(wǎng)站,有負載均衡器、Web服務(wù)器、應(yīng)用服務(wù)器、緩存服務(wù)器、搜索引擎、分布式文件系統(tǒng)、監(jiān)制中心、日志中心、VPN服務(wù)器等十多種服務(wù)器角色

  · 依賴復(fù)雜

  軟件包之間有依賴,服務(wù)器之間有通信依賴

  · 配置各異

  除標準的ini,xml, yaml, json, properties文件外,iptables, sysctl, nginx, haproxy, pptpd等都有自己獨特的配置文件格式,多達上百種。文檔描述和運維腳本編寫都有相當(dāng)大的難度。

  3 應(yīng)用部署技術(shù)發(fā)展歷程

  下面以在CentOS上安裝nginx為例,回顧一下應(yīng)用部署技術(shù)的發(fā)展歷程:

  3.1 手工安裝配置

  這是很古老的部署方式,直到今天也被廣大小規(guī)模團隊廣泛采用。部署過程往往會產(chǎn)生這樣一份文檔供日后參考:

一名運維者的思考:云計算時代的自動化運維走向

  3.1.1 優(yōu)點

  3.1.1.1 靈活性高

  可以安裝任何想要的版本,啟用任何想要的模塊(包括自行開發(fā)的私有模塊)

  3.1.1.2 學(xué)習(xí)門檻低

  文檔是自然語言寫成,閱讀和書寫都很簡單,不需要額外學(xué)習(xí)其它技術(shù)語言。安裝配置用到的工具、命令也較少,主要是網(wǎng)絡(luò)下載、解壓縮、編譯、文本編輯幾種,容易掌握。

  3.1.2 缺點

  作為很古老的部署技術(shù),缺點也是顯而易見的:

  3.1.2.1 文檔不精確

  由于文檔是自然語言寫的,是寫給運維工程師閱讀的,而不是給機器執(zhí)行的。文檔寫的是什么,跟機器上實際執(zhí)行的是什么,并不是100%一致的,需要人肉轉(zhuǎn)換。在長期版本變更、人員更替中極容易出現(xiàn)疏漏。當(dāng)然,可以從行政管理上解決這類隱患。很多大公司都喜歡搞流程,用測試審核流程來督促人少犯錯。然而,只要是這個文檔是給人看而不是給機器執(zhí)行的,這個文檔就會一直面臨筆誤、表達不精確、更新不及時等隱患,要用流程來徹底杜絕這些隱患,成本很高。

  3.1.2.2 效率低

  上述5個步驟都是串行的,須做完一步才能進行下一步。第1步和第3步是比較耗時的,若網(wǎng)速不快,或者編譯時間太長,運維工程師會浪費時間等待。

  另一方面,若有多臺機器需要執(zhí)行同樣的部署操作,也無法減少重復(fù)性操作。

  3.2 自動化部署:shell腳本

  若服務(wù)器稍有規(guī)模的團隊里,上述手工部署就成了一個大問題。

  人肉閱讀的文檔急需轉(zhuǎn)換成機器執(zhí)行的代碼。最早也是廣泛運用的自動化部署技術(shù)便是shell腳本。以bash為例,上述5步寫成bash shell就像這樣(示例代碼,未經(jīng)測試):

一名運維者的思考:云計算時代的自動化運維走向

  直接運行這個腳本,就可以自動安裝配置好nginx了。

  相比手工部署,使用shell腳本的缺點只有兩點:一是寫代碼需要一定學(xué)習(xí)門檻。二是維護的技術(shù)難度會略高。

  3.2.1 優(yōu)點

  3.2.1.1 精確

  由于shell腳本是給機器執(zhí)行的,shell腳本自身就是一份精確的可執(zhí)行的文檔,所以,不存在筆誤、表達不精確、更新不及時的問題。

  3.2.1.2 效率高

  運維工程師只要把腳本啟動起來就可以做別的工作了。

  3.2.2 bash的缺點

  Bash是幾乎所有l(wèi)inux發(fā)行版內(nèi)置的,環(huán)境兼容性好,簡潔易學(xué)。但它卻不是運維編程的終極之選。具體來說有兩大缺點:

  3.2.2.1 缺少高級語言特性

  Bash不是一門高級編程語言,和Perl/Python/Ruby/PHP這些同樣可以用作shell編程的語言相比,缺少很多高級語言特性,而這些特性在運維部署工作中會用到。

  3.2.2.1 工具鏈不豐富

  由于不支持OOP,因此沒有完整的單元測試框架。

  開發(fā)框架、缺陷分析、性能分析工具也幾乎是一片空白。IDE支持雖有(JetBrains公司IntelliJ就有bash shell插件),但功能不多。

  3.3 自動化部署:運維DSL

  得益于虛擬化和公有云的快速普及,效高質(zhì)量地完成應(yīng)用部署不再是大公司專有的需求,也成了中小企業(yè)的剛需,前面分析過了,bash shell不能勝任大規(guī)模的、復(fù)雜的應(yīng)用部署,自動化運維編程語言DSL(Domain Specific Language)被發(fā)明出來,puppet, chef,ansible, saltstack是其中杰出的代表。

  4 自動化運維技術(shù)發(fā)展趨勢展望

  4.1 部署工作代碼化

  無論是使用bash / python shell,還是使用puppet、chef等DSL,都可以完成代碼化這個過程。把手工操作變成代碼。

  使用代碼自動化部署應(yīng)用環(huán)境和應(yīng)用,才能保證無論在辦公室測試環(huán)境,還是在機房生產(chǎn)環(huán)境,每次運行這個部署代碼,都能得到相同的結(jié)果。這是一切自動化部署的基礎(chǔ)。

  4.2 運維代碼版本化

  運維代碼要和Java,PHP等應(yīng)用代碼一樣,納入SVN、GIT代碼倉庫,執(zhí)行嚴格的開發(fā)-測試-上線-回滾流程。

  這樣便可利用svn/git的成熟SCM功能,用于這樣一些場景:

  4.2.1 新建分支

  運維代碼由1.0升級到2.0,增加了緩存層。則可以從1.0復(fù)制出一個分支出來,命名為2.0,然后再在2.0的基礎(chǔ)上修改。

  4.2.2 差異比較

  若要了解1.0和2.0的運維架構(gòu)到底發(fā)生了什么變化,執(zhí)行svn和git的diff即可查看每一行代碼的變化。

  4.2.3 歷史歸檔

  1.0版穩(wěn)定運行了半年,升級到2.0版本,此時1.0版凍結(jié)寫請求,歸檔留存。2.0上線運行一段時間,發(fā)現(xiàn)穩(wěn)定性不夠??梢詮臍w檔中找出1.0版本的部署代碼,回滾到1.0版本。

  4.3 測試環(huán)境高保真

  很多公司的測試和生產(chǎn)環(huán)境存在操作系統(tǒng)不一致、軟件版本不一致、配置項不一致的情況。這種不規(guī)范的運維有兩大后果:一是bug在測試環(huán)境未能測出,導(dǎo)致線上故障;二是線上出現(xiàn)異常時,測試環(huán)境不能復(fù)現(xiàn)。

  一個應(yīng)用至少有兩種環(huán)境:測試環(huán)境、生產(chǎn)環(huán)境。大一點的公司還會分成:開發(fā)環(huán)境、功能測試環(huán)境、性能測試環(huán)境、預(yù)發(fā)環(huán)境、生產(chǎn)環(huán)境。這么多的環(huán)境的自動化部署代碼,原則上應(yīng)該是90%以上都相同,只有少數(shù)地方不一樣。

  4.4 自動化測試

  使用代碼自動化部署完之后,服務(wù)器是否立即可用,需要測試驗證。自動化測試能讓整個運維過程更加高時效。

  在應(yīng)用開發(fā)領(lǐng)域,自動化測試、單元測試已經(jīng)非常普及了,運維開發(fā)也可以做一些類似的自動化驗收測試工作:

  4.4.1 終端應(yīng)用測試

  模擬一個客戶端訪問剛剛部署好的服務(wù),例如:驗證其RESTfulAPI是否得到預(yù)期的結(jié)果。

  優(yōu)點是,很接近實際用戶,若此測試通過,則說明裝軟件、改配置、啟服務(wù)各項工作都正確。缺點是,若測試不通過,不能立即定位出哪里出錯了。定位問題需借助下面更底層的測試。

  4.4.2 四層網(wǎng)絡(luò)測試

  使用nmap之類的工具檢測目標端口是否正常響應(yīng)(包括防火墻是否放行)

  4.4.3 本機測試

  · 用yum,apt檢測包是否安裝

  · 用service status檢測守護進程是否正常支持

  · 用ps檢測進程是否正在運行

  · 用ls檢測文件是否存在

  · 用grep檢查配置薦是否設(shè)置成了指定的值

  自動化測試用例覆蓋足夠全方面,我們便有可能實現(xiàn)一臺機器從祼機到上線服務(wù)全部自動化完成,無人值守。若沒有自動化測試,應(yīng)用部署完成之后,仍然需要人工驗證是否滿足上線服務(wù)的要求。

  4.5 工作流

  運維代碼從開發(fā)到上線發(fā)揮作用,也應(yīng)該和應(yīng)用代碼一樣遵循下面的工作流:

一名運維者的思考:云計算時代的自動化運維走向

  這個流程圖只展示了基本的要求:部署到生產(chǎn)環(huán)境前須經(jīng)過測試環(huán)境驗證。更復(fù)雜的還有代碼reivew、性能測試環(huán)境驗證、漏洞掃描環(huán)境驗證、預(yù)發(fā)環(huán)境驗證,生產(chǎn)環(huán)境分批發(fā)布等環(huán)節(jié)。

  很多公司的現(xiàn)狀是運維工程師開兩個ssh終端,一條命令,先在本地環(huán)境跑一下看看效果,成功就拿到線上去跑了。更有甚者,不經(jīng)過本地驗證直接到線上操作了。這主要是因為運維工作沒有充分代碼化,運維代碼沒入svn、git倉庫。

  4.6 圖形化界面和IDE

  運維領(lǐng)域一直都缺少通用的、高時效的圖形界面和IDE。這大約有兩個原因:

  一是需求不強勁。運維編程的復(fù)雜度畢竟比應(yīng)用編程簡單好幾個數(shù)量級。運維日常工作也沒有代碼化,還有大量的人工操作,所以,運維代碼通常像冰糖葫蘆一樣,一個個腳本雖然串在一起,但大都是個獨立的個體,沒有那么強的代碼組織結(jié)構(gòu)。

  二是運維社區(qū)極客氛圍濃重。就連應(yīng)用編程領(lǐng)域也只有Java、.NET等語言的用戶比較偏愛IDE。在PHP、Python、Perl社區(qū),vim黨、emacs黨、sublime text黨、notepad++黨各領(lǐng)風(fēng)騷。這些黨派崇拜的編輯器不同,但有一個共同信仰:不依賴IDE寫代碼是一個優(yōu)秀程序員的必備素質(zhì)。

  關(guān)于這個問題,我是這樣認為的,有高科技能提升編程生活質(zhì)量,為什么不用用?即使puppet、chef把運維編程體驗做到這么好了,我仍然期待運維業(yè)界涌現(xiàn)一批Eclipse、AdobeFlash這樣的圖形界面、IDE。讓IDE的高效易用和運維的命令行操作相得益彰。

  4.7 運維代碼分治

  運維界有一句祖訓(xùn):沒有折騰,就沒有故障。

  但為了快速響應(yīng)業(yè)務(wù)需求和提高資源利用率,運維又不得不頻繁折騰。有沒有什么辦法能打破“折騰越多、故障越多”的魔咒?有,分而治之。

  分治,就是把風(fēng)險高的和風(fēng)險低的分開、重要性高的和不高的分開、簡單的和復(fù)雜的分開、頻繁變動的和不頻繁的分開。應(yīng)用編程領(lǐng)域,大家積極探索和實踐的各種架構(gòu)、框架、模式,歸根到底都在做兩件事:封裝復(fù)雜度、隔離變化。

  運維架構(gòu)層的分治,在業(yè)界已經(jīng)非常普遍了,比如應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器分離、交易數(shù)據(jù)庫和用戶數(shù)據(jù)庫分離;生產(chǎn)環(huán)境和測試環(huán)境隔絕。

  4.7.1 配置項和邏輯代碼分開

  其實業(yè)界早就在這么做了,puppet的hiera和saltstack的pillar都是做這個用的。

  有些運維變更,可能只改變了配置項的值,而并沒改變運維代碼里的業(yè)務(wù)邏輯、流程控制。如果只改配置文件,不改運維腳本。發(fā)布風(fēng)險就低了很多,起碼不會導(dǎo)致語法錯誤。

  4.7.2 會變動的配置項獨立

  就像應(yīng)用開發(fā)領(lǐng)域里的模板引擎一樣,把配置文件寫成模板,模板中包含變量,運維工具或者運維平臺解析模板內(nèi)容,把變量替換成真實的值。

  4.7.3 服務(wù)發(fā)現(xiàn)

  將會變動的配置項獨立出來動態(tài)維護,還可以實現(xiàn)服務(wù)發(fā)現(xiàn)。以haproxy + etcd + confd為例:

  confd就是一個模板引擎,類似Java里有Velocity和Python里的jinja。不同之處是:confd還有自動輪詢etcd的能力。使用confd解析和管理haproxy的配置文件,摘錄如下:

一名運維者的思考:云計算時代的自動化運維走向

  跟原生的haproxy配置文件不同,最后三行是confd模板。

  etcd是一個KV存儲,類似memcached,不同之處是etcd生來就是分布式的,自帶高可用和負載均衡的基因,同時還有HTTPRESTful API,存取方便。使用etcd存儲后端服務(wù)器列表。

  當(dāng)后端有一臺nginx服務(wù)啟動的時候,調(diào)etcd的api把這臺機器的ip地址寫入etcd上的列表。confd輪詢etcd時查到這臺新加入的機器,便會自己把它加進haproxy的backend server里。

  這樣便實現(xiàn)了負載均衡集群自動化擴容,下線一臺nginx機器亦同此理,先調(diào)etcd的api刪除某臺機器,過一分鐘在這臺nginx上檢測不到流量了再把它下線。

  擴容過程中沒有修改haproxy的配置,也沒有部署haproxy。只是調(diào)用了etcd的RESTfulAPI,這個風(fēng)險就比修改haproxy配置文件再部署上線小多了。

  4.8 整合基礎(chǔ)設(shè)施API

  所有的公有云廠商都提供了HTTPOpenAPI,包括國外的aws、azure、gce和國內(nèi)的阿里云、Ucloud、青云。

  市場占有率排名靠前的虛擬化軟件商也都有HTTPOpenAPI,包括:VMware、Hyper-V、XenServer、OpenStack。

  因此技術(shù)上有可能把基礎(chǔ)設(shè)施提供商的API整合進來,實現(xiàn)虛擬機創(chuàng)建、啟動、安裝操作系統(tǒng)、聯(lián)網(wǎng)、執(zhí)行命令、關(guān)機、銷毀全生命周期的自動化。

  和應(yīng)用部署腳本不同,調(diào)用云廠商的API不能由DSL腳本完成,用bash shell來做也非常不方便。應(yīng)該用PHP、Java之類的應(yīng)用編程語言寫一個應(yīng)用來做。

  至此,虛擬機和操作系統(tǒng)初始化、應(yīng)用環(huán)境部署、應(yīng)用軟件部署全部都實現(xiàn)了自動化,便可以從零創(chuàng)建一臺可上線服務(wù)的機器。

  4.9 跨廠商跨城市故障轉(zhuǎn)移

  實現(xiàn)了部署工作代碼化和基礎(chǔ)設(shè)施API整合之后,便可以自由地跨廠商、跨城市遷移:在不同的機房維持兩份相同的數(shù)據(jù),每分鐘同步。當(dāng)基礎(chǔ)設(shè)施發(fā)生重大故障難以在短時間內(nèi)恢復(fù)時,可以迅速在另外一個有數(shù)據(jù)的機房將整套應(yīng)用自動化部署起來。

  4.10 彈性伸縮

  幾乎每一個給人類訪問的網(wǎng)站,其服務(wù)器資源利用率都是存在明顯峰谷的:

  · 有的尖峰是一年出現(xiàn)一次,典型的例子是阿里的雙十一。每年11月11日,電商狂歡。大賣家的進銷存系統(tǒng)、淘寶生態(tài)鏈上的SaaS服務(wù)商(如在線打印快遞單、發(fā)送短信券碼、物流跟蹤)的系統(tǒng)壓力也跟著猛漲1-2個數(shù)量級。他們投資擴容的硬件設(shè)備,只有這一天才能充分利用,平時利用率極低。

  · 有的尖峰是一天出現(xiàn)一次或者多次,比如唯品會、聚劃算的10點秒殺?;久恳粋€電商都一天多波次的秒殺、搶購。

  · 更普遍的是白天高峰、凌晨到清晨低谷。

  自動化運維(包括自動購買分配虛擬機、自動部署應(yīng)用環(huán)境、自動部署應(yīng)用軟件、自動測試)使按需調(diào)度計算資源成為了可能。實時的彈性伸縮,意味著每天、甚至每分鐘都在做擴容、縮容,這須要靠自動化運維實現(xiàn)。

  4.10.1 公有云上的按需采購

  主流的公有云計費粒度都已經(jīng)細到小時(aws、阿里云、Ucloud),有的做到了按分鐘(azure、gce),甚至還有按秒計費的(青云)。

  對出現(xiàn)頻率較低、計劃中的尖峰,人工干預(yù),提前做好擴容和縮容預(yù)案,以雙十一為例,人工設(shè)定好11月10日購買一批按小時計費的機器(不是包年包月),到了11月15日釋放這些機器,廠商會停止計費。

  對出現(xiàn)頻率高的尖峰,運維平臺智能調(diào)度,比如每5秒采樣系統(tǒng)資源利用率,達到指定的擴容閾值就自動買機器并自動化部署、測試、上線服務(wù),低于指定的回收閾值就自動下線服務(wù)器、通知廠商停止計費。這種適用于部署上線時間極短的服務(wù),特別是無狀態(tài)、無用戶數(shù)據(jù)的應(yīng)用服務(wù)器。若需要較長的預(yù)熱時間(如數(shù)據(jù)庫、緩存、搜索引擎),則需要提前擴容,這就要根據(jù)歷史性能曲線做智能預(yù)測了。

  按需購買對公有云廠商也有積極意義:

  · 從宏觀角度講,用多少買多少,杜絕浪費,提升了全球公有云資源池中的資源利用率,任何提升資源利用率的事情都是有積極正面的。

  · 從經(jīng)濟角度講,公有云按小時售賣的機器單價比包年的貴,如果兩種售賣方式都能100%把機器賣出去,按小時計費的總收入更高。

  · 目前有的公有云廠商已經(jīng)出現(xiàn)部分機房物理資源售罄的情況。如果提供實時服務(wù)(如電商、支付、新聞、社交)的客戶都按需采購,就有可能在閑時把資源釋放出來給實時性要求不高的客戶(如離線大數(shù)據(jù)處理、動畫渲染)使用。

  4.10.2 私有云的業(yè)務(wù)間調(diào)配

  已經(jīng)投資購置大量硬件的企業(yè),可以在不同內(nèi)部業(yè)務(wù)之間調(diào)度,比如白天把大多數(shù)機器用來為消費者提供服務(wù),晚上縮減承擔(dān)消費者請求的機器規(guī)模,釋放出來的計算資源用來做大數(shù)據(jù)處理。

 



本文鏈接:一名運維者的思考:云計算時代的自動化運維走向
精品无码一区在线观看| 免费网站正能量www正能量入口| 欧美日韩免费观看| 性激烈的欧美三级视频| 国产在线拍揄自揄视频不卡99| 亚洲国产综合在线观看不卡| 国产69精品久久久久777| 亚洲?V无码专区一级婬片毛片| 亚洲日韩av手机在线观看| 午夜无码视频在线观看网站| 亚洲欧美中文字幕影音先锋| 永久免费无码AV在线网站| 日本中文字幕一区高清在线 | 成人网站麻豆无码无码无码无码无码| 日韩人妻潮喷无码视频| 91在线精品一区在线观看| 亚洲欧美日韩高清一区 | 欧美一区二区三区视频在线观看| 亚洲精品国产品国语| 久久综合综合久久综合| 日韩欧美亚洲综合中文字幕视频一区| 人妻仑乱少妇av级毛片| 精品久久久久久无码中文字幕一区| 国产午夜草莓视频在线观看| 国内大量揄拍人妻精品視頻| 国产一级毛片aaa高级a大片| 波多野结衣永久免费视频| 欧美大片欧美激情性色a∨在线| 美国一级aⅤ一区二区在线| 欧美日韩在线精品一区二区三区激情综合| 欧美老妇老熟妇性性| 国产在线精品一区二区| 丰满人妻在公车被猛烈进入电影| 中文字幕乱人伦一区二区| 国内精品久久久久久久| 免费男同gay片av网站观看| 岛国精品视频一区二区三区| 日韩一区二区在线 观看视频播放| 欧美成人精品一区二区久久久| 3d日本无修肉动漫在线观看| 国内精品小视频福利网址|