云原生應(yīng)用是什么

這篇文章給大家介紹云原生應(yīng)用是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

十載的荷塘網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整荷塘建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“荷塘網(wǎng)站設(shè)計(jì)”,“荷塘網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

云原生應(yīng)用的概念

顧名思義,云原生應(yīng)用的概念由云和原生兩個(gè)部分組成,云在這里指的是云平臺(tái),也就是平臺(tái)即服務(wù)(Platform as a Service,PaaS);原生應(yīng)用指的是專(zhuān)門(mén)針對(duì)云平臺(tái)而設(shè)計(jì)和實(shí)現(xiàn)的,充分利用了云平臺(tái)的特性。應(yīng)用的微服務(wù)可以專(zhuān)注于實(shí)現(xiàn)業(yè)務(wù)邏輯,而把微服務(wù)架構(gòu)的復(fù)雜度交給云平臺(tái)來(lái)解決。

原生這個(gè)詞在軟件開(kāi)發(fā)中有它獨(dú)特的含義。原生通常意味著高效和難以移植,也意味著針對(duì)特定的平臺(tái)而設(shè)計(jì),可以充分利用平臺(tái)的特性,因此運(yùn)行起來(lái)非常高效;同樣意味著與特定平臺(tái)的深度綁定,很難移植到其他平臺(tái)。云原生應(yīng)用同樣具有這兩個(gè)特征,對(duì)于云原生應(yīng)用來(lái)說(shuō),難移植并不是一個(gè)問(wèn)題,畢竟遷移到云平臺(tái)之后,不會(huì)再想遷移回去。

云原生應(yīng)用的特征

與其他應(yīng)用相比,總結(jié)起來(lái),云原生應(yīng)用有如下 15 個(gè)特征。

1、單一代碼庫(kù)

云原生應(yīng)用必須有單一的代碼庫(kù),并在版本管理系統(tǒng)中進(jìn)行追蹤。單一代碼庫(kù)可以是一個(gè)版本庫(kù),也可以是共享同一根目錄的多個(gè)版本庫(kù),其重要性在于每一個(gè)代碼提交(Commit)都會(huì)對(duì)應(yīng)一個(gè)不可變的構(gòu)建版本。在每次代碼提交之后,持續(xù)集成流程會(huì)被觸發(fā),最終產(chǎn)生一系列的應(yīng)用容器鏡像,這就在代碼提交和構(gòu)建版本之間建立了一對(duì)一的對(duì)應(yīng)關(guān)系,這種一對(duì)一的關(guān)系保證了每個(gè)構(gòu)建版本都是可追蹤的,可以比較不同版本之間的代碼變化。

對(duì)于微服務(wù)架構(gòu)的應(yīng)用來(lái)說(shuō),每個(gè)應(yīng)用由多個(gè)服務(wù)組成,這些服務(wù)應(yīng)該由單一的代碼庫(kù)進(jìn)行管理,這保證了構(gòu)建版本的穩(wěn)定性。如果一個(gè)改動(dòng)涉及到多個(gè)服務(wù),則這個(gè)改動(dòng)應(yīng)該在一次代碼提交中完成對(duì)所有相關(guān)服務(wù)的修改;如果服務(wù)的代碼分散在多個(gè)代碼庫(kù)中,則一個(gè)改動(dòng)會(huì)被分成多個(gè)代碼提交,每個(gè)代碼提交都會(huì)觸發(fā)一次持續(xù)集成流程,產(chǎn)生對(duì)應(yīng)服務(wù)的構(gòu)建版本,這些服務(wù)的構(gòu)建版本只包含了部分改動(dòng),是不完整的。在應(yīng)用部署時(shí),有的服務(wù)可能包含了部分改動(dòng),而有的服務(wù)則沒(méi)有,這使得部署的應(yīng)用實(shí)際上是不能工作的。因此,微服務(wù)架構(gòu)的應(yīng)用應(yīng)該使用單一代碼庫(kù)。

2、API 優(yōu)先

