DevOps介紹及工具推薦
什麼是DevOps
DevOps是Development和Operations的組合,是一組過程、方法與系統的統稱,用於促進開發(應用程式/軟體工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。它的出現是由於軟體行業日益清晰地認識到:為了按時交付軟體產品和服務,開發和運營工作必須緊密合作。
可以把DevOps看作開發(軟體工程)、技術運營和質量保障(QA)三者的交集。
傳統的軟體組織將開發、IT運營和質量保障設為各自分離的部門。在這種環境下如何採用新的開發方法(例如敏捷軟體開發),這是一個重要的課題:按照從前的工作方式,開發和部署不需要IT支援或者QA深入的、跨部門的支援,而卻需要極其緊密的多部門協作。然而DevOps考慮的還不止是軟體部署。它是一套針對這幾個部門間溝通與協作問題的流程和方法。
DevOps工具
工欲善其事,必先利其器,現在大家在DevOps領域最關注的還是在工具層面。
下面是我跟這麼多公司接觸下來,大家使用比較多的工具:
1、監控工具
比較老牌的就是Zabbix,Nagios,用Zabbix的感覺是最多的。國內的有小米開源的OpenFalcon。這類監控工具一般是對伺服器、服務(中介軟體,資料庫)做一些常用指標的監控。
2、效能分析/APM工具
APM很多時候被認為是監控的一個細分領域。但在現代複雜分散式系統架構下,APM工具往往更能準確、直接的幫助使用者定位到效能瓶頸,比如哪一個URL訪問慢、哪一個方法執行慢、哪一個SQL執行慢。在以往要想拿到這些資料,往往得需要比較資深的架構師、DBA一起合作才能拿到這些資料,而定位瓶頸的效率往往還不太高。現在通過APM工具能讓普通技能的運維人員,也很高效的定位到這些深層的問題。現在商用的APM工具不少,國外的有Newrelic,國內知名的就有聽雲、Oneapm、透視寶這些。開源的也有Pinpoint(naver開源)、Zipkin(twitter開源)、CAT(大眾點評開源).
3、批量+自動化運維工具
這裡就比較多了,知名的有Puppet、Ansible、Chef、Saltstack這些。這些在網上的資料也比較多,找比較新版本的官方文件看就行了。Puppet和chef是比較早期的工具,受眾面也很大,不過這兩個工具基於ruby實現,現在要找到熟悉ruby的人來做這塊的二次開發可不容易。而ansible和saltstack則相對新生代一些,目前使用者基數增長很快,基於python實現,要找做二次開發的人也相對容易的多。
4、集中日誌分析工具
在一個伺服器比較多的環境下,如何集中的管理和分析、查詢日誌,已經變成一個比較強的需求了。想象一下,如果發生了某個錯誤,你還得一臺臺機器去翻日誌檔案,是不是很蛋疼。在這個需求驅動下,就誕生了一些集中日誌分析工具。在開源領域,比較知名的就是ELK這一套工具了,涵蓋了日誌採集、上報、搜尋、展現這一類基本需求,現在比較多的上規模的企業都用這個,網上資料也大把。核心實現機制都是通過一些日誌採集代理(類似Filebeat)去爬日誌檔案,將最新的部分提交到採集服務端,後端再對接搜尋引擎,能支援很快速、準確的搜尋即可。有一個國內不怎麼知名的Sentry日誌收集服務,比較輕量級,本身是Python做的,與各種語言的日誌框架做了非常好的整合,可以很方便的集中收集異常日誌,並分配給對應的開發人員。它在github上有10000多個star了,這在DevOps相關的軟體裡,都是排名非常靠前的了。git的地址:GitHub - getsentry/sentry: Sentry is cross-platform crash reporting built with love
5、持續整合/釋出工具
我接觸的人都是用Jenkins的,沒有用其他的,可能跟我所在的技術圈子有關。整合打包的過程其實一般都比較簡單,配好版本庫和打包指令碼就行。但釋出的過程就比較複雜,有些是全量釋出,但也有非常多的IT團隊採用增量釋出。這個方面如果想用工具,還是得先分析清楚現有的釋出流程,手工情況下怎麼做,哪些能通過自動化工具來完成。
6、IaaS整合
最近兩年的公有云推廣比較迅速,很多新的伺服器採購都被匯入到雲上去了。現在主流的公有云都提供了比較完備的API,基於這些API也可以做一些針對基礎資源的自動化操作,比如遊戲行業的快速開服。