云原生數(shù)據(jù)系統(tǒng)的設(shè)計(jì)考慮
當(dāng)涉及設(shè)計(jì)云原生數(shù)據(jù)系統(tǒng)時(shí),并沒(méi)有特定的托管基礎(chǔ)設(shè)施、編程語(yǔ)言或設(shè)計(jì)模式是您應(yīng)該使用的。云原生系統(tǒng)有各種不同的規(guī)模和形式。然而,確實(shí)存在大多數(shù)遵循相同云原生設(shè)計(jì)原則的系統(tǒng)。讓我們來(lái)看一下云原生架構(gòu)、您應(yīng)該記住的設(shè)計(jì)原則以及構(gòu)成一個(gè)良好的云原生平臺(tái)的特點(diǎn)。
云原生架構(gòu)云原生架構(gòu)本質(zhì)上是為云端構(gòu)建的應(yīng)用程序的設(shè)計(jì)模式。雖然沒(méi)有特定的實(shí)現(xiàn)方式或預(yù)定義的云原生設(shè)計(jì),但最常見(jiàn)的方法是將應(yīng)用程序拆分成多個(gè)微服務(wù),讓每個(gè)微服務(wù)處理不同的功能。每個(gè)微服務(wù)由一個(gè)小團(tuán)隊(duì)維護(hù),并通常部署為容器。
擁抱微服務(wù)云原生設(shè)計(jì)和開(kāi)發(fā)依賴于松散耦合的架構(gòu),在該架構(gòu)中,應(yīng)用程序的不同部分是獨(dú)立開(kāi)發(fā)、操作和部署的。通常通過(guò)使用微服務(wù)來(lái)實(shí)現(xiàn)這一點(diǎn)。
微服務(wù)可以說(shuō)是云原生系統(tǒng)的基礎(chǔ),通過(guò)使用容器,您可以將運(yùn)行時(shí)環(huán)境及其庫(kù)、二進(jìn)制文件和依賴關(guān)系壓縮為一個(gè)邏輯和易于管理的單元,從而獲得實(shí)際好處。因此,應(yīng)用服務(wù)可以根據(jù)需要存儲(chǔ)、復(fù)制、傳輸和使用。
與單體應(yīng)用程序不同,微服務(wù)由小的獨(dú)立服務(wù)組成。
使用微服務(wù)(或松散耦合的架構(gòu))對(duì)于云計(jì)算來(lái)說(shuō)是重要的,原因有很多。例如,它促進(jìn)了簡(jiǎn)化、可擴(kuò)展性和彈性。讓我們更詳細(xì)地看一下為什么會(huì)這樣。
通過(guò)這種架構(gòu),您可以將復(fù)雜的應(yīng)用程序分解為較小的獨(dú)立部分,使應(yīng)用程序開(kāi)發(fā)周期簡(jiǎn)單并易于管理。更不用說(shuō),將應(yīng)用程序配置和基礎(chǔ)代碼分離也使應(yīng)用程序的開(kāi)發(fā)和維護(hù)更加容易。同樣,將核心應(yīng)用程序與后端服務(wù)分離允許代碼庫(kù)以自己的步調(diào)演變和擴(kuò)展。
而且,相較于整個(gè)單體應(yīng)用程序,擴(kuò)展或縮減一個(gè)應(yīng)用程序的個(gè)別部分更容易(也更快)。同樣,由于只需更新需要更改的部分(或微服務(wù)),而不是再次部署新的更新版本的整個(gè)應(yīng)用程序,所以更新應(yīng)用程序更加容易。
擁抱微服務(wù)還增加了韌性,使應(yīng)用程序更可靠。如果微服務(wù)架構(gòu)中的一個(gè)組件失敗,整個(gè)應(yīng)用程序不會(huì)崩潰。它還促進(jìn)了基礎(chǔ)設(shè)施即代碼(Infrastructure as Code),從而為自動(dòng)化部署鋪平了道路。最后,微服務(wù)架構(gòu)通過(guò)API使用無(wú)狀態(tài)進(jìn)程和組件,將每個(gè)微服務(wù)與其他服務(wù)隔離開(kāi)來(lái),從而實(shí)現(xiàn)更好的安全性和效率。
要確保您的應(yīng)用程序遵循松散耦合的架構(gòu),您需要避免在不同部分之間形成緊密耦合的依賴關(guān)系。例如,兩個(gè)微服務(wù)不應(yīng)該依賴于同一個(gè)數(shù)據(jù)庫(kù)。如果它們這樣做,您將無(wú)法獨(dú)立地更新和操作它們。
一切都作為代碼雖然使用微服務(wù)從現(xiàn)代應(yīng)用程序中獲益很重要,但采用自動(dòng)化實(shí)踐也同樣重要。它的目的是優(yōu)化應(yīng)用程序開(kāi)發(fā)流程,使開(kāi)發(fā)人員和用戶都能受益。為此,最終目標(biāo)是實(shí)現(xiàn)EaC - 一切作為代碼。將EaC視為IaC的進(jìn)一步步驟,其中包括應(yīng)用程序代碼庫(kù)、基礎(chǔ)架構(gòu)和平臺(tái)。
這種方法有很多優(yōu)點(diǎn)。例如,它使系統(tǒng)高度可擴(kuò)展,降低了故障的可能性。它還能減少開(kāi)發(fā)成本,改善開(kāi)發(fā)體驗(yàn),并通過(guò)加快開(kāi)發(fā)流程提高上市速度。此外,除了通過(guò)API促進(jìn)用戶與應(yīng)用程序之間的通信,它還促進(jìn)了內(nèi)部流程的自動(dòng)化和通信。
云原生設(shè)計(jì)原則云原生應(yīng)用通常遵循12要素應(yīng)用框架中定義的原則,并圍繞安全性、彈性(和可用性)、彈性和性能(包括可擴(kuò)展性)構(gòu)建。讓我們更詳細(xì)地看一下這些云原生設(shè)計(jì)原則。
可擴(kuò)展性可擴(kuò)展性的理念是為了能夠增加應(yīng)用程序和相關(guān)服務(wù)的額外容量,以處理需求和負(fù)載的增加。尤其是在設(shè)計(jì)可擴(kuò)展性時(shí),應(yīng)考慮每個(gè)應(yīng)用程序?qū)?、如何進(jìn)行擴(kuò)展以及如何避免瓶頸的問(wèn)題。
在這種背景下,有三個(gè)關(guān)鍵方面需要考慮:容量、負(fù)載和數(shù)據(jù)。
在容量方面,需要考慮是否需要擴(kuò)展各個(gè)層,并且在不影響應(yīng)用程序可用性的情況下是否可以進(jìn)行擴(kuò)展。還需要考慮服務(wù)的快速擴(kuò)展速度,并且在非工作時(shí)間是否可以縮小應(yīng)用程序的規(guī)模而不影響運(yùn)營(yíng)。
在數(shù)據(jù)方面,需要考慮您是否可以進(jìn)行擴(kuò)展,并記住服務(wù)的約束條件,比如事務(wù)吞吐量和數(shù)據(jù)庫(kù)大小。找出如何對(duì)數(shù)據(jù)進(jìn)行分區(qū)以進(jìn)一步提高可擴(kuò)展性,同時(shí)在平臺(tái)限制內(nèi)實(shí)現(xiàn)。同樣,您需要找出如何有效和高效地使用平臺(tái)資源。
在負(fù)載方面,您需要確定如何改進(jìn)設(shè)計(jì)以避免瓶頸,并確定如何在高峰時(shí)段使用異步操作來(lái)幫助負(fù)載平衡。還需要探索如何使用所選平臺(tái)提供的不同速率平衡和負(fù)載均衡功能。
確??蓴U(kuò)展性的一種方法是創(chuàng)建可隨時(shí)進(jìn)行擴(kuò)展、修復(fù)和部署的自動(dòng)化流程。您可以設(shè)置系統(tǒng)以生成有意義的日志(從而產(chǎn)生事件),然后將其用作執(zhí)行不同自動(dòng)化活動(dòng)的鉤子。生成的系統(tǒng)應(yīng)能夠自動(dòng)配置基礎(chǔ)設(shè)施,如機(jī)器實(shí)例,構(gòu)建、測(cè)試和部署CI/CD管道中的不同階段,并處理動(dòng)態(tài)擴(kuò)展、健康監(jiān)控和備份。
許多人認(rèn)為云原生系統(tǒng)應(yīng)該是無(wú)狀態(tài)的,但實(shí)際應(yīng)用中很難實(shí)現(xiàn)。但是,由于在分布式應(yīng)用程序中管理狀態(tài)很困難,因此最好在盡可能多的情況下使用無(wú)狀態(tài)組件。這是因?yàn)闊o(wú)狀態(tài)組件使加載、平衡、擴(kuò)展、修復(fù)和回滾更加容易。
可用性可用性指的是在底層操作系統(tǒng)、硬件、網(wǎng)絡(luò)依賴或應(yīng)用程序本身的故障情況下,系統(tǒng)仍能對(duì)用戶有用的能力。重要的原則包括性能、可用時(shí)間、災(zāi)難恢復(fù)和復(fù)制。
在性能方面,您需要定義可接受的性能水平,如何衡量它們以及當(dāng)性能低于可接受水平時(shí)觸發(fā)的操作或事件。還需要確定最可能引起問(wèn)題的應(yīng)用程序部分,以及隊(duì)列中心化設(shè)計(jì)或自動(dòng)縮放是否有助于解決這些問(wèn)題。此外,您還需要確定使云原生系統(tǒng)的某些部分異步化是否有助于提高性能。
可用性保證也是需要考慮的重要因素。特別是需要定義產(chǎn)品應(yīng)滿足的服務(wù)級(jí)別協(xié)議(SLAs),以及您選擇的云服務(wù)是否能夠達(dá)到這些協(xié)議。同時(shí),在災(zāi)難恢復(fù)方面,需要確定在系統(tǒng)故障的情況下如何重新構(gòu)建基于云的系統(tǒng),以及在這種情況下您能承受多少數(shù)據(jù)丟失。您還需要確定在系統(tǒng)故障的情況下如何處理備份、傳輸隊(duì)列和消息,并確定虛擬機(jī)鏡像存儲(chǔ)的位置以及是否有備份。
最后,在復(fù)制方面,您需要確定系統(tǒng)中存在哪些高風(fēng)險(xiǎn)故障部分,以及哪些部分會(huì)受到故障的最大影響。此外,確定是否需要數(shù)據(jù)復(fù)制,以及如何防止復(fù)制損壞的數(shù)據(jù)。
安全性云原生數(shù)據(jù)系統(tǒng)的安全性是一個(gè)相當(dāng)廣泛的話題,涉及許多內(nèi)容。但最重要的是,您需要弄清楚以下幾點(diǎn):
數(shù)據(jù)所在地的法律管轄權(quán)和法律規(guī)定,包括指標(biāo)和故障轉(zhuǎn)移數(shù)據(jù)存儲(chǔ)的國(guó)家。如果您使用混合云應(yīng)用程序,您如何保護(hù)云與企業(yè)網(wǎng)絡(luò)之間的鏈接。是否存在應(yīng)滿足聯(lián)合安全性的任何要求。如何控制對(duì)云提供商管理門(mén)戶的訪問(wèn),處理密碼更改并限制對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。如何處理供應(yīng)商和操作系統(tǒng)的安全更新和補(bǔ)丁??晒芾硇钥晒芾硇允侵咐斫庀到y(tǒng)性能和健康狀況以及管理運(yùn)維的能力。在云方面,我們需要考慮兩個(gè)原則-部署和監(jiān)控。
在部署方面,您需要考慮幾個(gè)問(wèn)題。例如,考慮如何自動(dòng)化部署以及如何在不影響實(shí)時(shí)系統(tǒng)的情況下進(jìn)行修補(bǔ)或重新部署。還要考慮如何檢查部署是否成功,并在部署失敗時(shí)如何回滾。類似地,部署還涉及確定所需的環(huán)境數(shù)量以及它們所需的存儲(chǔ)空間和可用性。
與此同時(shí),在監(jiān)控方面,您需要計(jì)劃如何監(jiān)控應(yīng)用程序(是否使用現(xiàn)成的服務(wù)還是自行開(kāi)發(fā)?)以及在物理上存儲(chǔ)監(jiān)控?cái)?shù)據(jù)的位置。您還需要確定監(jiān)控計(jì)劃將產(chǎn)生多少數(shù)據(jù)以及如何訪問(wèn)指標(biāo)日志。同樣,詢問(wèn)自己是否可以承受一些日志數(shù)據(jù)的丟失,并在運(yùn)行時(shí)是否需要更改監(jiān)控級(jí)別。
可行性最后,可行性包括在時(shí)間和預(yù)算限制下維護(hù)和交付系統(tǒng)的能力。對(duì)于這一原則,您需要考慮以下幾點(diǎn):
是否可能滿足服務(wù)級(jí)別協(xié)議?例如,是否有云提供商保證您需要向客戶提供的可用性?您是否擁有內(nèi)部構(gòu)建云應(yīng)用程序所需的必要經(jīng)驗(yàn)和技能,或者是否需要將其交給第三方?您可以接受什么樣的權(quán)衡,并在復(fù)雜的云提供商定價(jià)中可以花多少資金用于運(yùn)營(yíng)成本?良好的云原生數(shù)據(jù)平臺(tái)特征現(xiàn)在,您已經(jīng)了解了制作云原生平臺(tái)時(shí)應(yīng)牢記的原則和架構(gòu)考慮因素?,F(xiàn)在讓我們看看一個(gè)優(yōu)秀平臺(tái)應(yīng)該提供的一些更多功能。設(shè)計(jì)良好的云原生平臺(tái)的優(yōu)勢(shì)。
良好設(shè)計(jì)的云原生平臺(tái)的優(yōu)勢(shì)(來(lái)源)
成本效益毫無(wú)疑問(wèn),完全托管的云服務(wù)與自行管理的本地服務(wù)之間存在很大差異。然而,前者的彈性和大多數(shù)云平臺(tái)的按需付費(fèi)模式使得可以以最低的資源(同時(shí)也是成本)浪費(fèi)來(lái)運(yùn)行適當(dāng)規(guī)模的系統(tǒng)。
這意味著您不需要擔(dān)心為未使用的資源支付額外費(fèi)用,甚至不需要進(jìn)行容量規(guī)劃。此外,由于云平臺(tái)的多租戶性質(zhì),服務(wù)提供商可以以比自行管理服務(wù)更低的成本定價(jià)他們的服務(wù)。
按使用量付費(fèi)如上所述,大多數(shù)云平臺(tái)采用按使用量付費(fèi)模式,這意味著您只需為實(shí)際使用的資源付費(fèi),而不是根據(jù)預(yù)配置的資源來(lái)支付費(fèi)用。這些資源既可以是高級(jí)別的(如API請(qǐng)求和響應(yīng)),也可以是低級(jí)別的(如內(nèi)存或CPU使用率)。因此,與本地?cái)?shù)據(jù)相比,您無(wú)需為可能根本不使用的許可核心支付費(fèi)用。
彈性和可擴(kuò)展性良好的云原生平臺(tái)還包括可以通過(guò)簡(jiǎn)單的API調(diào)用或單擊進(jìn)行自動(dòng)縮放的服務(wù)。如果平臺(tái)可以根據(jù)定義的策略自動(dòng)縮放服務(wù),那將更好。由于預(yù)先管理的容量規(guī)劃和彈性縮放,只有在極端情況下才會(huì)暴露可擴(kuò)展性限制。
可用性高效的云原生平臺(tái)也具有高可用性,并設(shè)計(jì)為處理大多數(shù)故障。大多數(shù)平臺(tái)提供至少99.95%的服務(wù)級(jí)別協(xié)議,這意味著一年中的停機(jī)時(shí)間不超過(guò)4.5小時(shí),但實(shí)際上,您可以期望更高的可用性。
多租戶多租戶有兩個(gè)好處-可管理性和規(guī)模經(jīng)濟(jì)-大多數(shù)云原生服務(wù)從中受益。您可以通過(guò)像S3這樣的服務(wù)提供最佳用戶體驗(yàn),它以查詢或請(qǐng)求的方式提供服務(wù),而所有租戶都經(jīng)過(guò)良好的隔離,用戶不知道其他租戶也使用同一物理系統(tǒng)。
是的,在某些情況下,用戶確實(shí)需要購(gòu)買專用的計(jì)算資源,如內(nèi)存和CPU(AWS Aurora就是這種情況),但底層基礎(chǔ)設(shè)施,如存儲(chǔ)和網(wǎng)絡(luò),仍然共享。
性能優(yōu)化最后,為了能夠處理不同類型的客戶工作負(fù)載,您的系統(tǒng)應(yīng)該在多個(gè)維度上具有可擴(kuò)展性。約束條件應(yīng)在整個(gè)基礎(chǔ)架構(gòu)中得到對(duì)齊和優(yōu)化,包括硬件、操作系統(tǒng)和應(yīng)用程序。此外,在托管系統(tǒng)的情況下,應(yīng)該有與生產(chǎn)環(huán)境之間的緊密反饋機(jī)制。系統(tǒng)還應(yīng)具備分析和從不同的可擴(kuò)展性和性能相關(guān)事件中學(xué)習(xí)的能力,并推出改進(jìn)措施以優(yōu)化性能。
相關(guān)資訊
- 未來(lái)技術(shù)趨勢(shì):區(qū)塊鏈和邊緣計(jì)算的
- 物聯(lián)網(wǎng)車隊(duì)管理的主要應(yīng)用和優(yōu)勢(shì)
- 物聯(lián)網(wǎng)邊緣技術(shù)為處理器安全應(yīng)用
- AIOT智能物聯(lián)網(wǎng)平臺(tái)架構(gòu)
- 智能家居模擬系統(tǒng)是怎么運(yùn)作的?
- 數(shù)據(jù)網(wǎng)格2.0:兌現(xiàn)去中心化的承諾
- 如今的AI已經(jīng)發(fā)展到什么地步了?
- 物聯(lián)網(wǎng)互連中的光學(xué)濾波器
- “數(shù)字孿生優(yōu)先”如何徹底改變英
- 緩解人工智能翻譯中的偏見(jiàn):促進(jìn)公