云原生應(yīng)用應(yīng)該采用 API 優(yōu)先的設(shè)計(jì)策略。微服務(wù)架構(gòu)的應(yīng)用使用公開(kāi) API 來(lái)作為服務(wù)的對(duì)外接口,API 屏蔽了服務(wù)的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。API 優(yōu)先的設(shè)計(jì)策略指的是在設(shè)計(jì)階段,應(yīng)該首先設(shè)計(jì) API 并確定 API 的細(xì)節(jié)。API 的設(shè)計(jì)過(guò)程需要多個(gè)團(tuán)隊(duì)的參與,包括 API 的實(shí)現(xiàn)者和可能的使用者,這些團(tuán)隊(duì)在充分討論中最終完成了 API 的定義。API 可以使用 OpenAPI 規(guī)范描述,從該規(guī)范中可以生成 API 文檔和模擬服務(wù)器。 

API 優(yōu)先的策略保證了 API 的穩(wěn)定性,同時(shí)可以減少不必要的后期修改。因?yàn)?API 是服務(wù)之間的接口,修改 API 就意味著相關(guān)的內(nèi)部實(shí)現(xiàn)、測(cè)試用例和 API 的使用者都需要進(jìn)行修改,如果在應(yīng)用開(kāi)發(fā)中出現(xiàn)了必須修改 API 的情況,那造成的影響是很大的。API 優(yōu)先確保了盡可能減少在開(kāi)發(fā)中對(duì) API 進(jìn)行修改。

API 優(yōu)先的另外一個(gè)好處是可以提高開(kāi)發(fā)效率。API 確定之后,可以利用工具生成文檔和模擬服務(wù)器,API 的使用者可以根據(jù)文檔來(lái)編寫(xiě)使用 API 的代碼。測(cè)試人員可以編寫(xiě) API 相關(guān)的測(cè)試用例,并用模擬服務(wù)器運(yùn)行測(cè)試。不同的團(tuán)隊(duì)可以并行工作,從而提高效率。

3、依賴(lài)管理

云原生應(yīng)用應(yīng)該管理自己的依賴(lài),Java 開(kāi)發(fā)人員對(duì)依賴(lài)管理應(yīng)該并不陌生,常用的 Java 構(gòu)建工具 Maven 和 Gradle 都提供了依賴(lài)管理的支持。在開(kāi)發(fā)過(guò)程中,只需要利用構(gòu)建工具的支持即可;在管理依賴(lài)時(shí),則需要區(qū)分應(yīng)用自帶的依賴(lài)和運(yùn)行環(huán)境提供的依賴(lài)。云原生應(yīng)用通常會(huì)包含全部所需的依賴(lài),尤其是以容器形式運(yùn)行的應(yīng)用,典型的例子是微服務(wù)的 REST API。云原生應(yīng)用會(huì)自帶嵌入式的 Tomcat 這樣的服務(wù)器來(lái)提供 HTTP 服務(wù)。

4、設(shè)計(jì)、構(gòu)建、發(fā)布和運(yùn)行

云原生應(yīng)用應(yīng)該有完整的設(shè)計(jì)、構(gòu)建、發(fā)布和運(yùn)行流程,如下圖所示。

云原生應(yīng)用是什么

設(shè)計(jì)

設(shè)計(jì)在云原生應(yīng)用的開(kāi)發(fā)中必不可少。傳統(tǒng)應(yīng)用通常采用瀑布式的開(kāi)發(fā)流程,瀑布式的開(kāi)發(fā)流程中會(huì)分配足夠的時(shí)間進(jìn)行設(shè)計(jì)。云原生應(yīng)用一般采用敏捷軟件開(kāi)發(fā)流程,但是這并不意味著設(shè)計(jì)變得不再重要,只不過(guò)設(shè)計(jì)過(guò)程變成了一個(gè)迭代的過(guò)程,而且每次設(shè)計(jì)的范圍較小,通常只需要對(duì)某些新特性進(jìn)行設(shè)計(jì)。

構(gòu)建

