什么是「云原生」數(shù)據(jù),以及為什么它很重要?

大數(shù)據(jù)

作者:Richard Seroter

你可能聽說過“云原生應(yīng)用程序”,它是指為適應(yīng)變更、擴展性、彈性和可管理性而構(gòu)建的軟件。通常情況下,它類似微服務(wù)和容器。無論是在公有云還是私有云上運行,云原生應(yīng)用程序都利用了主機平臺提供的彈性和自動化。

但這些應(yīng)用程序?qū)ζ渌蕾嚨臄?shù)據(jù)功能有什么影響?云原生應(yīng)用程序有像12因素標(biāo)準(zhǔn)這樣的藍圖來指導(dǎo)設(shè)計,但你的數(shù)據(jù)服務(wù)卻沒有。

下面,我們將了解云原生數(shù)據(jù)的十大特點,以及為什么它們可以幫助你開發(fā)出更好的軟件。當(dāng)然,你可能既不想也不需要遵循所有的原則。但不管怎樣,它們應(yīng)該是在現(xiàn)代系統(tǒng)中收集、存儲和檢索數(shù)據(jù)時最重要的東西。

1. 云原生數(shù)據(jù)以多種方式進行儲存

15年前,你在哪里存儲數(shù)據(jù)?一般來說,你有一個本地或通過網(wǎng)絡(luò)連接的文件系統(tǒng),以及一個關(guān)系型數(shù)據(jù)庫。你將二進制內(nèi)容保存在文件中,將事務(wù)性數(shù)據(jù)放在規(guī)范化數(shù)據(jù)庫中?,F(xiàn)在,云原生數(shù)據(jù)以各種不同的方式生成,并駐留在許多地方。

云原生數(shù)據(jù)可能位于事件日志、關(guān)系數(shù)據(jù)庫、文檔或鍵值存儲、對象存儲、網(wǎng)絡(luò)存儲、緩存或冷存儲(cold storage)中。使用何種方式取決于具體情況。如何存儲對持久性要求較高的媒體文件?可以使用對象存儲。將未使用的事務(wù)性數(shù)據(jù)保存至監(jiān)管要求的時間?把它放在冷存儲里。為高流量Web系統(tǒng)提供產(chǎn)品目錄信息?考慮使用緩存或鍵值存儲吧。對延遲、讀取性能、持久性等方面的考慮將幫你縮小選擇范圍。

請注意,在云原生系統(tǒng)中,統(tǒng)一日志通常為記錄系統(tǒng)。物化視圖表示出了數(shù)據(jù)的不同用途。這是一種與眾不同的數(shù)據(jù)存儲思維方式,顛覆了許多人對數(shù)據(jù)庫的認(rèn)識! 統(tǒng)一日志掌握著各種輸入源的事務(wù)信息。這些內(nèi)容可能遍布在你的應(yīng)用程序或緩存中的對象或記錄中。這可能是存儲數(shù)據(jù)的一種新方法,但事實證明它是一個很好的解決方案。

也就是說,你不必扔掉可信賴的關(guān)系數(shù)據(jù)庫。相反,重新考慮如何使用它。例如,如果你一直在使用關(guān)系數(shù)據(jù)庫來保存應(yīng)用程序的會話狀態(tài),那么請考慮引入類似Redis的東西,并學(xué)習(xí)如何鍵值存儲。

與此同時,引入像Google Cloud Spanner這樣的現(xiàn)代關(guān)系型數(shù)據(jù)庫,這個數(shù)據(jù)庫專門為地理彈性和云規(guī)模性能而設(shè)計?;蚴褂冕槍焖俨檎液透呖捎眯赃M行過優(yōu)化的NoSQL數(shù)據(jù)庫,對象存儲就是一種很容易上手的數(shù)據(jù)庫。盡可能避免使用(本地)文件系統(tǒng)依賴項,并重構(gòu)應(yīng)用程序,讓它們使用外部存儲。

2. 云原生數(shù)據(jù)沒有固定模式

絕大多數(shù)情況下,你可以看到云原生應(yīng)用程序和服務(wù)以JSON形式來處理數(shù)據(jù)。也就是說,你也可以使用protocol buffer或傳統(tǒng)的XML來構(gòu)造數(shù)據(jù)。無論如何,云原生應(yīng)用程序優(yōu)先考慮適應(yīng)性。這意味著它很容易適應(yīng)變化。如果數(shù)據(jù)結(jié)構(gòu)發(fā)生變化,你也要跟著不斷地修改數(shù)據(jù)庫表結(jié)構(gòu)或重新生成類文件,這種情況下要做到快速適應(yīng)變化很難。

