運維DBA要不要學python
我個人認為是:要
現在python在運維數據庫的工作中主要用在
1、編寫一些運維腳本
2、編寫運維管理平台
3、研究互聯網大廠的運維腳本/工具並應有
特別是運維開源數據庫的時候,第三點特別重要,例如MongoDB的zabbix監控數據庫腳本就是用老外用python寫的,如果要改一下里面的指標
肯定要用到python
一些互聯網大廠開源的數據庫腳本和工具,例如mysql相關工具,基本都是用python寫的,這些工具/輪子我們肯定會用到
所以python是如此重要,當然用shell也可以完成第一點,如果強硬用python來寫也只是用python來調用一下某些shell命令
但是,既然要學python,用python,做一個pythoner,那么最好所有工作都用python,有些人不這么認為,某些任務,shell可以做的python做不了
python一定要調用shell命令來做,這個是的,既然是調用shell命令為何不直接用shell
但是我個人覺得shell有個最大的缺點:格式化
shell幾乎是沒有格式的,只有簡單的縮進,也沒有專用的shell編輯器,那么,當你寫了幾百行代碼的時候,如果沒有很好的縮進習慣,那么review你的shell腳本
的那個人簡直就是災難,也由於沒有專用的shell編輯器,編寫shell的時候很容易出錯,也不好調試
用python就沒有這些問題,python可以用pycharm(本人覺得除了pycharm其他工具都不行)或者其他工具,python有嚴格的格式化,編輯器也非常強大
pdb,ipdb,print調試手段手到擒來
我記得之前有個招S銀行技術部的招聘信息,其中有一條
必須會寫shell,並且有寫過單個腳本超過10000行shell代碼的經驗
當時覺得這個要求非常蛋疼,能在單個腳本寫超過10000行shell代碼的可能是高人也可能是SB,反正覺得招S銀行的技術也好不到哪里好
據我所知,他們的mysql運維也是外包給某數據庫服務公司,反正大部分都是外包,核心技術應該比較一般
不過,用python不是說完全不用學shell,畢竟python也是要調用shell命令的,不會shell你怎么知道怎么調用shell命令去完成某些任務
只不過不需要學習shell的流程控制語句之類的復雜語法已而
最后,還有一個語言,go語言
go作為互聯網界的C/C++,雖然發展歷史不長,但是最近幾年確實比較火,go雖然是靜態語言,也是帶GC功能的
因為需要GC,所以go語言不適合做
1、系統編程:系統編程依然是C/C++做主導,由於GC的關系,性能比不上C/C++
2、大數據:依然是JAVA的天下,當時hadoop誕生的時候,go語言還沒出生,所以大數據領域還是無法取代JAVA
3、電商:依然是JAVA的天下,JAVA有最成熟的解決方案,阿里巴巴的業務大量使用JAVA就是一個例子
go語言適合做
1、雲計算:在雲計算領域,go語言沒有對手,go語言一般用於非cpu密集型業務,cdn,對象存儲,docker,consul,k8s
其實性能上,go語言應該是比JAVA遜色不少,發展歷史沒有JAVA長,GC功能沒有JAVA的完善
至於在運維領域,其實go語言的性能比python是要強,畢竟是靜態語言,而且可以利用多核優勢,沒有python的GIL鎖問題
但是在運維領域,更注重的是運維生態,而不是性能,我們開發的運維工具和運管平台其實都不需要很高性能
如果沒有運維生態支持,運維將會非常難做,例如,現在每種數據庫基本都有python驅動(mongodb,DB2,oracle,mssql,mysql,pgsql,sqlite等等),
spark編寫作業也可以用python來編寫,openstack本來用python來開發,有很完善的python API,kvm管理也有很完善的python API,
Linux內置python,Windows安裝python也比較簡單
python有相應的庫可以編寫Windows服務,國內公有雲廠商基本都有python API等等,幾乎每種工具、系統、軟件都支持python
而這種運維生態,go語言是沒有的,原因是go語言是2009年誕生,到現在才10年時間,而python到現在已經有30年歷史
所以python才會有這種運維生態,所以才會有每種工具、系統、軟件都支持python
例如,DB2數據庫就沒有go語言的驅動,mssql對go語言不支持bulk insert語法等等
而且目前互聯網大廠用go語言來寫的開源數據庫運維工具和腳本非常少
當然,如果對python有幾年經驗並且很扎實了,那么可以用空余時間學學go語言
還有一個提醒:據我所知,go語言最流行的web框架beego問題比較多,沒有python的django框架那么完善
如果要用go語言來開發運維管理平台,要注意這個坑
最后總結一句:對於運維或DB運維,個人覺得真沒有必要學go語言,畢竟go語言是靜態語言,門檻相對比較高,而且go語言沒有運維生態
當然,如果公司業務的技術棧統一,比如都用java+MySQL+Linux,那么用go語言來做運維的工作也沒嘗不可,本人就有個朋友在唯品會做運維主管
運維的機器至少幾千台,統一用go語言作為運維工作的第一語言,從性能上來說,確實go語言是第一選擇
目前本人負責運維:MongoDB,MSSQL,MySQL,PGSQL
用到的語言有:JavaScript,SQL,Python,Windows的批處理,bash shell
如有不對的地方,歡迎大家拍磚o(∩_∩)o
本文版權歸作者所有,未經作者同意不得轉載。