構(gòu)建階段從單一代碼庫(kù)中創(chuàng)建出帶版本號(hào)的二進(jìn)制工件,構(gòu)建過(guò)程通常由持續(xù)集成服務(wù)器來(lái)完成,每個(gè)構(gòu)建都必須有唯一不變的版本號(hào),構(gòu)建出來(lái)的二進(jìn)制工件也是不可變的。這就保證了同一個(gè)構(gòu)建版本在經(jīng)過(guò)測(cè)試之后,被部署的版本與測(cè)試過(guò)的版本保持一致。

發(fā)布

把構(gòu)建出來(lái)的工件推送到云平臺(tái)之上,就得到了一個(gè)發(fā)布版本,發(fā)布版本中包含與部署環(huán)境相關(guān)的配置信息。云原生應(yīng)用在部署時(shí),通常有開(kāi)發(fā)、測(cè)試和生產(chǎn) 3 個(gè)環(huán)境,在每個(gè)環(huán)境上的配置信息都不盡相同。發(fā)布版本也是不可變的,有唯一的發(fā)布號(hào),每一個(gè)構(gòu)建版本都可能對(duì)應(yīng)多個(gè)發(fā)布版本。

運(yùn)行

運(yùn)行階段在云平臺(tái)之上運(yùn)行應(yīng)用,運(yùn)行的方式取決于云平臺(tái),可以是虛擬機(jī)或容器。云平臺(tái)負(fù)責(zé)管理應(yīng)用的運(yùn)行,包括監(jiān)控應(yīng)用運(yùn)行狀態(tài)、處理失敗的情況和動(dòng)態(tài)水平擴(kuò)展等。

5、代碼、配置和憑據(jù)

代碼、配置和憑據(jù)是云原生應(yīng)用開(kāi)發(fā)中創(chuàng)建的三種不同類(lèi)型的實(shí)體。代碼包括源代碼和相關(guān)資源文件;配置是與部署環(huán)境相關(guān)的配置信息,通常以 XML、YAML、JSON 或?qū)傩晕募男问匠霈F(xiàn),配置中包含的信息包括第三方服務(wù)的連接方式、數(shù)據(jù)庫(kù)連接信息和應(yīng)用自身的配置屬性等;憑據(jù)指的是密碼、私鑰和 API 密鑰等敏感信息。

 代碼和配置的區(qū)別在于,代碼不會(huì)隨著部署環(huán)境而變化,而配置則相反。在實(shí)踐中,應(yīng)該盡可能把配置從應(yīng)用中分離出來(lái),進(jìn)行外部化管理,構(gòu)建出來(lái)的二進(jìn)制工件中不包含任何配置信息,實(shí)際的配置值在部署時(shí)根據(jù)環(huán)境來(lái)確定。在運(yùn)行時(shí),一般使用環(huán)境變量來(lái)傳遞配置值,還可以使用類(lèi)似 Spring Cloud Config 這樣的專(zhuān)門(mén)配置服務(wù)器來(lái)管理配置值,憑據(jù)都應(yīng)該從源代碼倉(cāng)庫(kù)中刪除。

6、日志

日志是應(yīng)用開(kāi)發(fā)中不可或缺的部分。與傳統(tǒng)應(yīng)用不同的是,云原生應(yīng)用并不需要對(duì)日志的輸出方式進(jìn)行很多配置,只是簡(jiǎn)單地把日志寫(xiě)到標(biāo)準(zhǔn)輸出流(stdout)和標(biāo)準(zhǔn)錯(cuò)誤流(stderr)。日志的收集和處理由云平臺(tái)上的其他服務(wù)來(lái)提供,這把應(yīng)用開(kāi)發(fā)人員從日志管理相關(guān)的任務(wù)中解放出來(lái)。云平臺(tái)上的日志管理服務(wù)非常多,開(kāi)源的典型實(shí)現(xiàn)包括 Elastic 技術(shù)棧(ElasticSearch + LogStash + Kibana)和 Fluentd。

7、隨時(shí)可丟棄

