這篇文章給大家介紹云原生應(yīng)用是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
十載的荷塘網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(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è)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
顧名思義,云原生應(yīng)用的概念由云和原生兩個(gè)部分組成,云在這里指的是云平臺(tái),也就是平臺(tái)即服務(wù)(Platform as a Service,PaaS);原生應(yīng)用指的是專門針對(duì)云平臺(tái)而設(shè)計(jì)和實(shí)現(xiàn)的,充分利用了云平臺(tái)的特性。應(yīng)用的微服務(wù)可以專注于實(shí)現(xiàn)業(yè)務(wù)邏輯,而把微服務(wù)架構(gòu)的復(fù)雜度交給云平臺(tái)來(lái)解決。
原生這個(gè)詞在軟件開發(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)用相比,總結(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)用使用公開 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)用開發(fā)中出現(xiàn)了必須修改 API 的情況,那造成的影響是很大的。API 優(yōu)先確保了盡可能減少在開發(fā)中對(duì) API 進(jìn)行修改。
API 優(yōu)先的另外一個(gè)好處是可以提高開發(fā)效率。API 確定之后,可以利用工具生成文檔和模擬服務(wù)器,API 的使用者可以根據(jù)文檔來(lái)編寫使用 API 的代碼。測(cè)試人員可以編寫 API 相關(guān)的測(cè)試用例,并用模擬服務(wù)器運(yùn)行測(cè)試。不同的團(tuán)隊(duì)可以并行工作,從而提高效率。
3、依賴管理
云原生應(yīng)用應(yīng)該管理自己的依賴,Java 開發(fā)人員對(duì)依賴管理應(yīng)該并不陌生,常用的 Java 構(gòu)建工具 Maven 和 Gradle 都提供了依賴管理的支持。在開發(fā)過(guò)程中,只需要利用構(gòu)建工具的支持即可;在管理依賴時(shí),則需要區(qū)分應(yīng)用自帶的依賴和運(yùn)行環(huán)境提供的依賴。云原生應(yīng)用通常會(huì)包含全部所需的依賴,尤其是以容器形式運(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)行流程,如下圖所示。
設(shè)計(jì)
設(shè)計(jì)在云原生應(yīng)用的開發(fā)中必不可少。傳統(tǒng)應(yīng)用通常采用瀑布式的開發(fā)流程,瀑布式的開發(fā)流程中會(huì)分配足夠的時(shí)間進(jìn)行設(shè)計(jì)。云原生應(yīng)用一般采用敏捷軟件開發(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í),通常有開發(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)用開發(fā)中創(chuàng)建的三種不同類型的實(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)傳遞配置值,還可以使用類似 Spring Cloud Config 這樣的專門配置服務(wù)器來(lái)管理配置值,憑據(jù)都應(yīng)該從源代碼倉(cāng)庫(kù)中刪除。
6、日志
日志是應(yīng)用開發(fā)中不可或缺的部分。與傳統(tǒng)應(yīng)用不同的是,云原生應(yīng)用并不需要對(duì)日志的輸出方式進(jìn)行很多配置,只是簡(jiǎn)單地把日志寫到標(biāo)準(zhǔn)輸出流(stdout)和標(biāo)準(zhǔn)錯(cuò)誤流(stderr)。日志的收集和處理由云平臺(tái)上的其他服務(wù)來(lái)提供,這把應(yīng)用開發(fā)人員從日志管理相關(guān)的任務(wù)中解放出來(lái)。云平臺(tái)上的日志管理服務(wù)非常多,開源的典型實(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í)例作為替代??焖偻V箲?yīng)用和快速啟動(dòng)應(yīng)用一樣重要,快速停止應(yīng)用保證了資源可以被及時(shí)釋放。
8、支撐服務(wù)
云原生應(yīng)用的運(yùn)行離不開支撐服務(wù)。支撐服務(wù)是一個(gè)寬泛的概念,包括數(shù)據(jù)庫(kù)、消息中間件、緩存、用戶認(rèn)證和授權(quán)、存儲(chǔ)等。連接這些支撐服務(wù)的配置信息應(yīng)該被抽離出來(lái),在運(yùn)行時(shí)根據(jù)部署環(huán)境提供實(shí)際值。
9、環(huán)境等同
云原生應(yīng)用的不同部署環(huán)境是等同的。開發(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ù)查詢等,這些任務(wù)通常并不屬于業(yè)務(wù)流程的一部分,更多的是為了管理和運(yùn)維的需要。這些任務(wù)在執(zhí)行中會(huì)用到云原生應(yīng)用所依賴的支撐服務(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)用的邊界。
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)的端口,并不是外部用戶或其他服務(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)分成兩類:一類是業(yè)務(wù)無(wú)關(guān)的,比如請(qǐng)求的數(shù)量、請(qǐng)求的處理速度、以及平均的請(qǐng)求處理時(shí)間等;第二類是業(yè)務(wù)相關(guān)的,需要應(yīng)用根據(jù)業(yè)務(wù)需求進(jìn)行收集,比如處理的訂單數(shù)量和不同商品的銷售情況等。云原生應(yīng)用通常會(huì)創(chuàng)建儀表盤來(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)有大量的開源框架來(lái)幫助實(shí)現(xiàn)認(rèn)證和授權(quán)。
關(guān)于云原生應(yīng)用是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
當(dāng)前名稱:云原生應(yīng)用是什么
文章源于:http://jinyejixie.com/article36/igossg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、用戶體驗(yàn)、定制網(wǎng)站、定制開發(fā)、移動(dòng)網(wǎng)站建設(shè)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(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)