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