賣個(gè)藝,給大家來(lái)段相聲
甲:聽說(shuō)咱們IT界又出了一個(gè)新詞,叫什么“云原生”?Cloud native?
乙:這都2020年了,還新詞?早在2013年人家Pivotal就用這個(gè)詞開始忽悠了。
甲:那啥是云原生呢?
乙:云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API......
甲:打住打住, 您能說(shuō)點(diǎn)兒人話嗎?
乙:那是人家CNCF權(quán)威的官方定義,你聽不懂只能說(shuō)明你的水平太次。
甲:好好,我水平很次,您倒給解釋解釋,究竟啥是云原生?
乙:用大白話來(lái)說(shuō),云原生就是把你的應(yīng)用程序設(shè)計(jì)成在云端執(zhí)行,充分利用云計(jì)算的好處。
甲:嗯,我們家的應(yīng)用在一個(gè)機(jī)房里運(yùn)行,用了好幾個(gè)服務(wù)器,一個(gè)做負(fù)載均衡,三個(gè)應(yīng)用服務(wù)器,還有兩個(gè)數(shù)據(jù)庫(kù)服務(wù)器,按你的說(shuō)法,我把他們遷移到云端環(huán)境,申請(qǐng)幾個(gè)虛擬機(jī),那就是云原生了吧?
乙:不不不,你這么做,和在機(jī)房里運(yùn)行差不多 ,無(wú)非是把物理機(jī)換成虛擬機(jī)而已,你忘了后半句:充分利用云計(jì)算平臺(tái)的優(yōu)勢(shì)。
甲:您倒是舉個(gè)例子啊。
乙:好,假設(shè)你們家應(yīng)用有一天突然火了,現(xiàn)在的服務(wù)器應(yīng)付不過(guò)來(lái)這么大的流量,你怎么辦?
甲:這還不簡(jiǎn)單,買新服務(wù)器,配置服務(wù)器,把應(yīng)用安裝上去,運(yùn)行。
乙:這多費(fèi)勁啊,得多長(zhǎng)時(shí)間啊,如果是云原生的應(yīng)用,它可以自動(dòng)到擴(kuò)展出新的運(yùn)行實(shí)例了,如果火熱勁兒過(guò)去了,可以把這些個(gè)運(yùn)行的實(shí)例給撤銷掉,這就叫自動(dòng)伸縮,彈性擴(kuò)展。
甲:這確實(shí)不錯(cuò)啊,還有嗎?
乙:天下武功,唯快不破,我問(wèn)你,你們家應(yīng)用一天能做多少次發(fā)布?
甲:一天發(fā)布多少次? 別逗了,我們幾個(gè)月才發(fā)布一次。
乙:如果是云原生的應(yīng)用,每天可以發(fā)布幾百次(自然也可回滾幾百次),不用停機(jī),輕松支持藍(lán)綠部署。
甲:一天發(fā)布幾百次,有這必要這么變態(tài)嗎?
乙:當(dāng)然,也不是應(yīng)用所有的代碼都發(fā)布幾百次,一個(gè)超大的系統(tǒng)會(huì)被拆分成小塊兒的服務(wù),這些服務(wù)會(huì)頻繁發(fā)布,迅速把新功能推向市場(chǎng),進(jìn)行驗(yàn)證。
甲:對(duì)我們這個(gè)小應(yīng)用一點(diǎn)兒用也沒(méi)有。 還有別的嗎?
乙:云原生的應(yīng)用具備強(qiáng)大的監(jiān)控和自動(dòng)化恢復(fù)的能力,可以自動(dòng)進(jìn)行健康檢查(比如網(wǎng)絡(luò)延遲如何?磁盤滿了嗎?),發(fā)現(xiàn)故障,自動(dòng)恢復(fù),重新啟動(dòng)或重新部署相關(guān)服務(wù)。
甲:我總結(jié)一下,無(wú)非就是達(dá)到快速發(fā)布,彈性擴(kuò)展和高可用性, 您吹噓得這么好,倒是說(shuō)說(shuō)怎么才能做到吧!
乙:首先,你得用微服務(wù)架構(gòu),這樣才能獨(dú)立開發(fā),獨(dú)立部署,彈性擴(kuò)展。
甲:我去!難道我不用微服務(wù)就沒(méi)法實(shí)現(xiàn)云原生了?
乙:那效果肯定是大打折扣。你一個(gè)巨大的單體應(yīng)用,光啟動(dòng)都得好幾分鐘,怎么才能做快速部署和發(fā)布啊? 其次,你得用docker和k8s,再加上DevOps,這樣你才能實(shí)現(xiàn)應(yīng)用程序每天發(fā)布幾百次、并且彈性擴(kuò)展。
甲:也是,從一個(gè)docker鏡像,生成一個(gè)可以運(yùn)行的實(shí)例,確實(shí)簡(jiǎn)單。
乙:你還得用聲明式API和不可變的基礎(chǔ)設(shè)施。
甲:又不說(shuō)人話嗎?
乙:比如說(shuō)吧,你的系統(tǒng)需要一個(gè)nginx , 你直接告訴云平臺(tái):我需要一個(gè)nginx,端口80,云平臺(tái)能根據(jù)你的描述來(lái)生成一個(gè)nginx實(shí)例, 這就是聲明式;如果是命令式,則是這樣:從xxxx地方下載nginx安裝包,解壓到xxx路徑,修改xxx文件.....

