1. 程式人生 > >DevOps介紹及工具推薦

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也可以做一些針對基礎資源的自動化操作,比如遊戲行業的快速開服。