對于上述問題,可以考慮使用多樣化的存儲。如果你要求所有數(shù)據(jù)都符合一種固定的模式,并靈活地插入到SQL數(shù)據(jù)庫中,那么就沒必要約束自己??梢钥紤]減少對ORM和類的重度使用,因為要對它們作出變更比較困難。

如果你喜歡使用結(jié)構(gòu)化數(shù)據(jù)模式,請在數(shù)據(jù)庫外層使用設(shè)計良好的服務(wù)門面。通過版本化API的方式來添加新功能或修改數(shù)據(jù)。

3. 云原生數(shù)據(jù)具有復(fù)制冗余

在學(xué)習(xí)軟件工程時,我們學(xué)到了什么?不要重復(fù)。這是很有價值的指導(dǎo)原則,但云原生應(yīng)用程序的數(shù)據(jù)可能不會只存在于一個地方。

你會發(fā)現(xiàn)公有云數(shù)據(jù)庫提供了優(yōu)秀的彈性。Amazon RDS這樣的服務(wù)使創(chuàng)建異步更新的只讀副本變得很容易。微軟Azure SQL數(shù)據(jù)庫支持地域分布式。數(shù)據(jù)保存在一個地方,同時復(fù)制到另一個地方。在使用非關(guān)系型數(shù)據(jù)庫時,不存在存儲所有數(shù)據(jù)的“主”服務(wù)器,數(shù)據(jù)被復(fù)制到許多機器上。這樣可以提升彈性,但通常要犧牲一致性。

在你引入緩存時,你發(fā)現(xiàn)需要同時讀寫緩存。 緩存中的數(shù)據(jù)最終會被寫入記錄系統(tǒng)。緩存本身是一種數(shù)據(jù)復(fù)制的形式,并且此副本為你提供了更好的性能和彈性。

數(shù)據(jù)通常從邊緣流向內(nèi)部系統(tǒng),比如通過云網(wǎng)關(guān)從客戶端設(shè)備移動到應(yīng)用程序和數(shù)據(jù)存儲中?;蛘?,在處理數(shù)據(jù)時,它們可能會被保存、過濾或聚合。數(shù)據(jù)可能不會在這些過程中消失,它們會被用于后續(xù)的分析比較或計算。

雖然“記錄系統(tǒng)”非常重要,但你的云原生數(shù)據(jù)可能會被多次復(fù)制,用于處理、緩存和多云存儲。

4. 云原生數(shù)據(jù)通過服務(wù)接口進行集成

看看Google Cloud Spanner或Amazon DynamoDB這些云數(shù)據(jù)庫的文檔,可以看到什么?它們的API是基于Web服務(wù)(REST)的,沒有驅(qū)動程序,沒有固定的IP地址。而同樣的云廠商也提供傳統(tǒng)的關(guān)系數(shù)據(jù)庫服務(wù)(例如Google Cloud SQL、Amazon RDS),它們使用標(biāo)準(zhǔn)的客戶端應(yīng)用程序、驅(qū)動程序和主機名來查詢數(shù)據(jù)庫。不過,你將看到通過服務(wù)API訪問云數(shù)據(jù)的趨勢,而不是直接訪問底層的服務(wù)器和原始模式。從Salesforce.com中提取數(shù)據(jù)時,你不能訪問底層的Oracle數(shù)據(jù)庫。相反,你可以通過一個精心設(shè)計的服務(wù)API來管理數(shù)據(jù)的使用和結(jié)構(gòu)。

有一種全新的集成平臺,可滿足云端點的要求。微軟提供了Logic App,戴爾提供了Dell Boomi,還有更多像IFTTT這樣的用戶友好型工具。它們有一個共同點,就是它們都連接到不同云系統(tǒng)的主機上,并通過服務(wù)接口進行集成。在設(shè)計云原生數(shù)據(jù)策略時,應(yīng)該考慮如何在應(yīng)用程序上提供對外的數(shù)據(jù)端點。

5. 云原生數(shù)據(jù)以自助服務(wù)為導(dǎo)向

可能有人認(rèn)為,云計算在十幾年前得以發(fā)展的主要原因是自助服務(wù)。企業(yè)開發(fā)人員不再受制于晦澀的企業(yè)規(guī)則來獲取硬件。而且,創(chuàng)業(yè)公司不必進行大規(guī)模的資本投資來嘗試商業(yè)理念。

