
此外,云原生應(yīng)用通常遵循12因素應(yīng)用框架的原則。它們圍繞以下方面構(gòu)建:
性能:應(yīng)用程序在設(shè)計(jì)時(shí)考慮可擴(kuò)展性,旨在在規(guī)模上表現(xiàn)良好。
彈性:應(yīng)用程序由伸縮性良好的小型、可擴(kuò)展的組件構(gòu)建而成。
韌性:應(yīng)用程序?qū)收暇哂泻軓?qiáng)的復(fù)原能力,可自動(dòng)更換發(fā)生故障的組件且不會(huì)中斷其他組件的運(yùn)行。
安全性:在構(gòu)建應(yīng)用程序時(shí)考慮安全性,確保應(yīng)用程序或其數(shù)據(jù)不被攻擊者破壞。
原生架構(gòu)原則
在構(gòu)建云原生應(yīng)用程序時(shí),首先應(yīng)構(gòu)建一個(gè)可以在多個(gè)維度上不斷移動(dòng)的系統(tǒng),以實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)展,自動(dòng)處理故障,并盡可能輕松的添加或刪除組件。以下幾個(gè)原則可以使構(gòu)建的云原生架構(gòu)更加強(qiáng)大、更加適應(yīng)變化并且更容易維護(hù)。
1.自動(dòng)化設(shè)計(jì)
創(chuàng)建可以部署、修復(fù)和擴(kuò)展系統(tǒng)的自動(dòng)化流程,并且生成相關(guān)日志和事件。構(gòu)建系統(tǒng)以自動(dòng)處理:
提供的基礎(chǔ)架構(gòu),如機(jī)器實(shí)例;
CI/CD管道中的生成、測(cè)試和部署階段;
基于工作負(fù)載或其他應(yīng)用程序要求的動(dòng)態(tài)可擴(kuò)展性;
備份、運(yùn)行狀況監(jiān)視和故障恢復(fù)。
2.盡可能保持無(wú)狀態(tài)
雖然一些云原生純粹主義者認(rèn)為云原生應(yīng)用程序應(yīng)該是無(wú)狀態(tài)的,但在現(xiàn)實(shí)世界中可能很難實(shí)現(xiàn)無(wú)狀態(tài)應(yīng)用程序的開發(fā)。然而也應(yīng)盡可能使用無(wú)狀態(tài)組件,因?yàn)楦櫡植际綉?yīng)用程序中的管理狀態(tài)(如當(dāng)前正在運(yùn)行的實(shí)例數(shù))是困難的。無(wú)狀態(tài)組件使擴(kuò)展(添加更多副本)、修復(fù)(刪除并替換為新實(shí)例)、回滾和工作負(fù)載平衡(無(wú)需關(guān)心哪個(gè)實(shí)例正在處理哪些事務(wù)的復(fù)雜邏輯)變得更加容易。
3.彈性設(shè)計(jì)
通過(guò)在設(shè)計(jì)中添加冗余將彈性構(gòu)建到云原生應(yīng)用程序中。云原生應(yīng)用程序通過(guò)使用實(shí)例集群、數(shù)據(jù)復(fù)制以及多可用區(qū)或多區(qū)域云部署來(lái)避免單點(diǎn)故障。那些必須在本地運(yùn)行的應(yīng)用程序應(yīng)使用混合架構(gòu)利用公有云以實(shí)現(xiàn)高可用性和災(zāi)難恢復(fù),至少對(duì)于其某些組件而言。
一些常見的彈性機(jī)制:
能夠識(shí)別由連接丟失或服務(wù)超時(shí)等臨時(shí)問(wèn)題引起的暫時(shí)性故障,進(jìn)行重試請(qǐng)求;
實(shí)現(xiàn)斷路器模式,檢查重試操作的次數(shù),并在后續(xù)重試時(shí)返回錯(cuò)誤而不激活服務(wù);
允許服務(wù)在它們所依賴的其他服務(wù)出現(xiàn)故障時(shí)正常降級(jí),并且仍提供合理的用戶體驗(yàn);
根據(jù)應(yīng)用程序的使用速率限制和節(jié)流來(lái)識(shí)別和限制大容量用戶;
使用補(bǔ)償事務(wù),將業(yè)務(wù)事務(wù)分解為一系列較小的事務(wù),更容易在分布式系統(tǒng)中實(shí)現(xiàn)事務(wù)一致性。
4.使用微邊界構(gòu)建每個(gè)組件
云原生應(yīng)用不僅應(yīng)該從一開始就設(shè)計(jì)安全性,還應(yīng)該在假設(shè)沒有可信任組件的情況下進(jìn)行設(shè)計(jì)。因?yàn)閼?yīng)用程序與其用戶之間,甚至內(nèi)部組件之間可能沒有專用網(wǎng)絡(luò),此時(shí)應(yīng)該致力于強(qiáng)化所有組件、加密數(shù)據(jù)并在組件之間實(shí)現(xiàn)身份驗(yàn)證,使應(yīng)用程序更具彈性,并能夠在不受信任的環(huán)境中靈活地部署組件。
5.構(gòu)建多語(yǔ)言架構(gòu)
云原生應(yīng)用不需要高度集成的架構(gòu)、使用相同語(yǔ)言編寫的組件以及使用相同的技術(shù)和框架。由于REST
API可以公開每個(gè)組件的功能,允許異構(gòu)組件相互通信和使用,因此可以在充分考慮團(tuán)隊(duì)能力之后,使用能夠提供最大價(jià)值和最快上市時(shí)間的語(yǔ)言或技術(shù)編寫每個(gè)組件。
6.組件不可變
通過(guò)基礎(chǔ)架構(gòu)組件不可變以引入高級(jí)別的敏捷性和靈活性。這也就意味著不允許在部署后對(duì)配置服務(wù)器或虛擬機(jī)(VM)進(jìn)行修改。
在部署不可變服務(wù)器后,就可以不再對(duì)其進(jìn)行修改,相反,若沒有部署不可變服務(wù)器,則應(yīng)確保已部署的服務(wù)器保持原樣且不進(jìn)行任何修改,以便如果出現(xiàn)問(wèn)題也可以快速輕松地更換服務(wù)器并保持應(yīng)用程序運(yùn)行。
以下是使用不可變基礎(chǔ)架構(gòu)的幾個(gè)主要優(yōu)點(diǎn):
不可變組件有助于實(shí)現(xiàn)一致且可靠的基礎(chǔ)架構(gòu),使測(cè)試變得更加簡(jiǎn)單明了。
部署不可變組件可以更簡(jiǎn)單、更可預(yù)測(cè)。
不可變組件的每次部署都是版本化和自動(dòng)化,這使得環(huán)境回滾更加容易和簡(jiǎn)單。
配置飄逸、雪花服務(wù)器和錯(cuò)誤得到緩解,甚至完全消除。
使用云服務(wù)時(shí),自動(dòng)伸縮也毫不費(fèi)力。
可變服務(wù)器會(huì)增加成本和迭代時(shí)間,嚴(yán)重延遲上市時(shí)間,不可變的基礎(chǔ)設(shè)施則促進(jìn)了敏捷開發(fā)。不可變基礎(chǔ)架構(gòu)可提高已部署環(huán)境的可靠性、一致性和效率,開發(fā)人員可以在幾分鐘內(nèi)重新創(chuàng)建環(huán)境。
云原生架構(gòu)的優(yōu)缺點(diǎn)
云原生架構(gòu)有許多優(yōu)點(diǎn):
成本:云提供低成本選項(xiàng),確保系統(tǒng)不間斷運(yùn)行,為客戶提供服務(wù),此外還可以利用各種云交付功能。若在企業(yè)內(nèi)部提供這些功能,則既耗時(shí)又昂貴。
可靠性:云環(huán)境提供彈性和可靠性選項(xiàng),例如可用性區(qū)域,可以確保系統(tǒng)永遠(yuǎn)不會(huì)出現(xiàn)故障,免受中斷的影響,因此避免停機(jī)造成的不可挽回的損失。
敏捷性:敏捷開發(fā)需要不斷的測(cè)試和優(yōu)化,這在傳統(tǒng)的整體架構(gòu)中是很困難的,因?yàn)橐粋€(gè)小小的改變可能會(huì)破壞整個(gè)系統(tǒng)。云原生系統(tǒng)在構(gòu)建時(shí)考慮了持續(xù)變化,因此可以更輕松地更新和調(diào)整應(yīng)用程序。
靈活性:云原生設(shè)計(jì)與平臺(tái)無(wú)關(guān),因此若當(dāng)前系統(tǒng)不適合開發(fā),可以切換到新環(huán)境,而不必從頭開始重新編譯。
云原生架構(gòu)的缺點(diǎn)包括:
解決問(wèn)題:在傳統(tǒng)體系架構(gòu)中可以遵循線性計(jì)劃來(lái)識(shí)別問(wèn)題。而云原生設(shè)計(jì)存在復(fù)雜網(wǎng)絡(luò)中相互連接和交互的容器,并且特定組件集之間的路徑可能不明確。如果問(wèn)題的根源分散在多個(gè)容器中,則可能更難找出根本原因。
安全性:由于系統(tǒng)是由大量動(dòng)態(tài)分布式組件構(gòu)成,云原生架構(gòu)通常更難以監(jiān)控和保護(hù)。
知識(shí)差距:如果開發(fā)人員不熟悉云原生系統(tǒng),則需要重新學(xué)習(xí),就像使用新語(yǔ)言一樣,重要的是需要能夠很好地理解新概念,以避免造成嚴(yán)重?fù)p失的錯(cuò)誤。
在考慮構(gòu)建新的云原生架構(gòu)時(shí),企業(yè)組織需要仔細(xì)權(quán)衡各種優(yōu)缺點(diǎn),以便為業(yè)務(wù)、客戶和利益相關(guān)者做出正確的決策。