最近咱們團隊正在將生產環境的配置進行自動化。簡單地說就是使生產環境在任何地方均可以快速的搭建起來,好比程序員在本身的機器上,公司內部的機器上,還有云上。html
本文就是想闡明爲何要自動化配置。nginx
進行配置自動化的這個過程,我發現,問題不在於程序員懂不懂Ansible、Chef、Puppet這些自動化配置工具的使用。程序員
問題在於對「配置」自己的理解。我甚至發現還有運維人員也不能理解爲何要將配置自動化。shell
不少人都將搭建Tomcat、Nginx這類腳本理解成一個個「任務」。這類腳本還不能被稱爲「配置」。centos
而這類Tomcat、Nginx的安裝腳本大概是這樣:運維
apt-get install build-essential apt-get install libtool cd /usr/local/src wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz tar -zxvf pcre-8.37.tar.gz cd pcre-8.34 ./configure make make install .....
腳原本自:http://www.nginx.cn/install工具
運行這類腳本時,大腦裏的概念是:我要「安裝」Tomcat、Nginx。這類腳本被當成「動詞」存在。也就是說在面對一臺機器時,咱們的思惟方式是:我要寫一個if
來判斷Tomcat是否是已經安裝,若是沒有安裝,就是執行apt-get install,blabla……測試
可是,現實的自動化配置工具Ansible、Chef、Puppet告訴咱們,自動化配置的腳本更應當充當機器環境的狀態的描述文檔。也就是面對機器時,咱們應該使用「形容」詞。什麼意思呢?來幾個配置體會下:ui
Ansible:操作系統
# ./ansible-nginx/tasks/install_nginx.yml # 使用這個7-0.el7版本的yum包 - name: NGINX | Installing NGINX repo rpm yum: name: http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm # 當前機器的nginx的狀態應該是最新版本 - name: NGINX | Installing NGINX yum: name: nginx state: latest # 當前機器的nginx service的狀態應該是已經啓動的。至於如何確保nginx這個service是如何啓動的,咱們不須要關心。 - name: NGINX | Starting NGINX service: name: nginx state: started
配置來自:https://www.nginx.com/blog/installing-nginx-nginx-plus-ansible/
篇幅有限,咱們就只舉Ansible的例子。
相信不少人看了上面的例子,仍是一臉懵逼( ¯ □ ¯ ) ,下面來個現實例子。
現實中,咱們組裝一臺臺式電腦,你會這樣對裝機人員描述:我要4G內存,我要1T的SSD等等;而不是:我打開機箱,找到內存插槽,將4G內存插上,再把1T的SSD插入機架,接着把線接好 blabla。
咱們做爲需求方時,咱們只須要描述需求。做爲實現方時,咱們須要根據需求執行相應的動做。
而配置更像是一份對目標機器(不論多少)的狀態需求,咱們做爲需求方,只要在配置上寫清楚目標機器的狀態,至於這些狀態最終是怎麼達到的,由Ansible、Chef、Puppet這類自動化配置工具(實現方)實現。
也就是說,配置這個概念幫助咱們程序員、運維人員更容易站在需求方的角色去思考問題,而不是實現方。
問題來了?那有什麼用呢。
**配置解放了咱們的雙手,使咱們有更多的時間去思考更高層的問題。**這是最大的好處。
其它好處還有:
在現實中,對於「自動化」,我聽過最多的話是:咱們機器才3臺,沒有必要使用這些自動化配置工具。我以爲這不能成爲不自動化配置的藉口,緣由有:
這些問題,在我身邊或多或少的發生了。我聽得最多的也是:自動化配置解決了什麼業務問題嘛,技術是爲了業務服務的。我想說:前人犯的錯,咱們爲何又犯一次?因此,我會一開始就自動化。
在2012年,美暴雨致亞馬遜數據中心斷電 Netflix等中斷,Instagram也是其中受害者,看看他們的總結,Instagram這個月就5歲了,創始人跟你說說它都經歷了哪些大事兒 [來自虎嗅網]:
另外,咱們有時也須要扮演實現方,由於自動化配置工具沒法知足需求,就須要本身的寫工具的插件,更甚至實現本身的自動化配置工具。
這是個人我的觀點,歡迎反駁。