官术网_书友最值得收藏!

1.1 自動化運維概述

在運維技術還不成熟的早期,都是通過手工執行命令管理硬件、軟件資源,但是隨著技術的成熟及軟/硬件資源的增多,運維人員需要執行大量的重復性命令來完成日常的運維工作。而自動化運維就是將這些原本大量重復性的日常工作自動化,讓工具或系統代替人工來自動完成具體的運維工作,解放生產力,提高效率,降低運維成本。可以說自動化運維是當下IT運維工作的必經之路。

1.1.1 自動化運維勢在必行

自動化運維之所以勢在必行,原因有以下幾點:


(1)手工運維缺點多。傳統的手工執行命令管理軟/硬件資源易發生操作風險,只要是手工操作,難免會有失誤,一旦執行錯誤的命令,后果可能是災難性的。當軟/硬件資源增多時,手工配置效率低,增加運維人員的數量也會導致人力成本變高。

(2)傳統人工運維難以管理大量的軟/硬件資源。試想當機器數目增長到1000臺以上時,僅靠人力來維護幾乎是非常困難的事情。

(3)業務需求的頻繁變更。現在的市場瞬息萬變,業務唯有快速響應市場的需求才能可持續發展,對工具的需求和變更更是會越來越多,頻率也越來越快,程序升級、上線、變更都是需要運維條線來支撐的。同樣的,只有借力自動化運維,使用工具才能滿足頻繁變更的業務需求。

(4)自動化運維的技術已經成熟。自動化運維被廣泛關注的一個重要原因就是自動化運維的技術已經非常成熟,技術的成熟為自動化運維提供了智力支持。云計算、大數據一方面刺激著自動化運維的需求,另一方面也助力自動化運維。微服務的軟件架構、容器等技術都在推動自動化運維。

(5)工具已經到位。關于自動化運維的工具,無論是開源的工具還是企業級的產品,都是應有盡有,實現自動化運維已經勢不可擋。

1.1.2 什么是成熟的自動化運維平臺

現在成熟的自動化運維平臺都具備哪些要素呢?一般來說,有以下幾點:


(1)需要有支持混合云的配置管理數據庫(CMDB)。CMDB存儲與管理企業IT架構中設備的各種配置信息,它與所有服務支持和服務交付流程都緊密相連,支持這些流程的運轉、發揮配置信息的價值,同時依賴于相關流程保證數據的準確性?,F在更多的企業選擇將服務器資源放在云上,無論是公有云還是私有云都提供資源管理接口,利用這些接口構建一個自動化的CMDB,同時增加日志審計功能,通過接口對資源的操作都應該記錄,供后續審計。

(2)有完備的監控和應用性能分析系統。運維離不開監控和性能分析。資源監控(如服務器、磁盤、網絡)和性能監控(如中間件、數據庫)都是較為基礎的監控,開源工具有Zabbix、Nagios、OpenFalcon(國產)。應用性能分析,如某些Web請求的響應速度、SQL語句執行的快慢等對于問題的定位是非常有幫助的,開源工具有pinpoint、zipkin、cat;商業工具有New Reclic、Dynatrace。

(3)需要具備批量運維工具。如何有效降低運維的成本呢,肯定是更少的人干更多的活。批量運維工具可有效節省大量人力,使用少量的人管理大量的服務器軟/硬件資源成為可能。開源的批量運維工具有ansible、saltstack、puppet、chef,其中ansible和saltstack純由Python編寫,代碼質量和社區活躍程度都很高,推薦使用。

(4)需要有日志分析工具。隨著服務器的增多,日志的采集和分析成了運維中的難點,試想如何快速地從成百上千臺服務中采集日志并分析出問題所在呢?日志采集方面工具有Sentry,也是純由Python打造,日志分析有ELK,兩者都是開源的。

(5)需要有持續集成和版本控制工具。持續集成是一種軟件實踐,團隊成員經常集成他們的工作,每次集成都通過自動化的構建來驗證,從而盡早發現集成錯誤。持續集成的工具有Hudson、CruiseControl、Continuum、Jenkins等。版本控制是軟件開發中常用的工具,比較著名的是svn、git。

(6)還要有漏洞掃描工具。借助商業的漏洞掃描工具掃描漏洞,保護服務器資源不受外界的攻擊。

1.1.3 為什么選擇Python進行運維

為什么選擇Python作為運維方面的編程語言呢?網絡上不乏已經開發好的運維軟件,但是運維工作復雜多變,已有的運維軟件不可能窮盡所有的運維需求,總有一些運維需求需要運維人員自己去編寫程序解決,這樣做運維很有必要學會一門編程語言來解決實際問題,讓程序代替人力去自動運維,減輕重復工作,提高效率。接下來,選擇哪一門語言合適呢?當然是選一門學習成本低、應用效果高的,這方面Python的性價比最高,原因是:一方面,大部分的開源運維工具都是由純Python編寫的,如Celery、ansible、Paramiko、airflow等,學習Python后可以更加順暢地使用這些開源工具提供的API,可以閱讀這些開源工具的源代碼,甚至可以修改源代碼以滿足個性化的運維需求;另一方面,Python與其他語言相比,有著以下優勢。