甲:嘿!聲明式是更簡(jiǎn)單啊, 那不可變基礎(chǔ)設(shè)施是啥?
乙:你發(fā)現(xiàn)你的nginx的配置有問(wèn)題,你想登錄進(jìn)去把它改一下,這是不允許的。因?yàn)橄乱淮尾渴鹂赡芫蜁?huì)忘記這個(gè)改動(dòng)。相反,你應(yīng)該去修改你的聲明,完全破換掉現(xiàn)在的nginx實(shí)例,重新創(chuàng)建新的。
甲:就是只有新增和刪除,沒(méi)有修改了唄!
乙:對(duì),這樣整個(gè)系統(tǒng)都處于一個(gè)已知的可控狀態(tài),無(wú)論是發(fā)布新功能還是回滾到舊功能,都很方便。對(duì)了,差點(diǎn)忘了最重要的東西了,云原生要用Service Mesh (服務(wù)網(wǎng)格)。
甲:Service Mesh 我在碼農(nóng)翻身公眾號(hào)看過(guò),《微服務(wù)之赤壁大戰(zhàn)》, 它的意思是說(shuō)現(xiàn)在微服務(wù)架構(gòu)需要實(shí)現(xiàn)服務(wù)發(fā)現(xiàn),負(fù)載均衡,服務(wù)限流,降級(jí),日志,監(jiān)控等各種功能,這些功能現(xiàn)在需要程序員調(diào)用相關(guān)的類庫(kù)才能實(shí)現(xiàn), 用了Service Mesh, 這些功能都可以在底層平臺(tái)中實(shí)現(xiàn)了,程序員只關(guān)注業(yè)務(wù)邏輯就好了。

(現(xiàn)狀)

(Service Mesh)
乙:對(duì),Service Mesh 符合軟件發(fā)展的趨勢(shì):不斷地把通用的技術(shù)放到平臺(tái)中。原來(lái)你累死累活弄個(gè)搜索的功能,現(xiàn)在有現(xiàn)成的Elastic Search ;原來(lái)搞個(gè)負(fù)載均衡,高可用那絕對(duì)是高科技,現(xiàn)在云平臺(tái)有現(xiàn)成的負(fù)載均衡服務(wù),拿來(lái)用就行了。
甲:微服務(wù),docker , k8s , Service Mesh ,DevOps, 聲明式,不可變基礎(chǔ)設(shè)施, 我算是懂了, 云原生是個(gè)筐,什么都可以往里邊裝啊。但是,我只要能實(shí)現(xiàn)快速部署,彈性擴(kuò)展,高可用就行了,為什么非要用這些時(shí)髦的東西呢?
乙:這些東西是開放的標(biāo)準(zhǔn),有現(xiàn)成的實(shí)現(xiàn),有大公司的支持和背書,你可以不用,但是就得自己去造輪子了。
甲:好吧,明白了。
乙:云原生可能是未來(lái)的發(fā)展趨勢(shì),要不要把你們家的應(yīng)用也改成云原生的?
甲:得了吧,我們那系統(tǒng)要不要拆分成微服務(wù)還不一定呢?
乙:你可要想好了,云原生可是評(píng)優(yōu)晉級(jí)的大殺器啊!
甲:評(píng)優(yōu)晉級(jí)?那我得好好想想......
如需轉(zhuǎn)載,請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)。