云原生數(shù)據(jù)平臺支持按需資源調(diào)配和自助服務(wù)配置。這是不可改變的事實。如果你的數(shù)據(jù)存儲跟不上,那么不斷部署和擴展云原生應(yīng)用程序有什么意義呢?事實是,云原生數(shù)據(jù)存儲在數(shù)據(jù)庫、緩存和文件存儲中,可以很容易進行調(diào)配,并自動或通過簡單的API進行伸縮。數(shù)據(jù)的加載或抽取是通過已知API來完成的。我們不能忽視對共享身份、訪問和存儲策略方面的問題,但這些應(yīng)該是自動化分配的一部分,或者能夠在事后進行審計。

雖然公有云為云原生數(shù)據(jù)存儲設(shè)置了標(biāo)桿,但在一般站點上獲得這些功能并不是不可能的。如果說“原生云”運維是指通過軟件來運行軟件,那么任何一種內(nèi)部數(shù)據(jù)產(chǎn)品都必須作為平臺運行。

6. 云原生數(shù)據(jù)與其他租用者是隔離的

出于性能、敏捷性和安全方面的考慮,云原生數(shù)據(jù)不存放于單個共享實例中。

我們都習(xí)慣于構(gòu)建大規(guī)模的數(shù)據(jù)庫實例,從而存儲所有內(nèi)容。共享容量是危險的,不管共享的容量是大是小。相鄰的租戶會對彼此產(chǎn)生級聯(lián)影響。所有租戶都受制于相同的軟件升級時間窗和災(zāi)難恢復(fù)策略。從安全的角度來看,我們傾向于為特定數(shù)據(jù)庫的用戶分配權(quán)限。但是隨著租戶數(shù)量的增加,你將擁有一個訪問控制規(guī)則網(wǎng)絡(luò),這可能會導(dǎo)致將某些權(quán)限授予不需要它們的人。

云原生數(shù)據(jù)支持為每個租戶分配單個數(shù)據(jù)庫實例。 無論是在共享云平臺還是在內(nèi)部環(huán)境中,這些數(shù)據(jù)庫都被分配給單獨的服務(wù)和應(yīng)用程序,而不是整個企業(yè)。這意味著團隊可以控制何時以及如何升級、可以擴展的容量、以及誰可以訪問。這些微型數(shù)據(jù)庫提供了更大的靈活性,因為每個團隊可以選擇最適合他們應(yīng)用程序或服務(wù)的數(shù)據(jù)庫引擎和部署模型。

7. 云原生數(shù)據(jù)在托管平臺上

云原生:它是由軟件運行的軟件。特別是對于數(shù)據(jù)庫,平臺是關(guān)鍵的部分。這是有效管理不斷增長的數(shù)據(jù)庫實例的唯一方法。

托管數(shù)據(jù)庫平臺提供了什么?首先是安裝和配置。你再也無需在精心構(gòu)建的集群上手動安裝Microsoft SQL Server,這樣做容易出錯,也很耗時。開發(fā)人員和應(yīng)用程序團隊需要單擊一個按鈕或調(diào)用一個API,從而在他們想要的任何位置獲得正確配置的數(shù)據(jù)庫實例。

托管平臺同時提供了“day 2”管理。包括內(nèi)置監(jiān)控、基礎(chǔ)架構(gòu)擴展、補丁、版本升級和故障恢復(fù)。需要一個只讀副本嗎?只需片刻就可獲得一個Amazon RDS實例。需要高可用性嗎?Microsoft Azure Cosmos DB可以處理節(jié)點(或區(qū)域)故障,而且不需要修改代碼。這些都不是可有可無的功能,它們代表了大公司存儲和訪問云原生數(shù)據(jù)的方式。

8. 云原生數(shù)據(jù)不害怕橫向擴展

當(dāng)你聽到“云”這個詞時,除了想到“靈活性”之外,你可能也會想到“擴展”這個詞?;ヂ?lián)網(wǎng)上充斥著網(wǎng)絡(luò)公司和初創(chuàng)公司的例子,這些公司處理數(shù)十億甚至數(shù)萬億的數(shù)據(jù)點。雖然你可能不用面對現(xiàn)在的擴展水平,但仍然需要規(guī)劃未來的增長。與云原生應(yīng)用程序一樣,你的數(shù)據(jù)容量應(yīng)側(cè)重于橫向擴展,而不是縱向擴展。