簡單、易學。閱讀Python程序類似讀英文,編碼上避免了其他語言的煩瑣。

更接近自然的思維方法,使你能夠專注于解決問題而不是語法細節。

規范的代碼,Python采用強制縮進的方式使得代碼具有較好的可讀性。

Python擁有一個強大的標準庫和豐富的第三方庫,拿來即用,無須重復造輪子。

可移植性高,Linux、UNIX、Windows、Android、Mac OS等一次編寫,處處運行。

實用效果好,學習一個知識點,能夠直接實戰——用在工作上,立竿見影。

潛移默化,學習Python能夠順利理解并學習其他語言。


Python也是最具潛力的編程語言,在2018年IEEE發布的頂級編程語言排行榜中,Python排名第一,如圖1.1所示。而圖1.2表明,Python現在已成為美國名校中最流行的編程入門語言。ANSI / ISO C + +標準委員會的創始成員Bruce Eckel曾說過:“life is short,You need Python?!币欢瘸蔀镻ython的宣傳語,這正是說明Python有著簡單、開發速度快、節省時間和精力的特點。另外,Python是開放的,也是開源的,有很多善良可愛的開發者在第三方庫貢獻了自己的源代碼,許多功能都可以直接拿來使用,無須重新開發,這也是Python的強大之處。

圖1.1 IEEE Spectrum給出的編程語言排行榜

圖1.2 在美國名校編程語言的流行情況

下面摘抄一段Python在維基百科中的介紹。


Python是完全面向對象的語言。函數、模塊、數字、字符串都是對象,并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復用性。由于Python支持重載運算符,因此Python也支持泛型設計。相對于Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標準庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。

雖然Python被粗略地分類為“腳本語言”(Script Language),但實際上一些大規模軟件開發項目,如Zope、Mnet及BitTorrent及Google也廣泛地使用它。Python的支持者喜歡稱它為一種高級動態編程語言,原因是“腳本語言”泛指僅作簡單程序設計任務的語言,如shell script、VBScript等只能處理簡單任務的編程語言,并不能與Python相提并論。

Python本身被設計為可擴充的,并非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C、C++、Cython來編寫擴充模塊。由于Python編譯器本身也可以被集成到其他需要腳本語言的程序內,因此很多人還把Python作為一種“膠水語言”(Glue Language)使用,即使用Python將其他語言編寫的程序進行集成和封裝。

在Google內部的很多項目中,比如Google Engine使用C++編寫性能要求極高的部分,然后使用Python或Java/Go調用相應的模塊?!禤ython技術手冊》的作者馬特利(Alex Martelli)說:“這很難講,不過在2004年,Python已在Google內部使用,Google招募了許多Python高手,但在這之前就已決定使用Python。他們的目的是盡量使用Python,在不得已時改用C++;在操控硬件的場合使用C++,在快速開發時使用Python。”

一些技術術語不理解沒關系,Python是許多大公司都在使用的語言,如Google、NASA、知乎、豆瓣等,學習Python會有很大的用武之地,完全不用擔心它的未來。

Python的設計哲學是優雅、明確、簡單。提倡最好使用一種方法做一件事,Python的開發者一般會拒絕花哨的語法,選擇明確而很少有歧義的語法。下面再摘一段Python格言:


Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!


上面的格言來自Python官方,也有中文版本,如下:


優美勝于丑陋,明晰勝于隱晦,

簡單勝于復雜,復雜勝于繁蕪,

扁平勝于嵌套,稀疏勝于密集,

可讀性很重要。

雖然實用性比純粹性更重要,

但特例并不足以把規則破壞掉。

錯誤狀態永遠不要忽略,

除非你明確地保持沉默,

直面多義,永不臆斷。

最佳的途徑只有一條,然而他并非顯而易見——誰叫你不是荷蘭人?

置之不理或許會比慌忙應對要好,

然而現在動手遠比束手無策更好。

難以解讀的實現不會是個好主意,

容易解讀的或許才是。

名字空間就是個“頂呱呱”的好主意。

讓我們想出更多的好主意!


Python如此優秀,讓我們一起來學習吧。

主站蜘蛛池模板: 陈巴尔虎旗| 浦东新区| 山阳县| 宁阳县| 涿鹿县| 文山县| 炎陵县| 吕梁市| 迁西县| 宝兴县| 鹰潭市| 山丹县| 宁安市| 都匀市| 博湖县| 西乌| 四会市| 克拉玛依市| 永丰县| 宜兰市| 肇源县| 淳安县| 铁岭市| 莲花县| 内黄县| 鱼台县| 纳雍县| 江华| 酉阳| 台中市| 黄浦区| 乌审旗| 鄯善县| 台北市| 台前县| 扶沟县| 始兴县| 邓州市| 扎鲁特旗| 时尚| 罗甸县|