原創(chuàng):?萬(wàn)金?DevOps時(shí)代?2017-11-09 估計(jì)閱讀時(shí)間18分鐘
由《2017年DevOpsDays上?!吠葜v整理

作者 | 萬(wàn)金
編輯 | 濟(jì)萌
作者簡(jiǎn)介
萬(wàn)金
ThoughtWorks 高級(jí)顧問(wèn)
15年知名外企與中國(guó)企業(yè)的IT從業(yè)經(jīng)驗(yàn),包括IBM,華為。具有8年云計(jì)算相關(guān)經(jīng)驗(yàn),多系統(tǒng)的研發(fā)和運(yùn)維經(jīng)驗(yàn),熟練掌握敏捷和DevOps方法論和實(shí)踐,具有軟件研發(fā)生命周期工具與流程改進(jìn)豐富經(jīng)驗(yàn)?!禗evOps實(shí)施手冊(cè):在多級(jí)IT企業(yè)中使用DevOps》譯者
序言
在軟件吞噬時(shí)間的時(shí)代,在IT基礎(chǔ)設(shè)施多樣性與分布式趨勢(shì)中,部署的復(fù)雜性與規(guī)模日益增加,而大部分的軟件崩潰都發(fā)生在部署過(guò)程中。目前提高部署效率與穩(wěn)定性成為了一個(gè)嚴(yán)峻的挑戰(zhàn)。本文討論在原生云應(yīng)用的場(chǎng)景下如何將軟件高效穩(wěn)定的發(fā)布到用戶手中。在本文的末尾會(huì)暢想智能運(yùn)維給軟件發(fā)布與運(yùn)維工作帶來(lái)的新能力。
本文的四個(gè)部分:
數(shù)字化轉(zhuǎn)型的趨勢(shì)與挑戰(zhàn);
軟件發(fā)布的各種坑;
云原生應(yīng)用如何發(fā)布軟件;
下一站智能運(yùn)維。
(一)數(shù)字化轉(zhuǎn)型的趨勢(shì)與挑戰(zhàn)
1.1.分工協(xié)作提高效能達(dá)到增長(zhǎng)極限
如果說(shuō)到DevOps的精益,就不得不說(shuō)亨利?福特將流水線引入到汽車生產(chǎn)當(dāng)中。為什么要說(shuō)流水線呢?我們?cè)趥鹘y(tǒng)企業(yè)轉(zhuǎn)型中所使用的成功經(jīng)驗(yàn),在現(xiàn)代數(shù)字化轉(zhuǎn)型的環(huán)境里沒(méi)有辦法繼續(xù)復(fù)制成功。
原因主要有以下幾點(diǎn):
第一,單一產(chǎn)品的競(jìng)爭(zhēng)優(yōu)勢(shì)被行業(yè)外顛覆:傳統(tǒng)汽車產(chǎn)品積累了多年的競(jìng)爭(zhēng)優(yōu)勢(shì),在電動(dòng)車出現(xiàn)后被顛覆。比如特斯拉,不使用機(jī)械引擎,競(jìng)爭(zhēng)優(yōu)勢(shì)不再可持續(xù)。
第二,低價(jià)高質(zhì)不再是客戶選擇的關(guān)鍵因素:消費(fèi)水平提高和體驗(yàn)差異導(dǎo)致成本競(jìng)爭(zhēng)不再是競(jìng)爭(zhēng)的主要因素。相同的東西只要便宜一分錢都可能造成市場(chǎng)份額的巨大差距。如果一款手機(jī)賣十塊錢會(huì)有市場(chǎng)嗎?在同學(xué)聚會(huì)的場(chǎng)合你會(huì)用十塊錢的手機(jī)拍照發(fā)朋友圈嗎?這種賦予商品的個(gè)性標(biāo)簽屬性,使得價(jià)格為主要競(jìng)爭(zhēng)手段的情況已經(jīng)不復(fù)存在了。
第三,人的延伸價(jià)值觀局限(麥克盧漢筆下的所有商品都會(huì)以人的延伸的能力來(lái)衡量?jī)r(jià)值,而人類的能力種類是有限的,因此商品的總量也有局限的)?,F(xiàn)在的主流產(chǎn)品,可以參考結(jié)婚時(shí)候需要的幾大件商品?,F(xiàn)在的住房里需要的大家電數(shù)量都是有限的(電視,冰箱,空調(diào),洗衣機(jī)),并且每一個(gè)電器品類的市場(chǎng)容量都是有限的。世界就就這么大,人口就這么多,市場(chǎng)總量也是有限的。如果業(yè)務(wù)已經(jīng)達(dá)到飽和,還有什么辦法可以擴(kuò)大市場(chǎng)?一個(gè)企業(yè)如果沒(méi)有增長(zhǎng)是個(gè)非常大的問(wèn)題,如何來(lái)刺激業(yè)務(wù)持續(xù)增長(zhǎng)成為新的挑戰(zhàn)?
1.2.追求個(gè)性化用戶體驗(yàn)帶來(lái)新的增長(zhǎng)
怎么解決市場(chǎng)增長(zhǎng)乏力的問(wèn)題?答案是追求個(gè)性化的體驗(yàn),因?yàn)槿说捏w驗(yàn)有無(wú)窮多種。女生都有這樣的感受,衣柜里永遠(yuǎn)都缺那么一件衣服,就是你明天要穿的那一件衣服。我們買衣服并不是買紡織品這個(gè)產(chǎn)品,我們買的是穿衣服的體驗(yàn),或者我們買的就是我有很多衣服的感覺(jué)。
硬件和軟件的分離就提升了軟件的使用體驗(yàn)。以前IBM的郵件軟件使用體驗(yàn)不是很好,作為IBM的員工自己也說(shuō) Lotus notes 郵件軟件使用體驗(yàn)不是很好。這個(gè)是沒(méi)辦法的事情,在市場(chǎng)充分競(jìng)爭(zhēng)的情況下,一個(gè)有著優(yōu)秀硬件基因的公司很難同時(shí)把軟件做到最好。展開(kāi)來(lái)說(shuō),一個(gè)公司很難讓服務(wù)于消費(fèi)者的終端手機(jī)生產(chǎn)與銷售業(yè)務(wù)做得很好;同時(shí)也在服務(wù)于全球前50的運(yùn)營(yíng)商的電信設(shè)備市場(chǎng)也做得很好,并且2B和2C同時(shí)成功。這樣的的成功非常少見(jiàn),即使是諾基亞做到的也只是暫時(shí)的成功。
服務(wù)與產(chǎn)品的分離,也提升了使用體驗(yàn)。就是說(shuō),做產(chǎn)品但不把這個(gè)產(chǎn)品直接賣出去,而只把產(chǎn)品提供的服務(wù)租出去。比如亞馬遜的云計(jì)算,亞馬遜擁有這個(gè)云計(jì)算的平臺(tái),但是只以云計(jì)算的方式給客戶提供服務(wù)。對(duì)于賣硬件服務(wù)器的廠商IBM、戴爾、惠普來(lái)說(shuō)亞馬遜賣的服務(wù)是不一樣的體驗(yàn),有不一樣的體驗(yàn)就帶來(lái)新的市場(chǎng)。
業(yè)務(wù)與實(shí)現(xiàn)分離,提供了比內(nèi)部所提供的服務(wù)更專業(yè),更便捷。這樣就有了IT外包市場(chǎng),一個(gè)企業(yè)如果生產(chǎn)一個(gè)產(chǎn)品或服務(wù)的成本高于采購(gòu)成本就會(huì)采購(gòu)該產(chǎn)品或服務(wù)。只有當(dāng)自己生產(chǎn)一個(gè)產(chǎn)品或服務(wù)低于采購(gòu)成本才會(huì)自己生產(chǎn)該產(chǎn)品或服務(wù),甚至向市場(chǎng)提供該產(chǎn)品或服務(wù)。
使用與擁有的分離就是共享經(jīng)濟(jì)。由于維護(hù)一輛自行車比較麻煩(存放,維修,防盜),人們可能不會(huì)買一個(gè)自行車,但可以通過(guò)刷一下手機(jī)直接得到自行車交通服務(wù)。消費(fèi)者買的是這種交通服務(wù),把存放,維修,防盜的事情交給共享單車公司。
我們說(shuō)軟件架構(gòu)來(lái)自于建筑的概念,但是軟件研發(fā)的過(guò)程和建筑施工過(guò)程有著非常迥異的地方。對(duì)于建筑來(lái)說(shuō),工程師有了圖紙后就確定完工后的樣子,即使換一個(gè)開(kāi)發(fā)商結(jié)果也沒(méi)有明顯區(qū)別。而對(duì)于軟件研發(fā)過(guò)程來(lái)說(shuō),我更愿意類比原型車的開(kāi)發(fā)。當(dāng)一個(gè)原型車設(shè)計(jì)完成,到買到這個(gè)原型車的量產(chǎn)車型,你會(huì)發(fā)現(xiàn)它們之間有很大的差別。這就是軟件的特點(diǎn)。即使按照軟件設(shè)白紙黑字簽下合同,當(dāng)拿到軟件發(fā)布時(shí)使用時(shí)候,由于技術(shù)與業(yè)務(wù)的不確定性,實(shí)際軟件與設(shè)計(jì)階段差異很大。
總而言之,企業(yè)把一部分業(yè)務(wù)外包出去,滿足個(gè)性化用戶體驗(yàn),在這個(gè)過(guò)程中產(chǎn)品/服務(wù)價(jià)值獲得了提升。
1.3.傳統(tǒng)行業(yè)面臨數(shù)字化轉(zhuǎn)型的兩個(gè)挑戰(zhàn)
數(shù)字化轉(zhuǎn)型對(duì)傳統(tǒng)企業(yè)會(huì)帶來(lái)哪些挑戰(zhàn)?以下兩點(diǎn)揭示了答案所在:
第一點(diǎn),從內(nèi)部看是通過(guò)互聯(lián)網(wǎng)的工具提升內(nèi)部協(xié)作效率。比如說(shuō):減少溝通的成本,并進(jìn)行可視化以及各部門(mén)之間的信息共享和協(xié)作,提高這種協(xié)作的效率。
第二點(diǎn),如何把握用戶需求。這分為兩點(diǎn):首先是精確。在不同場(chǎng)景下人們需要的產(chǎn)品是不一樣的。比如:早上起來(lái)打開(kāi)微信我可能看誰(shuí)更新了什么東西,而晚上可能要看還有什么事情沒(méi)有做完。一個(gè)產(chǎn)品在不同的場(chǎng)景、時(shí)間、地點(diǎn)、環(huán)境下所需的特性是不同的,這就是需求的準(zhǔn)確。其次是準(zhǔn)確。其實(shí)很多時(shí)候?yàn)槭裁次覀兊目蛻舳疾恢雷约阂裁矗恳驗(yàn)橐话愕耐ㄓ玫男枨笸耆粷M足了。這是一個(gè)生產(chǎn)過(guò)剩的時(shí)代,你要挖掘客戶的需求,通過(guò)不斷與客戶溝通,去了解客戶心里說(shuō)不出的潛在需求,然后通過(guò)跟他不斷地互動(dòng),達(dá)到他在那個(gè)時(shí)間那個(gè)場(chǎng)景下相對(duì)可以達(dá)到的服務(wù)。
(二)軟件發(fā)布的各種坑
本章節(jié)主要是介紹一下軟件發(fā)布過(guò)程中各種坑。上圖可以簡(jiǎn)化地去看第一塊,即:Codebase。所有的代碼和分支都在代碼庫(kù)中。
第一個(gè)動(dòng)作是Build(構(gòu)建),研發(fā)人員工作最終結(jié)果是以軟件包的形式交付一個(gè)可以運(yùn)行的軟件環(huán)境。
第二個(gè)是Verify(測(cè)試),測(cè)試人員所有的工作都是在眾多可運(yùn)行的軟件中找到達(dá)到發(fā)布質(zhì)量的軟件。
最后是將軟件發(fā)布到生產(chǎn)環(huán)境中去。
上面各種復(fù)雜的分支、構(gòu)建、和可以測(cè)試的環(huán)境,下面是研發(fā),測(cè)試,和發(fā)布,只有達(dá)到質(zhì)量要求才能進(jìn)入下一個(gè)環(huán)節(jié)。這個(gè)過(guò)程里面其實(shí)有非常多的手動(dòng)的工作,就導(dǎo)致了在研發(fā)過(guò)程中很多低效和沒(méi)有必要的動(dòng)作,或者不產(chǎn)生價(jià)值的動(dòng)作。怎么去識(shí)別,如何避免研發(fā)過(guò)程中這些復(fù)雜的過(guò)程不會(huì)影響最后的Release(發(fā)布)?
那么對(duì)于上述過(guò)程,我們可以簡(jiǎn)單的理解為以下三點(diǎn)內(nèi)容:
1. 軟件編譯復(fù)雜:
? 軟件編譯第三方依賴關(guān)系復(fù)雜;
? 多技術(shù)棧解決方案復(fù)雜性高;
? 多分支并行開(kāi)發(fā)策略復(fù)雜;
2. 測(cè)試經(jīng)歷軟件測(cè)試環(huán)境類生產(chǎn)境等遷移:
? 測(cè)試環(huán)境搭建;
? 測(cè)試數(shù)據(jù)準(zhǔn)備;
? 界面測(cè)試無(wú)法自動(dòng)化;
3. 軟件發(fā)布過(guò)程無(wú)法保證不出問(wèn)題:
? 發(fā)布流程與過(guò)程時(shí)間長(zhǎng);
? 手動(dòng)或配置過(guò)程導(dǎo)致發(fā)布失?。?/p>
打個(gè)比方:原來(lái)研發(fā)幾個(gè)月的產(chǎn)品,最后上線的話可能要持續(xù)兩三天上線(周末發(fā)布)。這就像看一個(gè)美劇連續(xù)?。ㄑ邪l(fā)),我看了一年的連續(xù)劇到年底要出一個(gè)電影版(發(fā)布),在最后的電影版里哪些環(huán)節(jié)沒(méi)有做,哪些環(huán)節(jié)鋪墊的不夠好,都會(huì)在劇場(chǎng)版里發(fā)現(xiàn)問(wèn)題。如此復(fù)雜的過(guò)程要在短的時(shí)間內(nèi)重現(xiàn)一遍,這就是發(fā)布容易出現(xiàn)問(wèn)題的根源。所以一個(gè)版本研發(fā)的功能越多,最后部署的風(fēng)險(xiǎn)就越大。發(fā)布過(guò)程就是把手動(dòng)的過(guò)程全部重新再現(xiàn)一遍,所以非常容易出錯(cuò)。
(三)云原生應(yīng)用如何發(fā)布軟件
3.1.Application Pass項(xiàng)目背景與挑戰(zhàn)
首先,說(shuō)一下Application Paas的項(xiàng)目背景。我公司的客戶是歐洲的汽車制造企業(yè)。其中一部分的IT項(xiàng)目是外包給了供應(yīng)商,這樣就會(huì)有很多的問(wèn)題。因?yàn)檫@個(gè)外包做這個(gè)項(xiàng)目,那個(gè)外包做那個(gè)項(xiàng)目;所以不能有效把過(guò)往的項(xiàng)目整合起來(lái)形成合力。
客戶的痛點(diǎn)是,缺乏新技術(shù)新平臺(tái)的運(yùn)營(yíng)能力。隨著項(xiàng)目的增多,管理成本也會(huì)增加,管理一個(gè)供應(yīng)商和管理十個(gè)、一百個(gè)帶來(lái)的復(fù)雜性差異是巨大的所以成本奇高。在全球上線多個(gè)供應(yīng)商研發(fā)的不同銷售系統(tǒng),其運(yùn)維復(fù)雜程度可想而知,同時(shí)也很難實(shí)現(xiàn)功能的快速開(kāi)發(fā)和上線。
最后就是之前說(shuō)到轉(zhuǎn)型的最后一個(gè)挑戰(zhàn):我們?nèi)绾握莆兆罱K客戶的需求。我怎么和客戶互動(dòng)?我們不是通過(guò)人工發(fā)放調(diào)查問(wèn)卷,而是要通過(guò)平臺(tái)的方式收集相關(guān)信息。這有利于研發(fā)出符合多樣化的用戶需求,并且成本可接受的產(chǎn)品。
3.2.DevOps軟件研發(fā)實(shí)踐
對(duì)于下DevOps實(shí)踐來(lái)說(shuō),其中最主要的實(shí)踐是要做自動(dòng)化的部署(降低頻繁部署的成本)。首先要建立信任,并提供可見(jiàn)性。運(yùn)維人員收到一個(gè)版本,卻不知道是新增的功能還是只是一個(gè)補(bǔ)丁。如何能讓運(yùn)維人員安心的部署到生產(chǎn)環(huán)境中去呢?通過(guò)開(kāi)放監(jiān)控給研發(fā)人員可以提高修改缺陷的速度的,最后是讓大家的上下文一致,讓研發(fā)和運(yùn)維工作在同一個(gè)上下文中。通過(guò)相同的考核指標(biāo)要求研發(fā)與運(yùn)維人員(比如可用性指標(biāo))來(lái)達(dá)到相互配合相互信任的目的。
然后是文化。首先要尊重工程師的文化,要有責(zé)任共擔(dān)。一些創(chuàng)業(yè)的企業(yè)主說(shuō)遇到的最大的問(wèn)題就是:招聘的研發(fā)人員只管開(kāi)發(fā)代碼,上線的穩(wěn)定性和他們無(wú)關(guān),這個(gè)就沒(méi)辦法玩下去了。最后就是試錯(cuò),因?yàn)闆](méi)有人可以保證軟件轉(zhuǎn)換一個(gè)環(huán)境就一定好用。我們?nèi)绾螐腻e(cuò)誤當(dāng)中學(xué)習(xí),或者說(shuō)可控的失敗。在不會(huì)造成很大風(fēng)險(xiǎn)的錯(cuò)誤當(dāng)中學(xué)習(xí),讓我們的軟件從長(zhǎng)期的角度來(lái)看既具備功能快速上線能力又有高可用性,這就是我們最終的目標(biāo)了。
3.3.部署與功能分離:從項(xiàng)目到平臺(tái)
本小節(jié)主要一下思路:
平臺(tái)部署能力與項(xiàng)目功能的分離。開(kāi)始我們講了很多的分離,如軟硬件的分離。而現(xiàn)在來(lái)說(shuō)的是部署與功能的分離。比如:CRM軟件。為什么不能把軟件的部署抽取出通用的部署能力,并通過(guò)不斷的迭代來(lái)升級(jí)平臺(tái)的部署能力呢?滿足平臺(tái)上每一個(gè)項(xiàng)目的自動(dòng)化部署,這樣就提升部署的體驗(yàn)。
對(duì)于研發(fā)和運(yùn)維來(lái)說(shuō),這種要求的體驗(yàn)是不一樣的。因?yàn)閷?duì)于研發(fā)來(lái)說(shuō),要具有應(yīng)對(duì)變化的彈性和適應(yīng)性。在金融行業(yè)里有很多的規(guī)則需要滿足,流程需要彈性,不能違反紅線規(guī)則。每個(gè)研發(fā)的檢查點(diǎn),轉(zhuǎn)到下一個(gè)流程規(guī)則是什么,都需要要滿足。運(yùn)維在生產(chǎn)環(huán)境需要穩(wěn)定性,又要隨時(shí)可以上線新功能,對(duì)于研發(fā)的適應(yīng)性和運(yùn)維穩(wěn)定性要求都需要滿足。
3.4.Dev和Ops需要兩個(gè)PaaS平臺(tái)
就如上圖所示的一樣。對(duì)于Dev和Ops來(lái)說(shuō),他們需要兩個(gè)PaaS平臺(tái):Application PaaS平臺(tái)和Production PaaS平臺(tái)。一個(gè)負(fù)責(zé)適應(yīng)性一個(gè)負(fù)責(zé)穩(wěn)定性。
3.5.Application PaaS架構(gòu)
從Application PaaS的架構(gòu)的角度來(lái)講,底層是的資源層對(duì)接云計(jì)算資源層。在這上面,我們可以構(gòu)建兩層虛擬網(wǎng)絡(luò)。在研發(fā)虛擬網(wǎng)絡(luò)中的里,我們有Web層和App層,其實(shí)就是對(duì)Jenkins做封裝。在App層有代碼管理,自動(dòng)構(gòu)建,環(huán)境管理,軟件包管理,發(fā)布管理,部署管理的核心能力工具。
這么多的核心功能,通過(guò)Web層的代碼流水線與用戶互動(dòng)。核心能力在下面,融合下面的核心能力,通過(guò)Web層定制來(lái)滿足客戶的多樣化的需求用以實(shí)現(xiàn)適應(yīng)性。為了保證生產(chǎn)環(huán)境穩(wěn)定,需要把研發(fā)和運(yùn)維要分開(kāi),前面是研發(fā)的PaaS,后面是運(yùn)維的PaaS。在運(yùn)維PaaS下面是監(jiān)控和洞察的核心能力。
3.6.開(kāi)源技術(shù)選型實(shí)現(xiàn)
我們公司的客戶還有一個(gè)需求就是不能被技術(shù)綁定;同時(shí)還要引入一些多樣性,在相同的團(tuán)隊(duì)使用不同的工具去完成任務(wù)。為了達(dá)到這種靈活性,我們可以選擇一些開(kāi)源軟件。這就是我們?cè)谧鲞@種咨詢的時(shí)候,會(huì)給客戶提供的可定制性,也是客戶對(duì)Thoughtworks的認(rèn)可的一個(gè)原因。
3.7.試驗(yàn)性發(fā)布-灰度發(fā)布關(guān)鍵環(huán)節(jié)
首先,說(shuō)一下灰度發(fā)布的定義。它是在從0到1平滑過(guò)渡的方式完成軟件發(fā)布,有點(diǎn)像藍(lán)綠部署,也有點(diǎn)像金絲雀發(fā)布,對(duì)客戶是有篩選的分流機(jī)制。最后可以達(dá)到讓我們?cè)诎踩沫h(huán)境下讓軟件發(fā)布的風(fēng)險(xiǎn)在可控的范圍內(nèi),這樣做不能保證不出錯(cuò),但是會(huì)把出錯(cuò)的影響降低到可控范圍內(nèi),并不會(huì)對(duì)生產(chǎn)環(huán)境的用戶造成影響。(灰度發(fā)布過(guò)程中是有真實(shí)用戶參與的)
對(duì)于灰度發(fā)布,有這樣的三個(gè)環(huán)節(jié):
應(yīng)用監(jiān)控?cái)?shù)據(jù);
用戶分流規(guī)則;
遞進(jìn)發(fā)布策略。
3.7.1.應(yīng)用監(jiān)控?cái)?shù)據(jù):Kibana應(yīng)用監(jiān)控
基于上節(jié),我們談一下監(jiān)控能力。使用Kibana的監(jiān)控能力,在不同的灰度發(fā)布階段有三個(gè)方面的監(jiān)控考量。
首先是功能測(cè)試階段。功能測(cè)試階段提交到生產(chǎn)環(huán)境的邊緣節(jié)點(diǎn)環(huán)境,但是沒(méi)有真實(shí)客戶上來(lái)。這個(gè)階段會(huì)監(jiān)控錯(cuò)誤請(qǐng)求的返回。比如我測(cè)試階段有沒(méi)有反回404這樣的錯(cuò)誤,沒(méi)有錯(cuò)誤的話我們就進(jìn)入下一個(gè)階段。
然后是兼容性測(cè)試。兼容性測(cè)試主要是測(cè)試接口是否有正確的返回結(jié)果。
最后在性能測(cè)試階段,對(duì)比新舊版本的性能延遲數(shù)據(jù)。如果不存在性能惡化的現(xiàn)象就可以全網(wǎng)上線了。
整個(gè)灰度發(fā)布過(guò)程從功能測(cè)試到兼容性測(cè)試,再到性能測(cè)試,在生產(chǎn)環(huán)境下逐步地升級(jí)擴(kuò)大范圍的過(guò)程,就是來(lái)保證在安全可控的前提下來(lái)做灰度發(fā)布,做到對(duì)客戶零影響。
3.7.2.用戶分流實(shí)現(xiàn):k8s邊緣節(jié)點(diǎn)(Edge Node)
對(duì)于用戶分流實(shí)現(xiàn)來(lái)說(shuō),我們要使用K8S邊緣節(jié)點(diǎn)的能力,用它作為生產(chǎn)環(huán)境持續(xù)交付的最終環(huán)境。有人會(huì)問(wèn):持續(xù)交付直接到生產(chǎn)環(huán)境中,那么你真的敢上線嗎?上線之后對(duì)客戶有影響怎么辦?解決辦法是:我們用前端的負(fù)載均衡把邊緣節(jié)點(diǎn)的用戶流量屏蔽掉,不會(huì)讓真實(shí)客戶進(jìn)來(lái)。這個(gè)實(shí)踐與之前的類生產(chǎn)環(huán)境是不同的,它真的是生產(chǎn)環(huán)境的服務(wù)器,配置完全一樣;但是區(qū)別是沒(méi)有真實(shí)客戶使用。
通過(guò)功能測(cè)試,性能測(cè)試環(huán)境,然后我們來(lái)一步步把最新版本升級(jí)到全網(wǎng)。首先邊緣節(jié)點(diǎn)環(huán)境用來(lái)做自動(dòng)化功能測(cè)試。通過(guò)了功測(cè)試后,在新版本和舊的版本共存的情況下測(cè)試兼容性的問(wèn)題,最后兼容性沒(méi)有問(wèn)題的話,就進(jìn)入下一步性能測(cè)試階段,直至全網(wǎng)發(fā)布
3.7.3.遞進(jìn)發(fā)布:Kubernetes滾動(dòng)升級(jí)
最后,本小節(jié)從總體解釋灰度發(fā)布的三個(gè)階段:
Phase-0 進(jìn)行功能測(cè)試,當(dāng)發(fā)布包通過(guò)持續(xù)交付測(cè)試環(huán)境的驗(yàn)證后,部署到生產(chǎn)環(huán)境的邊緣節(jié)點(diǎn)。配置發(fā)布包在生產(chǎn)環(huán)境下測(cè)試是否能正常工作,這是生產(chǎn)環(huán)境下安全地做持續(xù)交付的方式。
Phase-1我們來(lái)做兼容性的測(cè)試,要做數(shù)據(jù)的隔離。舉個(gè)失敗的例子,某個(gè)網(wǎng)站在做生產(chǎn)環(huán)境上的測(cè)試時(shí),真的產(chǎn)生了購(gòu)買兩百臺(tái)洗衣機(jī)的訂單,并且快遞員打電話要求收貨(收貨200臺(tái)洗衣機(jī),畫(huà)面太慘不忍睹了)
最后是性能沒(méi)問(wèn)題了,我就慢慢滾動(dòng)部署到全網(wǎng)環(huán)境了。
總結(jié)一下,灰度發(fā)布是什么?在生產(chǎn)環(huán)境最小范圍內(nèi)沒(méi)有真實(shí)用戶流量情況下,驗(yàn)證功能問(wèn)題(無(wú)客戶影響實(shí)現(xiàn)持續(xù)交付);以及在較小的范圍內(nèi),驗(yàn)證兼容性和性能問(wèn)題(少量用戶SLA可控);同時(shí)是在控制范圍內(nèi)保障用戶體驗(yàn)。那么在驗(yàn)證功能,兼容性和性能之后我們?cè)偃W(wǎng)發(fā)布。這樣就大大降低了風(fēng)險(xiǎn),提高發(fā)布質(zhì)量。
而以前的傳統(tǒng)發(fā)布過(guò)程是非黑即白的過(guò)程。如果功能,兼容性和性能出現(xiàn)問(wèn)題會(huì)直接導(dǎo)致對(duì)所有用戶造成影響,造成嚴(yán)重的后果。那么通過(guò)灰度發(fā)布方式把風(fēng)險(xiǎn)控制在可接受的范圍內(nèi),才是實(shí)踐落地的可行性方案。
3.8.通過(guò)平臺(tái)能力開(kāi)放,從單一產(chǎn)品競(jìng)爭(zhēng)走向生態(tài)競(jìng)爭(zhēng)
下圖講述的是:通過(guò)生態(tài),大家的合作來(lái)達(dá)到整體的價(jià)值提升。比如:有做平臺(tái)的公司,有做平臺(tái)上特定業(yè)務(wù)的公司,有去把握這種用戶需求銷售產(chǎn)品的公司。有了很多最終服務(wù)客戶的公司之后,反過(guò)來(lái)平臺(tái)也不斷發(fā)展壯大,同時(shí)用戶的體驗(yàn)也得到了提升。
為什么要有一個(gè)平臺(tái)?現(xiàn)在有很多開(kāi)源的或商業(yè)的技術(shù),但是多的技術(shù)能不能為你所用呢?答案是依靠簡(jiǎn)單的集成是不能滿足企業(yè)要求的。因?yàn)槠髽I(yè)有很多的限制條件,我們要把這些限制條件定義成平臺(tái)的流程和自動(dòng)化的過(guò)程。這樣平臺(tái)構(gòu)成了引入技術(shù)的能力,就是我們的第一個(gè)客戶挑戰(zhàn)。
有一次客戶對(duì)我說(shuō):我們不太擔(dān)心Thoughtwork的技術(shù)顧問(wèn)解決不了客戶的問(wèn)題,而是擔(dān)心當(dāng)顧問(wèn)完成工作后自己的外包員工技術(shù)水平搞不定這些新技術(shù),這才是客戶最擔(dān)心的問(wèn)題。那么很多客戶的普通員工或者外包人員如何掌握新技術(shù)呢?答案是通過(guò)平臺(tái)降低新技術(shù)推廣的難度(平臺(tái)封裝技術(shù)細(xì)節(jié),通過(guò)現(xiàn)有員工熟悉的流程平滑推廣新技術(shù))。
總之,通過(guò)Application Paas平臺(tái),公司內(nèi)部團(tuán)隊(duì)來(lái)控制業(yè)務(wù)的方向;然后,把業(yè)務(wù)的實(shí)現(xiàn)和交付外包給在這個(gè)平臺(tái)上的供應(yīng)商。這就提升了業(yè)務(wù)實(shí)現(xiàn)和交付的體驗(yàn)。
舉一個(gè)小團(tuán)隊(duì)控制業(yè)務(wù)方向的例子。一家服裝企業(yè)”韓都衣舍“,負(fù)責(zé)設(shè)計(jì)團(tuán)隊(duì)只有三個(gè)人,一個(gè)負(fù)責(zé)廣告,一個(gè)負(fù)責(zé)設(shè)計(jì)服裝,一個(gè)負(fù)責(zé)后面的與制造平臺(tái)對(duì)接。這個(gè)團(tuán)隊(duì)如果能設(shè)計(jì)出爆款的話,一年幾百萬(wàn)的獎(jiǎng)金就拿到了。當(dāng)然你要有平臺(tái),在制造效率提升的前提下,才能來(lái)滿足服裝市場(chǎng)不斷化的多樣化的需求,以及用戶的精準(zhǔn)的需求。
再則,公司存在的意義是什么?公司存在的意義是:如果產(chǎn)品的生產(chǎn)成本低于購(gòu)買成本那就自己生產(chǎn);但是,如果采購(gòu)成本低于制造成本,那就采購(gòu),這就是公司存在的意義(一個(gè)公司不是什么都要自己做,而是做自己擅長(zhǎng)的產(chǎn)品其他的都外包出去)。比如說(shuō)Kubernetes,我需要對(duì)資源進(jìn)行調(diào)度,但是我們不能自己做出一個(gè)Kubernetes。因?yàn)槟鞘遣豢赡艿?,這是谷歌擅長(zhǎng)的事情,那么我們就外包出去。我們就做最核心的業(yè)務(wù),這是公司存在價(jià)值;你做的成本一定比別人低,這就是你存在的價(jià)值。
這是某國(guó)內(nèi)大型通訊公司公有云實(shí)驗(yàn)性發(fā)布的方案,在全球大概有二十多個(gè)數(shù)據(jù)中心,它最關(guān)鍵的實(shí)踐是包管理。而,我們之前講的都是在一個(gè)數(shù)據(jù)中心的內(nèi)網(wǎng)發(fā)布一個(gè)軟件。
在全球范圍如何實(shí)現(xiàn)灰度發(fā)布?首先是策略,也許在不同的地域里面業(yè)務(wù)都是不一樣的,那么軟件包也是不一樣的。這要有更高一個(gè)層次的考量,并不是做了灰度發(fā)布之后,就可以在一個(gè)數(shù)據(jù)中心或者在所有的數(shù)據(jù)中心上線。這是需要有一個(gè)統(tǒng)一的考量,也是全球化帶來(lái)的改變。把業(yè)務(wù)差異從應(yīng)用邏輯中分離到數(shù)據(jù)中去,就可以實(shí)現(xiàn)應(yīng)用的全球灰度發(fā)布了。
(四)下一站智能運(yùn)維
最后,在本節(jié)讓我們暢想一下智能運(yùn)維的未來(lái)。當(dāng)說(shuō)到智能的時(shí)候,我們談的到底是什么呢?在丹尼爾?卡內(nèi)曼的著作《思考快與慢》中提到了一個(gè)概念,我們的大腦有快與慢兩種作決定的方式。
這兩種思考系統(tǒng):一個(gè)是不需要思考的;比如我和一個(gè)人交談,很容易就可以感覺(jué)到對(duì)方的情感的變化——這是人情感的感知,不需要思考就知道??措娪安恍枰伎季椭肋@個(gè)電影是不是一個(gè)爛電影,這就是人的經(jīng)驗(yàn),不需要思考就能快速得出結(jié)論的思考系統(tǒng)。目前計(jì)算機(jī)并不擅長(zhǎng)這樣思考系統(tǒng),因?yàn)橛?jì)算機(jī)的計(jì)算力和成本很難滿足這樣的系統(tǒng)。
第二種是需要邏輯思考。比如:查看監(jiān)控?cái)?shù)據(jù),找到故障記錄,分析原因和關(guān)聯(lián)性,最后解決問(wèn)題。這個(gè)過(guò)程非常慢,但非常有效。它的正確率也很高,缺點(diǎn)是這樣思考大腦會(huì)消耗大量能量。對(duì)于人工智能來(lái)說(shuō)第二種思考系統(tǒng)正是計(jì)算機(jī)所擅長(zhǎng)的。我們從第二種思考系統(tǒng)方式以及從數(shù)據(jù)的計(jì)算、數(shù)據(jù)關(guān)聯(lián)分析、系統(tǒng)的相關(guān)性入手解決問(wèn)題。
這里需要闡述一個(gè)問(wèn)題:牛頓發(fā)現(xiàn)了三大定律,通過(guò)這三大定律推論得出物質(zhì)運(yùn)行的規(guī)律。但是,問(wèn)題在于從科學(xué)研發(fā)到改變生活的周期和成本都是非常巨大的。就像沃爾瑪要規(guī)劃如何擺放貨物就有一個(gè)很好的實(shí)踐,啤酒和尿不濕只要放在一起就能賣得很好。還有像陰天時(shí)候甜品和蛋糕就賣得好。對(duì)于這些關(guān)聯(lián)性不需要知道科學(xué)原理,只要按照這個(gè)結(jié)果去做就可以提高我們的銷售額。那我為什么要知道原理呢?也許當(dāng)了解了原理之后,就像那個(gè)啤酒和尿不濕的銷售關(guān)聯(lián)性在中國(guó)已經(jīng)失效了,中國(guó)的父親在買尿不濕的時(shí)候不會(huì)去購(gòu)買啤酒。那么,一般情況下,掌握關(guān)聯(lián)性并運(yùn)用到實(shí)際的工作中就能獲得收益。
4.1.軟件研發(fā)流程的數(shù)據(jù)化和個(gè)體在線化
軟件在研發(fā)過(guò)程當(dāng)中會(huì)產(chǎn)生很多的數(shù)據(jù),比如需求實(shí)現(xiàn)的時(shí)長(zhǎng)、發(fā)布頻率、部署前置時(shí)間,穩(wěn)定性,部署成功率、應(yīng)用錯(cuò)誤率等。上圖是業(yè)務(wù)相關(guān)的數(shù)據(jù),比如性能、用戶體驗(yàn)、用戶增長(zhǎng)、用戶滿意度,轉(zhuǎn)化率、流失率等。如果我們將上述這些串聯(lián)起來(lái),比如說(shuō)有一個(gè)客戶想花三千萬(wàn)獲取新客戶,如果性能不好的話,流失率就非常高(提示:頁(yè)面性能,點(diǎn)擊反映速度的數(shù)據(jù)與轉(zhuǎn)化率相關(guān)性是很容易查到的);但是性能變化提高20%的轉(zhuǎn)化率,那么價(jià)值就直接可見(jiàn)了。
4.2.人工智能的作用
軟件在開(kāi)發(fā)過(guò)程中有三個(gè)特點(diǎn):
1.軟件設(shè)計(jì)的不確定性。我們都知道拿到了軟件設(shè)計(jì)文檔并根據(jù)這份設(shè)計(jì)文檔來(lái)生產(chǎn)的軟件并不一定能有效果。因?yàn)?,現(xiàn)實(shí)中進(jìn)行交付軟件時(shí),如果客戶說(shuō)還可以,但是,要求加一個(gè)功能,才能通過(guò)驗(yàn)收。這不是加一個(gè)功能的問(wèn)題,其實(shí)是委婉否定了你前面所有的軟件的價(jià)值。
2.質(zhì)量的不可見(jiàn)性。對(duì)于軟件快速上線來(lái)說(shuō),如果你加班的話,短時(shí)間也能通過(guò)測(cè)試并上線;但是,短時(shí)間的測(cè)試沒(méi)有辦法能測(cè)到所有的問(wèn)題。因?yàn)橐粋€(gè)好的軟件是寫(xiě)出來(lái)的,短期測(cè)試沒(méi)有辦法保證軟件的質(zhì)量。
3.價(jià)值的不透明性。對(duì)于價(jià)值的理解,就要說(shuō)到我們大腦如何理解做事情的意義,我們生活的改變速度遠(yuǎn)遠(yuǎn)超出大腦的進(jìn)化速度。比如一個(gè)原始人,他們做一面鏡子的意義就是用來(lái)打扮。但是,每天的軟件研發(fā)工作卻無(wú)法映射到最終上線上去,那么這就顯得沒(méi)有多少意義。長(zhǎng)此以往會(huì)對(duì)工作失去不斷改進(jìn)的動(dòng)力。
那么對(duì)于上述問(wèn)題,我們能不能通過(guò)人工智能對(duì)以往同類項(xiàng)目的過(guò)程數(shù)據(jù),制定出一條明確的研發(fā)過(guò)程。使得在研發(fā),測(cè)試和發(fā)布的工作中,每個(gè)人都清楚的感覺(jué)到自己的工作對(duì)最終的產(chǎn)品起到的意義。那么,這種人工智能數(shù)據(jù)化的方式就會(huì)給我們生活賦予意義,這就是我能想到并且能做的事情。
人工智能從研發(fā)和運(yùn)維過(guò)程中收集的大量數(shù)據(jù)入手,尋找關(guān)聯(lián)性使得工作的過(guò)程和結(jié)果直接產(chǎn)生聯(lián)系,從而連接了研發(fā)與運(yùn)維再到業(yè)務(wù)成功的鏈條,提升軟件研發(fā)過(guò)程的可預(yù)見(jiàn)性,為業(yè)務(wù)成功打下堅(jiān)實(shí)基礎(chǔ)。
---------------------------------------------我是說(shuō)正事分割線----------------------------------------
既然您都這么用心的看完了,那就送個(gè)彩蛋吧。作者翻譯的《DevOps實(shí)施手冊(cè)》已經(jīng)發(fā)行。
本書(shū)從如何開(kāi)發(fā)企業(yè)自己的DevOps手冊(cè)入手,開(kāi)發(fā)企業(yè)DevOps變革的商業(yè)案例,最后通過(guò)相互信任的企業(yè)文化將DevOps成果不斷擴(kuò)大到整個(gè)公司。
據(jù)說(shuō)作者近期會(huì)對(duì)本書(shū)重點(diǎn)章節(jié)進(jìn)行解讀,并在6月29日的《DevOps國(guó)際峰會(huì)暨DevOps金融峰會(huì)2018·北京》上簽名售書(shū)
DevOps國(guó)際峰會(huì)連接:https://www.huodongjia.com/event-1047513737.html

主要章節(jié)介紹:
