關(guān)于此書

作者:Viktor Farcic 目前是CloudBees的資深顧問,CloudBees是專業(yè)提供Jenkins企業(yè)版產(chǎn)品和服務(wù)的公司。他是一名資深的程序員,目前最喜歡的語言是Scala和JavaScript。他之前還寫過另外一本書《Test-Driven Java Development》
本書的封面如下,夠黑暗,夠簡潔。

本書的實(shí)體書非常重,很大很厚,內(nèi)容則是更加的黑暗和強(qiáng)大。在美國亞馬遜上的搜索排名比較靠前,搜DevOps,它出現(xiàn)在第四位。它是今年2月份在亞馬遜上架。本書的評論不多只有8條,可是大家不約而同的都給出了5星的評價(jià);可見老外蓋樓的水平也都很專業(yè)。
篇章結(jié)構(gòu)
我們先看下本書每一章的標(biāo)題,隨后我會按章節(jié)寫出我的讀書筆記。
- DevOps概念
- 實(shí)踐的突破:持續(xù)交付,微服務(wù)和容器
- 系統(tǒng)架構(gòu)
- 用Vagrant和Docker配置開發(fā)環(huán)境
- 實(shí)施部署流水線:初始化階段
- Dcoker世界里的配置管理
- 實(shí)施部署流水線:中間階段
- 服務(wù)發(fā)現(xiàn):分布式服務(wù)的關(guān)鍵
- 代理服務(wù)
- 實(shí)施部署流水線:后期階段
- 自動化實(shí)施部署流水線
- 持續(xù)集成/持續(xù)和部署工具
- 藍(lán)綠部署
- 群集和服務(wù)擴(kuò)展
- 自愈系統(tǒng)
- 集中化的日志和監(jiān)控
本書并不長,一共就396頁,我曾經(jīng)在火車上一下午看了50頁;由于信息量大,邏輯嚴(yán)密,確實(shí)有腦裂的感覺。本系列文章會按照我的閱讀進(jìn)度,來持續(xù)為大家通過讀書筆記的方式,分享本書的干貨和營養(yǎng)。當(dāng)然,您最后去購買中文版實(shí)體書肯定是最好的。我的閱讀沒法代替您自己的理解力和判斷力。讀書筆記的作用對我來說是回顧和記錄為主,其中對書籍評論部分請自行決定是否吸收。
第一章 DevOps概念
作者通過對兩類項(xiàng)目經(jīng)歷的對比來描述了微服務(wù)架構(gòu)的潛在價(jià)值和優(yōu)勢。這兩種項(xiàng)目類型分別是:1)新生的從無到有開發(fā)的項(xiàng)目;2)需要和已有系統(tǒng)對接的,與老舊系統(tǒng)有關(guān)的延伸的,用瀑布式開發(fā)模式和運(yùn)維的項(xiàng)目。
前者的優(yōu)勢:可以使用最新的技術(shù),在系統(tǒng)的不同服務(wù)選擇最佳的語言和開發(fā)堆棧。一個(gè)錯(cuò)誤的設(shè)計(jì)或者模塊可以推倒重來的代價(jià)按周計(jì)算。
后者的痛點(diǎn):必須考慮和已有系統(tǒng)的對接,無法嘗試新生技術(shù)和事物,技術(shù)創(chuàng)新被完全壓制;系統(tǒng)設(shè)計(jì)和發(fā)布的失誤導(dǎo)致的代價(jià)是巨大的。
傳統(tǒng)的軟件開發(fā)方式下,系統(tǒng)集成測試被放在最后階段。把不同團(tuán)隊(duì)經(jīng)過數(shù)月開發(fā)的成果集成在一起的時(shí)候,才是開發(fā)人員的噩夢的開始。各種返工、需求重定義像災(zāi)難一樣不可避免地頻繁發(fā)生。從這些血淋漓的經(jīng)驗(yàn)教訓(xùn)中作者提出了CI/CD的必要性和價(jià)值。CI/CD往往被認(rèn)為是Ops團(tuán)隊(duì)的任務(wù),而不關(guān)Dev人員什么事。但是對于Dev人員來說,如果還沒有入手和使用CI工具和自動化測試框架,這些欠下的技術(shù)債早晚還是要還的。你有木有半夜被Ops從床上捉起來去生產(chǎn)系統(tǒng)里面排bug的經(jīng)歷?有木有留下心理陰影?
CI/CD的操作流程和實(shí)踐其實(shí)是要把所有可能的坑都提前踩一遍,建立以天、小時(shí)、甚至分鐘的快速反饋機(jī)制。它需要影響和關(guān)聯(lián)到系統(tǒng)開發(fā)和交付的所有環(huán)節(jié)中,從架構(gòu)設(shè)計(jì)到測試,研發(fā)和運(yùn)維人員每天都需要關(guān)注的是管理和業(yè)務(wù)需求是否滿足。
因此:整體思維,系統(tǒng)性思維重要。
談?wù)劶軜?gòu),作者做了一個(gè)形象的比喻:由很大的團(tuán)隊(duì)多年開發(fā)出的單體應(yīng)用,不加充分測試,緊耦合,技術(shù)選擇陳舊而保守。去給這樣的系統(tǒng)做瘦身和優(yōu)化,就像是企圖把一個(gè)八十歲的老太太再變成為小姑涼一樣的困難。所有的優(yōu)化改造和升級都是無力回天的。作者對微服務(wù)架構(gòu)的定義是:把系統(tǒng)構(gòu)造成很多小的獨(dú)立的服務(wù),它們能被多個(gè)小團(tuán)隊(duì)維護(hù),任何程序猿對每個(gè)服務(wù)的代碼都能秒懂。微服務(wù)可以被任意改變開發(fā)框架、語言、數(shù)據(jù)庫;而不會影響到其它系統(tǒng)。可以被獨(dú)立的部署。我想很多人都在探求微服務(wù)應(yīng)該切分多大和多??;我想微服務(wù)的服務(wù)并不關(guān)乎大小,而在乎其功能切分的合理性,微服務(wù)的總數(shù)與維護(hù)團(tuán)隊(duì)人數(shù)的匹配。
作者提出了程序猿所使用的共享庫是緊耦合的陷阱,會拖慢系統(tǒng)實(shí)施的速度。標(biāo)準(zhǔn)化服務(wù)接口也是創(chuàng)新的隱形殺手。這些單體應(yīng)用經(jīng)常會出的錯(cuò),微服務(wù)也可能會有,而且其后果可能是所有錯(cuò)誤相乘的影響度。
從這里我們可以看出微服務(wù)的特點(diǎn)、切分、構(gòu)建原則和可能的問題。只有清晰認(rèn)識和定位它,才能保障在實(shí)踐過程中能夠收獲它的優(yōu)勢和好處。
談?wù)劜渴穑悍?wù)部署的對象是一堆Jar,WAR,DLL和其它任何程序代碼的輸出制品。定位那些要部署在舊服務(wù)器上,那些在新服務(wù)器上困難重重。所有服務(wù)器有差異性,生產(chǎn)環(huán)境和準(zhǔn)生產(chǎn)環(huán)境和開發(fā)環(huán)境有天然的差異性。用虛擬機(jī)可以保證一定的一致性,可是對于每一個(gè)運(yùn)行了一段時(shí)間的虛擬機(jī),誰也無法回溯它完整的手工系統(tǒng)配置和變更過程。系統(tǒng)理想配置狀態(tài)和現(xiàn)實(shí)狀態(tài)的差異性是由于時(shí)間積累導(dǎo)致的。除非自動化的工具和流程來代替手工的配置操作,才能保證服務(wù)部署和更新的成功率。我們很難把每個(gè)子服務(wù)都部署在不同的VM上,那樣做會導(dǎo)致虛擬機(jī)的泛濫,VM的管理同樣是問題。最后總結(jié)到:immutable server is good idea. 可以理解為:不可變服務(wù)/服務(wù)器。而我們已有的工具是無法支持它的部署的。
談?wù)劸幣牛簜鹘y(tǒng)的服務(wù)配置/編排工具如Puppet和Chef,如果是手工開發(fā)、維護(hù)和運(yùn)作這些腳本,而沒有系統(tǒng)性思考的話,基本上也是一個(gè)悲劇的噩夢的結(jié)果。這些編排工具也定性為:比沒啥都沒有要好的東東。
部署流水線的正途究竟在哪? 本書的標(biāo)題是工具集,因此作者在本章最后隆重推出了夢幻工具集組合。
Ansible:替代Puppe和Chef之類的工具。
Docker:替代緩慢的虛擬機(jī),它是推薦的創(chuàng)建不可變(immutable)部署的工具。
服務(wù)發(fā)現(xiàn):使用Swarm,Kubernets和Mesos/DCOS都可以。
作者提出微服務(wù)正在已緩慢的速度被應(yīng)用于構(gòu)架大型的系統(tǒng),還需要涉及的工具包括:CoreOS、etcd,Consul,F(xiàn)leet,Mesos,Rocket和其它的。
這一章基本上以作者對傳統(tǒng)應(yīng)用系統(tǒng)開發(fā)運(yùn)維缺陷和弱點(diǎn)的吐槽,作者槽點(diǎn)總結(jié)的字字珠璣,沒有廢話,我也是非常認(rèn)同。其中對微服務(wù)、DevOps概念和CI/CD的定位也非常到位。并且對應(yīng)到了軟件開發(fā)、架構(gòu)設(shè)計(jì)和系統(tǒng)交付的全生命周期場景中。此作者完全是實(shí)踐型,結(jié)尾亮出了十八班兵器;指出好戲在后面,把所有理論都展示出來,讓讀者通過跑通本書的測試代碼才是真本領(lǐng)。
結(jié)尾
本書第一章結(jié)尾作者引用了黑客帝國里Morpheus的一句話,讓我們共勉之。

This is your last chance. After this, there is no turning back. You take the blue pill - the story ends, you wake up in your bed and believe whatever you want to believe. You take the red pill - you stay in Wonderland and I show you how deep the rabbit-hole goes.
寫完此筆記之后,我的感覺是本書寫的都是干貨,它幫我梳理了思路,再次回顧了舊社會的苦難;而我們站在現(xiàn)在的時(shí)間點(diǎn)上看,我只想說:親該吃藥了,記得吃下那顆紅色的藥丸。