云原生應(yīng)用的生命周期可能是短暫的,隨時(shí)可能被終止。云平臺(tái)可能會(huì)隨時(shí)啟動(dòng)和停止應(yīng)用的實(shí)例,這就要求云原生應(yīng)用的啟動(dòng)和停止速度都要非???。當(dāng)應(yīng)用的負(fù)載突然增大時(shí),可以快速地啟動(dòng)新的實(shí)例來(lái)處理請(qǐng)求;當(dāng)應(yīng)用的實(shí)例出現(xiàn)問(wèn)題時(shí),可以快速啟動(dòng)一個(gè)新的實(shí)例作為替代。快速停止應(yīng)用和快速啟動(dòng)應(yīng)用一樣重要,快速停止應(yīng)用保證了資源可以被及時(shí)釋放。

8、支撐服務(wù)

云原生應(yīng)用的運(yùn)行離不開(kāi)支撐服務(wù)。支撐服務(wù)是一個(gè)寬泛的概念,包括數(shù)據(jù)庫(kù)、消息中間件、緩存、用戶(hù)認(rèn)證和授權(quán)、存儲(chǔ)等。連接這些支撐服務(wù)的配置信息應(yīng)該被抽離出來(lái),在運(yùn)行時(shí)根據(jù)部署環(huán)境提供實(shí)際值。

9、環(huán)境等同

云原生應(yīng)用的不同部署環(huán)境是等同的。開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境之間不應(yīng)該有差異,環(huán)境的等同性保證了云原生應(yīng)用可以快速的進(jìn)行部署,這一特征與構(gòu)建工件的不變性是相輔相成的,兩者缺一不可。有了這兩個(gè)特征之后,每一個(gè)唯一版本的構(gòu)建工件可以被依次部署到不同的環(huán)境,在測(cè)試環(huán)境上經(jīng)過(guò)測(cè)試的版本,可以直接部署到生產(chǎn)環(huán)境。我們可以確定應(yīng)用在生產(chǎn)環(huán)境上的行為與測(cè)試環(huán)境中一樣。

10、管理任務(wù)

云原生應(yīng)用運(yùn)行中可能會(huì)需要執(zhí)行一些管理任務(wù),比如生成報(bào)表或者執(zhí)行一次性的數(shù)據(jù)查詢(xún)等,這些任務(wù)通常并不屬于業(yè)務(wù)流程的一部分,更多的是為了管理和運(yùn)維的需要。這些任務(wù)在執(zhí)行中會(huì)用到云原生應(yīng)用所依賴(lài)的支撐服務(wù),對(duì)于這些任務(wù),應(yīng)該創(chuàng)建獨(dú)立的應(yīng)用,并在同樣的云平臺(tái)上運(yùn)行。對(duì)于定期執(zhí)行的任務(wù),可以充分利用云平臺(tái)的支持,比如,Kubernetes 提供了對(duì)定時(shí)任務(wù)(CronJob)的支持。

以生成報(bào)表為例,可以創(chuàng)建一個(gè)獨(dú)立的應(yīng)用來(lái)讀取數(shù)據(jù)庫(kù)并生成報(bào)表,該應(yīng)用可以有自己獨(dú)立的容器鏡像。如果報(bào)表生成是手動(dòng)觸發(fā)的,該應(yīng)用應(yīng)該獨(dú)立運(yùn)行,并提供一個(gè) API 接口來(lái)允許外部觸發(fā)。如果報(bào)表生成是定期的,應(yīng)用部署時(shí)可以創(chuàng)建相應(yīng)的定時(shí)任務(wù)來(lái)運(yùn)行容器,在容器啟動(dòng)時(shí)自動(dòng)生成報(bào)表,生成完畢之后,容器運(yùn)行結(jié)束。下圖說(shuō)明了這兩種觸發(fā)方式的區(qū)別,圓角矩形的邊框表示應(yīng)用的邊界。 

云原生應(yīng)用是什么 

11、端口綁定

