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

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

(現(xiàn)狀)

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