設(shè)備將會產(chǎn)生前所未有的數(shù)據(jù)量。數(shù)據(jù)中心的硬件和軟件發(fā)出診斷信息。而現(xiàn)在,云端的服務(wù)在運行過程中也會發(fā)出各種事件。業(yè)務(wù)應(yīng)用程序生成和使用各種數(shù)據(jù)。當(dāng)你采用云原生數(shù)據(jù)方法時,將面臨不斷增加的數(shù)據(jù)量。

你面臨著更多的數(shù)據(jù),它們產(chǎn)生的速度越來越快。云原生數(shù)據(jù)流經(jīng)實時消息系統(tǒng)或事件流系統(tǒng),并按TB單位進行存儲。為了實現(xiàn)這一點,你需要確保消息傳遞中間件是為突發(fā)事件和AlwaysOn可用性而設(shè)計的。傳統(tǒng)上,這意味著需要預(yù)先分配巨型集群。在云原生世界中,你的底層平臺應(yīng)該根據(jù)需求來擴展消息傳遞層。

你的數(shù)據(jù)庫(和數(shù)據(jù)微服務(wù))必須能夠處理小批量或大批量的數(shù)據(jù)更新。這可能會影響你設(shè)計RDBMS模式的方式,也可能影響你在為密集型工作負載選擇使用無模式時做出的決策。不再使用大規(guī)模的單個數(shù)據(jù)庫實例,而是考慮使用可以擴展到多實例的數(shù)據(jù)庫。橫向擴展你的數(shù)據(jù)庫可能會帶來事務(wù)性權(quán)衡,但你獲得了更好的靈活性。這意味著較小的初始占用空間,并為不可避免的實例(和站點)故障做好準(zhǔn)備。

9. 云原生數(shù)據(jù)是經(jīng)常被使用和丟棄的

清除數(shù)據(jù)可能是一個需要克服的心理障礙。我們?yōu)榱恕耙苑廊f一”而存儲數(shù)據(jù)。雖然云原生數(shù)據(jù)容易擴展(參見上文),但很多數(shù)據(jù)都只有臨時用途。

可以肯定的是,大量的云原生數(shù)據(jù)被無限期地保存。但是,你會注意到,越來越多的數(shù)據(jù)被處理(在某個地方)并被丟棄?;蛟S它們在邊緣聚集,然后發(fā)送一個概要事件到內(nèi)部系統(tǒng)。或者它們在一定時間段內(nèi)被用來查找服務(wù)器性能異常,隨后刪除。它們可以是機器學(xué)習(xí)模型生成的即時購物建議,并在購物者離開網(wǎng)站時刪除。

不要覺得好像要儲存一切數(shù)據(jù)。要知道,你現(xiàn)在處理的數(shù)據(jù)的生命周期比以往任何時候都來得短暫,并在規(guī)劃其存儲介質(zhì)之前,計算出數(shù)據(jù)的生命周期。

10. 云原生數(shù)據(jù)按照實時和批量的方式進行分析

流數(shù)據(jù)非常流行,但據(jù)研究公司Gartner的報告顯示,85%的企業(yè)仍然青睞面向批處理的技術(shù)。這一數(shù)字將隨著時間的推移而減少,但云原生數(shù)據(jù)同時需要實時和批處理。

基于云的流引擎(如AWS Kinesis或Azure Event Hubs)簡化了無邊界事件的處理??蛻羰褂眠@些引擎來檢測欺詐、更新定價或揭示性能問題。這些引擎還將數(shù)據(jù)轉(zhuǎn)儲到數(shù)據(jù)倉庫中,進行更復(fù)雜的批量分析。在那里,可以對相同的數(shù)據(jù)進行現(xiàn)場分析和更有意義的分析 。

總結(jié)

現(xiàn)在還處在云原生數(shù)據(jù)的早期階段。我們?nèi)绾螌⑦z留數(shù)據(jù)存儲引入到云原生應(yīng)用程序中?處理多云數(shù)據(jù)需求的正確方法是什么?鎖定和可移植性在哪里?雖然這些問題還沒有明確的答案,但是本文率先研究了云原生概念如何應(yīng)用于數(shù)據(jù)領(lǐng)域中。在未來的幾個月甚至幾年中,我認(rèn)為我們將花更多的時間來探索這一重點領(lǐng)域。

極客網(wǎng)企業(yè)會員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2017-11-23
什么是「云原生」數(shù)據(jù),以及為什么它很重要?
作者:Richard Seroter 你可能聽說過“云原生應(yīng)用程序”,它是指為適應(yīng)變更、擴展性、彈性和可管理性而構(gòu)建的軟件。通常情況下,它類似微服務(wù)和容器。無

長按掃碼 閱讀全文