如何利用云原生技術(shù)構(gòu)建現(xiàn)代化應(yīng)用
今天,云和云計(jì)算技術(shù)已經(jīng)被企業(yè)廣泛所接受,關(guān)于云、云計(jì)算、云原生都有非常多的話題,但是我比較想討論的是在所有云當(dāng)中真正的主角,就是我們的應(yīng)用。
因?yàn)楫?dāng)企業(yè)應(yīng)用上云后,這些應(yīng)用的高可用能力有可能提升了一部分,但仍存有許多問題;而當(dāng)我們探討上云后這些應(yīng)用的運(yùn)維效率,卻未必有很大的提升,因?yàn)樗械倪\(yùn)維都是基于基礎(chǔ)設(shè)施進(jìn)行的,而云計(jì)算是一個(gè)比較大的基礎(chǔ)設(shè)施的改變;如果我們再問,上云后整個(gè)應(yīng)用的開發(fā)速度是不是得到了極大的提升,這個(gè)時(shí)候很多人都要說,并不。
因此,今天主要探討的就是如何利用云原生相關(guān)的技術(shù)幫助我們的應(yīng)用去做優(yōu)化,從傳統(tǒng)應(yīng)用轉(zhuǎn)變成現(xiàn)代化應(yīng)用。
非典型的典型——云上眾生相
我們先采取一個(gè)從個(gè)體再到整體的形而上的方式,來看一個(gè)比較典型的企業(yè)案例。
今天,云和云計(jì)算技術(shù)已經(jīng)被企業(yè)廣泛所接受,關(guān)于云、云計(jì)算、云原生都有非常多的話題,但是我比較想討論的是在所有云當(dāng)中真正的主角,就是我們的應(yīng)用。
因?yàn)楫?dāng)企業(yè)應(yīng)用上云后,這些應(yīng)用的高可用能力有可能提升了一部分,但仍存有許多問題;而當(dāng)我們探討上云后這些應(yīng)用的運(yùn)維效率,卻未必有很大的提升,因?yàn)樗械倪\(yùn)維都是基于基礎(chǔ)設(shè)施進(jìn)行的,而云計(jì)算是一個(gè)比較大的基礎(chǔ)設(shè)施的改變;如果我們再問,上云后整個(gè)應(yīng)用的開發(fā)速度是不是得到了極大的提升,這個(gè)時(shí)候很多人都要說,并不。
因此,今天主要探討的就是如何利用云原生相關(guān)的技術(shù)幫助我們的應(yīng)用去做優(yōu)化,從傳統(tǒng)應(yīng)用轉(zhuǎn)變成現(xiàn)代化應(yīng)用。
非典型的典型——云上眾生相
我們先采取一個(gè)從個(gè)體再到整體的形而上的方式,來看一個(gè)比較典型的企業(yè)案例。
對于上云之后的企業(yè),他們雖然取得了階段性的成功,也需要思考他們還有哪些問題沒有得到解決。所以說不管有沒有上云的企業(yè),他們都非常焦慮,這就體現(xiàn)在他們都在思考怎么樣才能很好地縮短研發(fā)周期,以支持快速的業(yè)務(wù)發(fā)展需要;怎么樣去提升整體的運(yùn)維效率,并在這個(gè)過程中讓他們的 IT 部門具備很強(qiáng)的控制力;在整體上云和上云之后,可以比較好地降低整體的 IT 應(yīng)用成本,以及降低軟件的復(fù)雜度,提升整個(gè)系統(tǒng)的高可用能力等,這些方方面面絕大部分都聚焦在應(yīng)用的非功能性特性上面。
1.焦慮的根源
所有的這些焦慮,我們可以從應(yīng)用的角度去深度分析是什么原因造成的。
大家知道對于應(yīng)用而言,核心的就是架構(gòu),包括了應(yīng)用的業(yè)務(wù)架構(gòu)和技術(shù)架構(gòu)。從應(yīng)用架構(gòu)上去看,需要滿足客戶的應(yīng)用發(fā)展訴求。比如說數(shù)據(jù)的產(chǎn)生,隨著今天 IoT 不斷普及,數(shù)據(jù)會(huì)產(chǎn)生非常大的接入量,對于這些數(shù)據(jù)的處理也帶來了更高的要求。
基于傳統(tǒng)的、更多的服務(wù)于人的請求的響應(yīng)式數(shù)據(jù)處理方式已經(jīng)不能滿足于業(yè)務(wù)的需求,對于 IoT 設(shè)備更多的是基于請求、響應(yīng)這類事件的模型和方式。同樣的,企業(yè)的業(yè)務(wù)發(fā)展需要跟更多的公司去進(jìn)行生態(tài)的連接。這些大量的業(yè)務(wù)訴求也對底層的技術(shù)架構(gòu)帶來了比較多的要求。這些要求就體現(xiàn)在,要求底層的技術(shù)架構(gòu)能夠支持高度的冗余,能支持微服務(wù)和海量的業(yè)務(wù)并發(fā)、以及能夠支持動(dòng)態(tài)伸縮、能夠提供 SLA 等。
如果我們再進(jìn)一步深度發(fā)掘,這里面到底是需要解決什么樣的核心矛盾時(shí),我們可以發(fā)現(xiàn)其實(shí)核心矛盾在于隨著上云、業(yè)務(wù)的復(fù)雜度不斷增加,使得 IT 有更多的管理成本。而這個(gè)成本就體現(xiàn)在,所有的微服務(wù)、高可用都需要用高度的系統(tǒng)冗余去解決。同時(shí)由于業(yè)務(wù)的快速發(fā)展,需要整個(gè) IT 系統(tǒng)去響應(yīng)頻繁的變換。核心矛盾就在于,系統(tǒng)的高度冗余與系統(tǒng)的頻繁變化之間的矛盾,所有的分布式系統(tǒng)都在圍繞這一主要矛盾來進(jìn)行解決。
舉個(gè)例子,在原來的單機(jī)時(shí)代,如果我們只需要一個(gè)人管理一臺(tái)機(jī)器,用一臺(tái)機(jī)器上的軟件就可以滿足自身業(yè)務(wù)發(fā)展的要求,那么我們顯然沒有這么多的矛盾。只有當(dāng)一個(gè)人變成幾十甚至上百個(gè)人,當(dāng)這樣一臺(tái)機(jī)器不是運(yùn)行在一個(gè)節(jié)點(diǎn)而是幾十上百甚至上千個(gè)節(jié)點(diǎn)時(shí),整個(gè) IT 需要處理的復(fù)雜度就從1對1變成了1對N的頻發(fā)。所以說整體的復(fù)雜度得到了一個(gè)極大的提升,這也是我們所講的矛盾的根源。
2.快速解和深度解
那么對于這樣的矛盾有什么樣的解法呢?今天在云的時(shí)代,我們總結(jié)了一下有快速的解法和需要更多資源投入的深度解法。
快速解就包括了 re-host 的模式,即把應(yīng)用的運(yùn)行環(huán)境從傳統(tǒng)的線下 IDC 遷移到了云的環(huán)境。在這種模式下,應(yīng)用的架構(gòu)沒有發(fā)生變化,應(yīng)用的風(fēng)險(xiǎn)也是比較低的,但是價(jià)值的回報(bào)只能說是較高。與此對應(yīng)的另一個(gè)解法就是 re-platform,就是把整體應(yīng)用的交付和運(yùn)維都改變,但是應(yīng)用的軟件架構(gòu)不發(fā)生改變。
比如說我們通過容器的方式去改變整個(gè)軟件的留存,改變整體的運(yùn)維留存。那么在這個(gè)模式下面,它的架構(gòu)變更的幅度是相對比較小的,實(shí)施風(fēng)險(xiǎn)是中等且可以得到比較高的價(jià)值回報(bào)。
但如果我們要徹底解決上面的問題,那么就要采取整個(gè)軟件重構(gòu)的 re-build 方式,或者對于軟件的重要模塊去進(jìn)行一個(gè) re-factor 重構(gòu)的模式。這些模式都會(huì)涉及到軟件的架構(gòu)發(fā)生變化,因此它的實(shí)施風(fēng)險(xiǎn)也是很高的,但同樣的高投入高風(fēng)險(xiǎn)也帶來了高回報(bào),改變后的應(yīng)用可以更好地解決矛盾。
所有的解法都與云原生有著非常大的關(guān)系。云原生被提出來的最主要的原因,是企業(yè)上云之后發(fā)現(xiàn)很多應(yīng)用不能很好地去利用云的特性,因此有人說很多應(yīng)用不是云原生類型的應(yīng)用。因此,云原生被提出來了。
云原生的關(guān)鍵內(nèi)涵
我們先不去討論云原生的定義是什么,但我們要專門提出關(guān)于云原生的三個(gè)關(guān)鍵內(nèi)涵,理解這三個(gè)內(nèi)涵對于我們怎么樣去利用云原生構(gòu)建現(xiàn)代化應(yīng)用有非常大的幫助。
云原生技術(shù):今天云原生的技術(shù)有閉源的和大量開源的。閉源通常體現(xiàn)在對應(yīng)用相對透明的云廠商的基礎(chǔ)設(shè)施上面。同樣,大量的開源技術(shù)對于應(yīng)用而言有比較大的關(guān)系,因?yàn)樗械膽?yīng)用會(huì)直接構(gòu)架在這些開源的云原生技術(shù)棧上面。但如果說這些應(yīng)用要比較好地去利用底層的云原生技術(shù),我們通常會(huì)建議這些場景中我們的應(yīng)用可以大量采用云原生的產(chǎn)品。
云原生產(chǎn)品:一部分客戶的技術(shù)棧都基于開源的技術(shù)棧所構(gòu)建,但開源的技術(shù)棧雖然在很多技術(shù)、功能、穩(wěn)定性上沒有問題,在可維護(hù)性和跟底層基礎(chǔ)設(shè)施的配合上卻可能會(huì)出現(xiàn)問題。因此我們會(huì)推薦應(yīng)用盡量在云原生產(chǎn)品上去構(gòu)建。
云原生理念:光靠技術(shù)和產(chǎn)品無法很好地解決前面提到的應(yīng)用面臨的方方面面的問題,因?yàn)榧夹g(shù)和產(chǎn)品是生產(chǎn)工具,生產(chǎn)工具的改變往往會(huì)導(dǎo)致整個(gè)企業(yè)的 IT 文化,也就是生產(chǎn)關(guān)系的改變。
在整個(gè) IT 文化當(dāng)中,起到最主要作用的就是這其中整個(gè)企業(yè)的生產(chǎn)流程,以及生產(chǎn)流程之間人與人的合作關(guān)系。由于云原生的技術(shù)和產(chǎn)品在工具層面帶來了改變,那么不可避免地就帶來了在整個(gè)生產(chǎn)流水線,即企業(yè)的生產(chǎn)流程之間的改變。
比如說,原先有的崗位對人的要求發(fā)生了改變,或者原先的崗位沒有了,同樣一些新的崗位可能就被創(chuàng)造出來了。在這過程中,受到最大影響的就是人,包括人與人之間的協(xié)作關(guān)系。因此要很好地去運(yùn)用云原生,特別要注意的就是云原生的技術(shù)和產(chǎn)品對于整個(gè)企業(yè)的生產(chǎn)流程、生產(chǎn)流水線上帶來的改變,特別是對于人和組織上面要求的升級(jí)。
1.云原生是云計(jì)算的再升級(jí)
云原生不僅能幫助大家更好地去建好云、用好云、管好云,同樣也是整個(gè)云計(jì)算的再升級(jí)。
這不僅體現(xiàn)在云的基礎(chǔ)設(shè)施層面的升級(jí),即云計(jì)算的提供廠商會(huì)意識(shí)到今天所提供的基礎(chǔ)設(shè)施還不能比較好地滿足應(yīng)用的要求,需要不斷地升級(jí)以能夠更好地滿足應(yīng)用在高效的交付、運(yùn)維上面的需求。
同樣的,他也會(huì)要求應(yīng)用在架構(gòu)上徹底升級(jí),讓應(yīng)用體現(xiàn)出更好的彈性、韌性和可觀測性。有了基礎(chǔ)設(shè)施和應(yīng)用的升級(jí),我們會(huì)進(jìn)一步去追求整體研發(fā)效率的提升,這其中有采用 Serverless 這些新的計(jì)算形態(tài)去幫助我們應(yīng)用提升整體的交付和運(yùn)維效率的方式,以及更重要的就是解決頻繁變化的 IT 系統(tǒng)當(dāng)中的快速迭代和系統(tǒng)穩(wěn)定性之間的矛盾。
所以我們說云原生是云計(jì)算整體的一個(gè)再升級(jí)。
2.什么是現(xiàn)代化應(yīng)用
什么是現(xiàn)代化應(yīng)用,跟傳統(tǒng)的應(yīng)用又有什么區(qū)別呢?
現(xiàn)代化應(yīng)用中包含彈性、可觀測性和度量、無狀態(tài)和安全等典型特征,在整體的一個(gè)計(jì)算結(jié)構(gòu)上我們可以看到,現(xiàn)代化應(yīng)用跟云原生應(yīng)用有非常多相似之處。它們之間的區(qū)別在于,現(xiàn)代化的應(yīng)用不一定要跑在云上。
云原生應(yīng)用顧名思義一定與云相關(guān),但是他們很多特征都是一樣的,它們都要求整體的應(yīng)用要構(gòu)建在云原生的技術(shù)產(chǎn)品之上,這些技術(shù)和產(chǎn)品能真正地體現(xiàn)在應(yīng)用采用云原生的架構(gòu)時(shí),并且在整體的實(shí)施過程中要徹底貫徹云原生的開發(fā)理念。這樣的應(yīng)用才能夠比較好地跑在各種基礎(chǔ)設(shè)施上面。
既然提到了架構(gòu)是承載應(yīng)用的關(guān)鍵要素,那么云原生架構(gòu)有什么特點(diǎn)呢?
云原生架構(gòu)
云原生架構(gòu)是一組架構(gòu)原則、設(shè)計(jì)模式和設(shè)計(jì)方法的組合。在這個(gè)組合上面有非常明顯的、區(qū)別于傳統(tǒng)架構(gòu)的特點(diǎn)。
云原生架構(gòu)會(huì)盡量幫助我們的應(yīng)用把其中的非功能性代碼進(jìn)行剝離。而在傳統(tǒng)應(yīng)用中,有不少代碼需要去處理非功能性的問題。云原生架構(gòu)下,這部分代碼剝離出來后會(huì)被放到云原生的基礎(chǔ)設(shè)施、產(chǎn)品和技術(shù)中去,由底層的 PaaS 平臺(tái)和 IaaS 平臺(tái)去承載客戶應(yīng)用當(dāng)中非功能性的問題,從而讓開發(fā)人員更多關(guān)注業(yè)務(wù)代碼的編寫。
有了這樣的云原生架構(gòu)去接管應(yīng)用中原有的大量非功能特性,業(yè)務(wù)中原本因非功能性問題造成的業(yè)務(wù)中斷也可以被避免,同時(shí)使應(yīng)用具備了更輕量、敏捷、高度自動(dòng)化的特征。
1.云原生架構(gòu)原則
我們在云原生架構(gòu)下抽取出了最重要的 7 個(gè)云原生架構(gòu)原則:
1、服務(wù)化原則:微服務(wù)化顆粒度可以更好地滿足客戶應(yīng)用的特征;
2、彈性原則:從虛擬機(jī)到容器層面到進(jìn)一步應(yīng)用層面具備不同彈性;
3、韌性原則:高可用原則的進(jìn)一步提升,應(yīng)用在各種情況下持續(xù)為客戶提供服務(wù);
4、可觀測性原則:與監(jiān)控不同,可觀測性模型可事先提供大量從日志到鏈路跟蹤的有效信息,從而主動(dòng)發(fā)現(xiàn)系統(tǒng)中的潛在風(fēng)險(xiǎn);
5、自動(dòng)化原則:從底層的硬件到軟件、組件,都有比較大的提升,因此更希望有自動(dòng)化原則去幫助我們更有效地運(yùn)維,從而降低運(yùn)維成本;
6、零信任原則:云原生架構(gòu)可以運(yùn)行在不同架構(gòu)上,因而對安全提出了新的要求,要求所有的應(yīng)用不管運(yùn)行在什么環(huán)境都是不信任的,每次運(yùn)行請求都需要校驗(yàn)合法性;
7、持續(xù)演進(jìn)原則:可以根據(jù)企業(yè)的特點(diǎn),每個(gè)階段采取適合的演進(jìn)目標(biāo),長期迭代后使每個(gè)目標(biāo)最終演變到現(xiàn)代化的應(yīng)用。
2.云原生的主要架構(gòu)模式
云原生的架構(gòu)模式非常多,列舉如下圖所示,詳細(xì)的內(nèi)容可以參考近期出版的《阿里云云原生架構(gòu)實(shí)踐》。
3.阿里云云原生架構(gòu)方法
關(guān)于云原生的架構(gòu)方法,我們提出了 ACNA 的架構(gòu)方法。這是阿里云關(guān)于云原生架構(gòu)的一個(gè)架構(gòu)設(shè)計(jì)方法,包含了對云原生架構(gòu)的評估體系和成熟度的度量體系,同時(shí)也包含了阿里云對廣大客戶在對應(yīng)用實(shí)施云原生技術(shù)改造過程中,積累的最佳實(shí)踐和用到的產(chǎn)品體系和技術(shù)。在這之中有一些架構(gòu)視角,我們希望對每個(gè)企業(yè)來說,他們可以根據(jù)自己企業(yè)的情況去選擇與之相匹配的技術(shù)架構(gòu)能力,最終為業(yè)務(wù)發(fā)展、企業(yè)戰(zhàn)略發(fā)展服務(wù)。
4.阿里云云原生架構(gòu)閉環(huán)
整個(gè)架構(gòu)方法是包含了多個(gè)視角的綜合體,在這之中我們希望通過架構(gòu)持續(xù)演進(jìn)能形成一個(gè)閉環(huán)。
整個(gè)架構(gòu)閉環(huán)包含了最主要的八個(gè)階段。從識(shí)別業(yè)務(wù)痛點(diǎn)到確定架構(gòu)目標(biāo),在評估風(fēng)險(xiǎn)過程中選取相應(yīng)的技術(shù)制定迭代計(jì)劃,推動(dòng)落地計(jì)劃中我們建議企業(yè)在實(shí)施云原生架構(gòu)過程中有一些專門的機(jī)構(gòu)去評審整體的風(fēng)險(xiǎn),從而讓整個(gè)過程形成一個(gè)閉環(huán)。而在這個(gè)過程中要特別關(guān)注架構(gòu)治理視角,這需要有相應(yīng)的組織或人員來幫助應(yīng)用在迭代過程中進(jìn)行架構(gòu)治理。
5.如何衡量云原生架構(gòu)的成熟度
在 ACNA 里我們提出了一個(gè)衡量云原生架構(gòu)的成熟度模型,其中有六個(gè)關(guān)鍵維度,我們簡稱 SESORA。
這六個(gè)維度的能力,也是在現(xiàn)代化應(yīng)用中的最主要的六個(gè)關(guān)鍵指標(biāo)。每個(gè)指標(biāo)從0-3分為了四個(gè)等級(jí),每個(gè)等級(jí)有對應(yīng)的得分,在評估后可以得出一個(gè)關(guān)于應(yīng)用在云原生架構(gòu)上得到的評分高低。今天阿里云提出的這個(gè) SESORA 模型已經(jīng)在業(yè)界中得到很多機(jī)構(gòu)和企業(yè)的采納,從而可以幫助企業(yè)在云原生架構(gòu)改造上提高成熟度。
客戶案例
最后來看兩個(gè)典型案例。第一個(gè)案例是在阿里云上的應(yīng)用怎么通過云原生的產(chǎn)品去有效預(yù)防在系統(tǒng)架構(gòu)設(shè)計(jì)當(dāng)中穩(wěn)定性的風(fēng)險(xiǎn)。我們采用了微服務(wù)的架構(gòu)模式,有大量數(shù)據(jù)是存放在 MongoDB 中的,在這個(gè)架構(gòu)中客戶采用了 PTS、ARMS和AHAS 這個(gè)組合,這可以比較好地幫客戶去主動(dòng)探測系統(tǒng)中是否存在潛在的風(fēng)險(xiǎn),從而去預(yù)防穩(wěn)定性的風(fēng)險(xiǎn)。
第二個(gè)案例是關(guān)于 Serverless 的案例,解決的問題是幫助微服務(wù)應(yīng)用快速上云。因?yàn)樵谶@個(gè)過程中,我們往往需要應(yīng)用去解決很多問題,而在 Serverless 模式下,這些底層的部署都得到了很大的復(fù)雜度降低。
當(dāng)客戶應(yīng)用有突發(fā)流量增加時(shí),Serverless會(huì)探測到并主動(dòng)申請新資源,從而使新增流量得到及時(shí)響應(yīng);當(dāng)突發(fā)流量消失時(shí) Serverless 也會(huì)主動(dòng)釋放資源,從而降低成本。