云原生應(yīng)用在運(yùn)行時(shí)并不負(fù)責(zé)管理實(shí)際的端口綁定,而是由云平臺(tái)統(tǒng)一管理。比如,一個(gè)基于 Spring Boot 的微服務(wù)應(yīng)用通常在 8080 端口運(yùn)行 HTTP 服務(wù),當(dāng)應(yīng)用運(yùn)行在云平臺(tái)上時(shí),這個(gè)端口只是虛擬機(jī)或容器內(nèi)的端口,并不是外部用戶(hù)或其他服務(wù)訪問(wèn)時(shí)的實(shí)際端口。云平臺(tái)對(duì)網(wǎng)絡(luò)進(jìn)行統(tǒng)一管理,負(fù)責(zé)分配實(shí)際的端口,云平臺(tái)同時(shí)提供了相應(yīng)的機(jī)制來(lái)發(fā)現(xiàn)訪問(wèn)服務(wù)的實(shí)際地址和端口。

12、無(wú)狀態(tài)進(jìn)程

云原生應(yīng)用應(yīng)該是無(wú)狀態(tài)的。所有的狀態(tài)信息都應(yīng)該從應(yīng)用中抽離出來(lái),并保存在支撐服務(wù)中,比如數(shù)據(jù)庫(kù)中。正因?yàn)閼?yīng)用是無(wú)狀態(tài)的,才可以由云平臺(tái)快速的啟動(dòng)和停止,并進(jìn)行垂直或水平擴(kuò)展。

13、并發(fā)性

云原生應(yīng)用使用水平擴(kuò)展來(lái)并發(fā)運(yùn)行多個(gè)實(shí)例,使用負(fù)載均衡來(lái)把請(qǐng)求分配到某個(gè)實(shí)例進(jìn)行處理。

14、遙測(cè)數(shù)據(jù)

云原生應(yīng)用需要收集一系列遙測(cè)數(shù)據(jù),包括應(yīng)用性能指標(biāo)、運(yùn)行狀態(tài)和日志等,這些遙測(cè)數(shù)據(jù),對(duì)于云平臺(tái)和應(yīng)用來(lái)說(shuō)同等重要。云平臺(tái)可以用性能指標(biāo)來(lái)進(jìn)行自動(dòng)水平擴(kuò)展,比如,Kubernetes 支持 Pod 的自動(dòng)水平擴(kuò)展,當(dāng) CPU 的利用率超過(guò)預(yù)定的閾值時(shí),會(huì)自動(dòng)啟動(dòng)新的 Pod 來(lái)處理請(qǐng)求。性能指標(biāo)分成兩類(lèi):一類(lèi)是業(yè)務(wù)無(wú)關(guān)的,比如請(qǐng)求的數(shù)量、請(qǐng)求的處理速度、以及平均的請(qǐng)求處理時(shí)間等;第二類(lèi)是業(yè)務(wù)相關(guān)的,需要應(yīng)用根據(jù)業(yè)務(wù)需求進(jìn)行收集,比如處理的訂單數(shù)量和不同商品的銷(xiāo)售情況等。云原生應(yīng)用通常會(huì)創(chuàng)建儀表盤(pán)來(lái)實(shí)時(shí)展示整體的運(yùn)行狀態(tài),方便運(yùn)維人員進(jìn)行監(jiān)控。

15、認(rèn)證和授權(quán)

云原生應(yīng)用應(yīng)該是安全的,安全應(yīng)該在應(yīng)用的設(shè)計(jì)階段就充分考慮。在實(shí)現(xiàn)中,可以使用基于角色的訪問(wèn)控制(RBAC)來(lái)保護(hù) API,已經(jīng)有大量的開(kāi)源框架來(lái)幫助實(shí)現(xiàn)認(rèn)證和授權(quán)。

關(guān)于云原生應(yīng)用是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

當(dāng)前名稱(chēng):云原生應(yīng)用是什么
文章源于:http://bm7419.com/article36/igossg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、用戶(hù)體驗(yàn)、定制網(wǎng)站定制開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司