天天看點

Linux叢集和自動化維3.1 Python語言的應用領域

<b>第3章</b>

輕量級自動化運維工具fabric詳解

近期公司的業務系統代碼釋出頻繁,筆者同時在幾個項目組裡面穿插工作,發現釋出和運維的工作都相當機械,加上頻率比較高,導緻時間的浪費也比較多。很多測試工作,例如通過ssh登入到測試環境,推送代碼,然後修改bug進行測試,這些操作都是非常機械并且具有重複性的。更讓人郁悶的是,每次的操作都是相同的,指令基本上都是一樣的,并且是在多台機器上執行,很難在本機上以一個腳本來搞定,主要時間都浪費在使用ssh登入和輸入指令上了。這個時候需要一個輕量級的自動化運維工具,來幫助我們解決這些問題,fabric就順應這個需求而出現了,它非常适合于這些簡單的、重複性的遠端操作。fabirc是基于python語言開發的,前文2.1節就提到過,python應用非常火爆,接下來看看python的應用領域及其流行的原因。

<b></b>

<b>3.1 python語言的應用領域</b>

1.雲計算基礎設施

雲計算平台分為私有雲和公有雲。私有雲平台如大名鼎鼎的openstack,就是以python語言編寫的。公有雲,無論是aws、azure、gce(google compute engine)、阿裡雲還是青雲,都提供了python sdk,其中gce隻提供了python和javascript的sdk,青雲隻提供了python sdk。由此可見各家雲平台對python的重視。

軟體開發工具包(software development kit,sdk)一般是一些開發工具的集合,用于為特定的軟體包、軟體架構、硬體平台、作業系統等建立應用軟體。

2. devops

devops,中文名譯作開發型運維。在網際網路時代,隻有能夠快速試驗新想法,并在第一時間,安全、可靠地傳遞業務價值,才能保持競争力。devops推崇的自動化建構、測試、部署及系統度量等技術實踐,在網際網路時代是尤其重要的。

自動化建構是因應用而異的,如果是python應用,因為有setuptools、pip、virtualenv、tox、flake8等工具的存在,是以自動化建構非常簡單。而且,因為幾乎所有的linux版本都内置了python解釋器,是以用python做自動化,系統不需要預安裝什麼軟體。

自動化測試方面,目前流行的自動化測試架構有robot framework、cucumber、lettuce三種。基于python的robot framework是企業級應用最喜歡的自動化測試架構,而且和語言無關。cucumber也有很多支援者。基于python的lettuce可以實作完全一樣的功能。此外,locust(一個基于python開發的開源負載測試工具)也開始在自動化性能測試方面受到越來越多的關注。

自動化配置管理工具,老牌的如chef和puppet,是基于ruby語言開發設計的,目前仍保持着強勁的勢頭。不過,新生代ansible、saltstack,以及輕量級的自動化運維工具fabric,均為python語言開發。由于它們較前兩者的設計更為輕量化,是以受到越來越多開發者的歡迎,并且已經給chef和puppet制造了不少的競争壓力。

3.網絡爬蟲

大資料的資料從哪裡來?除了部分企業有能力自己産生大量的資料,大部分時候,是需要依靠網絡爬蟲來抓取網際網路資料進行分析的。

網絡爬蟲是python的傳統強勢領域,最流行的爬蟲架構scrapy、http工具包urlib2、html解析工具beautiful soup、xml解析器lxml等,都是能夠獨當一面的類庫。筆者公司的分布式網絡爬蟲程式也是基于scrapy開發的。不過,網絡爬蟲并不僅僅是打開網頁,解析html這麼簡單。高效的爬蟲要能夠支援大量靈活的并發操作,常常要能夠同時抓取幾千甚至上萬個網頁,使用傳統的線程池方式資源浪費比較大,線程數上千之後系統資源基本上就全浪費線上程排程上了。由于python能夠很好地支援協程(coroutine)操作,是以基于python發展了很多并發庫,如gevent、eventlet,還有celery之類的分布式任務架構等。被認為是比amqp更高效的zeromq最早提供的也是python版本。有了對高并發的支援,網絡爬蟲才可以真正達到大資料規模。

4.資料處理

從統計理論,到資料挖掘、機器學習,再到最近幾年提出來的深度學習理論,資料科學正處于百花齊放的時代。資料科學家們都用什麼語言程式設計呢?python是資料科學家最喜歡的語言之一。和r語言不同,python本身就是一門工程性語言,資料科學家用python實作的算法,可以直接用在産品中,這對于初創的大資料公司來說,是非常有利于節省成本的。正是基于資料科學家對python和r的熱愛,spark為了“讨好”資料科學家,對這兩種語言都提供了非常好的支援。

python的資料處理相關類庫非常多。比如,高性能的科學計算類庫numpy和scipy,給其他進階算法打下了非常好的基礎;matplotlib讓python畫圖變得像matlab一樣簡單;scikit-learn和milk實作了很多機器學習算法,基于這兩個庫實作的pylearn2,是深度學習領域的重要成員;theano利用gpu加速,實作了高性能數學符号計算和多元矩陣計算。當然,還有pandas,一個在工程領域已被廣泛使用的大資料處理類庫,其dataframe的設計借鑒自r語言,後來又啟發spark項目實作了類似機制。

除了這些領域以外,python還被廣泛應用于web開發、遊戲開發、手機開發、資料庫開發等衆多領域。