揭開(kāi)AWS的Timestream數(shù)據(jù)庫(kù)的面紗
AWS因不斷推出新的云計(jì)算服務(wù)而聞名業(yè)界,不過(guò)AWS云計(jì)算服務(wù)太多了,客戶往往難以了解所有的服務(wù),AWS的數(shù)據(jù)庫(kù)也不例外。
AWS至少提供15個(gè)數(shù)據(jù)庫(kù),最新的一個(gè)是Amazon Timestream,9月開(kāi)始面向一般用戶發(fā)布。Timestream主打 “物聯(lián)網(wǎng)”應(yīng)用,主要用于時(shí)間序列數(shù)據(jù)記錄的存儲(chǔ)和檢索,時(shí)間序列指一組與時(shí)間戳相關(guān)的數(shù)據(jù)點(diǎn)。
Timestream與其他時(shí)間序列數(shù)據(jù)庫(kù)一樣用于那些產(chǎn)生連續(xù)數(shù)據(jù)流的應(yīng)用,例如來(lái)自物聯(lián)網(wǎng)傳感器的測(cè)量數(shù)據(jù),這些數(shù)據(jù)的格式可以快速插入和檢索大量的時(shí)間序列事件,進(jìn)而可支持復(fù)雜的分析——每天事實(shí)上可以有數(shù)萬(wàn)億的事件,而且其速度比標(biāo)準(zhǔn)關(guān)系數(shù)據(jù)庫(kù)快1000倍之多。
簡(jiǎn)單一點(diǎn)的時(shí)間序列數(shù)據(jù)可以是跟蹤你每天走的步數(shù),該數(shù)據(jù)還可以與一段時(shí)間內(nèi)的體重聯(lián)系起來(lái),一些企業(yè)則需要做諸如跟蹤和理解快速變化的數(shù)據(jù)(如股票價(jià)格、視頻流或操作機(jī)器的溫度)的業(yè)務(wù),時(shí)間序列數(shù)據(jù)就是必須的。而且,物聯(lián)網(wǎng)設(shè)備數(shù)目在不斷激增,這種數(shù)據(jù)庫(kù)也變得越來(lái)越重要,Timestream競(jìng)爭(zhēng)對(duì)手,例如如開(kāi)源的Prometheus、InfluxData Inc.的InfluxDB和Timescale Inc.的TimescaleDB的迅速崛起也說(shuō)明了這一點(diǎn)。
亞馬遜首席技術(shù)官Werner Vogels在上周在一篇博文中談到Timestream背后的事情。他在接受記者采訪時(shí)表示,Timestream在一定程度上表明了兩點(diǎn),其一,亞馬遜的理念是為各種任務(wù)建立特定的云工具,而不是試圖把這些都放在一個(gè)平臺(tái)上,其二,它表明亞馬遜公司基本架構(gòu)的選擇。下面是訪談對(duì)話內(nèi)容(內(nèi)容經(jīng)過(guò)適當(dāng)編輯修改):
記者:你那篇關(guān)于Timestream的博文好像有個(gè)更大的目標(biāo),而不是僅僅是為了展示它如何工作。
Werner Vogels:我試圖提供一點(diǎn)關(guān)于Timestream數(shù)據(jù)庫(kù)背后的技術(shù)背景,以及一些我們正在建立的其他系統(tǒng)資料。在Timestream這一塊我們做了一些獨(dú)特的架構(gòu)決定,這些決定可能也適用于一般架構(gòu)。例如,我們用了基于單元的架構(gòu),可以減少影響半徑。
另外,不要孤立地優(yōu)化系統(tǒng)。你只是測(cè)量信息傳遞,或只測(cè)量存儲(chǔ),或只測(cè)量查詢,這樣的想法并不能給你一個(gè)整體系統(tǒng)做到真正能優(yōu)化你想做的事情。
記者:Timestream和背后的想法是如何融入到AWS的整體云計(jì)算方法呢?
Werner Vogels:這是我們尋求建立專用數(shù)據(jù)庫(kù)的一部分。對(duì)于很多工程師來(lái)說(shuō),關(guān)系型數(shù)據(jù)庫(kù)是他們用來(lái)做各種事情的錘子。他們知道如何很好地使用這個(gè)工具。但在關(guān)系型數(shù)據(jù)庫(kù)里做時(shí)間序列是個(gè)非常令人頭痛的問(wèn)題。而且很難做到實(shí)時(shí)性。畢竟,我們看到大多數(shù)時(shí)間序列應(yīng)用的實(shí)時(shí)性的作用都頗為重要。
那我們一直在進(jìn)行這種探索,Jeff Bezos多年前說(shuō)過(guò)的一些話真正推動(dòng)了我的架構(gòu)原則。我們?cè)跇?gòu)建工具,而不是構(gòu)建平臺(tái)。舊式平臺(tái)的定義就是,軟件公司發(fā)布下一個(gè)版本,給了你所有的東西,告訴你應(yīng)該如何開(kāi)發(fā)軟件。
過(guò)了一段時(shí)間我們了解到,如果你構(gòu)建的小工具真的是為了一個(gè)特定的目標(biāo)而設(shè)計(jì)的,你可以對(duì)其進(jìn)行優(yōu)化,使得其性能更好或更可靠或?qū)嶋H上更便宜,或確保你能提高開(kāi)發(fā)人員的生產(chǎn)力。
記者:時(shí)間序列數(shù)據(jù)庫(kù)的目的是什么呢?
Werner Vogels:時(shí)間序列就是一個(gè)隨時(shí)間變化的數(shù)據(jù)點(diǎn)序列。如果看一看我們周圍的世界,大量的例子可以納入時(shí)間序列。在許多應(yīng)用里時(shí)間是個(gè)主導(dǎo)因素。例如點(diǎn)擊流分析。你可能想要一個(gè)儀表盤(pán),能實(shí)時(shí)告訴你正在發(fā)生的事情。在這一類的應(yīng)用里,時(shí)間起的作用很重要。有個(gè)專門(mén)的數(shù)據(jù)庫(kù)實(shí)際上能夠讓你實(shí)時(shí)訪問(wèn)當(dāng)前的、即時(shí)的內(nèi)存數(shù)據(jù)。
記者:Timestream是如何工作的呢?
Werner Vogels:Timestream下面有兩個(gè)不同的存儲(chǔ)引擎。其中一個(gè)在內(nèi)存里,基本上就是最新的記錄。時(shí)間序列數(shù)據(jù)庫(kù)里的大多數(shù)記錄都是當(dāng)前時(shí)間記錄。這一類用例涵括了許多當(dāng)前的用例。然后歷史數(shù)據(jù)則在磁性存儲(chǔ)或SSD里。你可以設(shè)置一個(gè)策略,根據(jù)這個(gè)策略確定什么東西需要從內(nèi)存中遷到歷史引擎里。
內(nèi)存存儲(chǔ)的目標(biāo)是那些非?斓牟樵;旧夏憧梢栽趲缀撩雰(nèi)分析幾十GB的數(shù)據(jù)。歷史存儲(chǔ)更多考慮的是TB級(jí)、PB級(jí)以及那些需時(shí)數(shù)秒的查詢類型。對(duì)客戶來(lái)說(shuō),好處是他們不必考慮這個(gè)問(wèn)題。他們不必考慮什么在內(nèi)存里,什么在磁盤(pán)上。這對(duì)他們來(lái)說(shuō)是透明的。
大多數(shù)查詢都可以及時(shí)從當(dāng)前數(shù)據(jù)上完成,你想在幾毫秒內(nèi)得到結(jié)果。如果是個(gè)預(yù)測(cè)引擎,用來(lái)查看你的冰箱里的液態(tài)天然氣故障,你不想明天再做,你想要現(xiàn)在就做。另外儀表盤(pán)、報(bào)警、點(diǎn)擊流分析等等,這一類至關(guān)重要的事情也是這樣。
記者:Timestream與其他時(shí)間序列數(shù)據(jù)庫(kù)有什么不同呢?
Werner Vogels: 我們亞馬遜這里有個(gè)原則,我們對(duì)客戶的平均延遲不感興趣,因?yàn)槠骄舆t意味著我們客戶的50%將經(jīng)歷更糟糕的體驗(yàn),而且你不知道有多糟糕。包含了90%、99%的客戶的體驗(yàn)才是我們真正關(guān)心的。你想要實(shí)時(shí)評(píng)測(cè)這個(gè)。在Timestream上建一個(gè)查詢很容易,可以查過(guò)去5分鐘或過(guò)去45分鐘或過(guò)去1小時(shí)或過(guò)去45秒的數(shù)據(jù),查詢那些含90%或99%客戶的體驗(yàn)數(shù)據(jù)。
Timestream畢竟還是個(gè)無(wú)服務(wù)器數(shù)據(jù)庫(kù),所以我們會(huì)照顧到性能和可靠性,我們會(huì)自動(dòng)在多個(gè)可用區(qū)進(jìn)行復(fù)制,會(huì)在背后進(jìn)行擴(kuò)展和縮減,安全方面也是。默認(rèn)情況下做了加密,但你也可以用你自己的密鑰?蛻舨槐乜紤]這個(gè)問(wèn)題。Timestream是個(gè)獨(dú)特的數(shù)據(jù)庫(kù),各種時(shí)間場(chǎng)合都可以用,但不是關(guān)系型數(shù)據(jù)庫(kù)。
記者:為什么時(shí)間序列數(shù)據(jù)庫(kù)及其功能變得越來(lái)越重要而且現(xiàn)在至少更有可能實(shí)現(xiàn)了?
Werner Vogels: 客戶正在建相當(dāng)復(fù)雜的架構(gòu),特別是在物聯(lián)網(wǎng)和DevOps管理領(lǐng)域。物聯(lián)網(wǎng)是個(gè)大的用例,時(shí)間在這一塊一直很重要。想象一下如果你有一個(gè)卡車車隊(duì),你想跟蹤車隊(duì)的載貨情況、速度和油耗。如果想實(shí)時(shí)看到哪輛卡車比其他卡車消耗更多的汽油,那么Timestream在這里就變得很有用了。利用Timestream建立這樣的系統(tǒng)可以非常簡(jiǎn)單。
記者:還有哪些例子涉及到公司使用時(shí)間序列數(shù)據(jù)庫(kù)?
Werner Vogels: 如果看一下我們的客戶,很大一部分是那些需要管理設(shè)備或客戶參與的客戶。Timestream大客戶之一是Disney Plus。Disney Plus每天記錄一批批數(shù)十億的數(shù)據(jù)點(diǎn),包括視頻質(zhì)量、緩沖、客戶體驗(yàn)。我們有許多工業(yè)客戶,如卡車運(yùn)輸或天然氣生產(chǎn)或建筑業(yè)的公司,這些公司都使用時(shí)間序列數(shù)據(jù)庫(kù)。
所有這些的主導(dǎo)屬性是時(shí)間,特別是如果你想找到事情之間的相關(guān)性。Timestream自帶一個(gè)標(biāo)準(zhǔn)的相關(guān)功能。例如,昨天的點(diǎn)擊流比較你現(xiàn)在看到的點(diǎn)擊流,是否有很大的變化?或者你可能會(huì)想知道你的客戶今天怎么個(gè)來(lái)法,而你還把你的真實(shí)指標(biāo)與之放在一起,看看和你的預(yù)測(cè)有多大差距?
Clean Air組織追蹤世界各地的空氣質(zhì)量。你可能對(duì)昨天的空氣質(zhì)量感興趣,但這是我所說(shuō)的報(bào)告。它不只是一個(gè)數(shù)據(jù)點(diǎn)。例如,在時(shí)間序列數(shù)據(jù)庫(kù)中有一個(gè)功能名為窗口,基本上是一個(gè)滑動(dòng)窗口。比方說(shuō),你可以計(jì)算過(guò)去5分鐘或5秒鐘的平均空氣質(zhì)量……。我們?cè)谡5腟QL里加了相當(dāng)多的函數(shù),使得我們具有做這種時(shí)間序列的能力,可以真正地在時(shí)間上滑動(dòng),或在一定的時(shí)間段內(nèi)找到相關(guān)性。
記者:Timestream如何與其他亞馬遜數(shù)據(jù)庫(kù)一起使用呢?
Werner Vogels: 時(shí)間序列數(shù)據(jù)庫(kù)有三個(gè)部分。一個(gè)部分是將數(shù)據(jù)送到寫(xiě)入優(yōu)化的內(nèi)存存儲(chǔ)里,然后在一段時(shí)間內(nèi)遷移到到磁性存儲(chǔ)里,然后就是查詢引擎。但是需要將其放進(jìn)去。Kinesis和Managed Kafka Service是將數(shù)據(jù)移入Timestream的兩種方法。另外還有Apache Flink,是Timestream和其他數(shù)據(jù)庫(kù)之間的一種連接器。
記者:那有些用戶,比如說(shuō)Oracle用戶,有些用戶不想使用這么多不同種類的數(shù)據(jù)庫(kù),他們?cè)趺崔k呢?
Werner Vogels: 我認(rèn)為完成一件事需要使用合適的工具。我們的許多專業(yè)人員都有一系列工具,這些工具正好能滿足他們的這個(gè)目的。外科醫(yī)生不只是有一把刀。他們有一系列的手術(shù)刀。他們不會(huì)搞混,他們知道使用完全適合的那把刀。如果他們帶了一把鋸子,你不會(huì)很開(kāi)心吧。
我們作為軟件工程師也是處于這樣的處境。AWS現(xiàn)在有八或十種專用數(shù)據(jù)庫(kù),是一套數(shù)據(jù)庫(kù)?蛻艨梢栽谶@么一套工具里準(zhǔn)確地挑選合適的工具。這可以為他們節(jié)省資金,最重要的是,可以為他們節(jié)省開(kāi)發(fā)人員的時(shí)間。如果我需要在一個(gè)關(guān)系型數(shù)據(jù)庫(kù)的基礎(chǔ)上建立一個(gè)時(shí)間序列操作,那么會(huì)花費(fèi)我大量的精力和時(shí)間。即便這樣,你甚至也不會(huì)擁有正確的可觀察性工具,不能查看正在發(fā)生的事情。
記者:亞馬遜是怎么想到會(huì)需要這么多不同的數(shù)據(jù)庫(kù)?
Werner Vogels: 我們建的第一個(gè)新數(shù)據(jù)庫(kù)是個(gè)鍵值存儲(chǔ)數(shù)據(jù)庫(kù)。為什么呢?那時(shí)是2004年12月12日,整個(gè)亞馬遜都在關(guān)系型數(shù)據(jù)庫(kù)上運(yùn)行。有一次我們的大型機(jī)架集群發(fā)生故障,是一年里最繁忙的一天,整個(gè)網(wǎng)站都癱瘓了。這令我們想到,也許關(guān)系型數(shù)據(jù)庫(kù)并不是適合所有事情的工具。
所以我們對(duì)所有的東西進(jìn)行了深入的研究,結(jié)果發(fā)現(xiàn)亞馬遜存儲(chǔ)的70%是鍵值類。就只是一些給個(gè)購(gòu)物車給我,給我這個(gè),給我那個(gè)……就一個(gè)屬性,給我這個(gè)屬性的結(jié)果。所以我們想,等一下,我們可以為自己建立一個(gè)鍵值存儲(chǔ)服務(wù),實(shí)際上可以支持所有這些,并且服務(wù)還可以擴(kuò)大規(guī)模,比用關(guān)系型數(shù)據(jù)庫(kù)所能做到的可以更可靠。此外,要在三個(gè)不同的可用性區(qū)域或數(shù)據(jù)中心里維持關(guān)系型數(shù)據(jù)庫(kù)運(yùn)行真是一場(chǎng)噩夢(mèng)。
我們?cè)?jīng)切斷一個(gè)數(shù)據(jù)中心看看會(huì)發(fā)生什么。結(jié)果發(fā)現(xiàn),所有的故障都是涉及關(guān)系型數(shù)據(jù)庫(kù)的故障。再要把這個(gè)數(shù)據(jù)中心重新接入到實(shí)時(shí)運(yùn)行就成了一場(chǎng)噩夢(mèng)。
記者:亞馬遜為此做了什么呢?
Werner Vogels: 我們建了DynamoDB。DynamoDB的一切服務(wù)都被管理,是第一個(gè)這樣的服務(wù)。內(nèi)部客戶不需要考慮這個(gè)問(wèn)題。我們用DynamoDB推出的第一個(gè)服務(wù)是購(gòu)物車。
再舉個(gè)例子,QLDB是我們的量子數(shù)據(jù)庫(kù)分類帳服務(wù)。所有比特幣操作的核心部分基本上是個(gè)不可變賬本,是個(gè)分布式賬本。但是我們的很多客戶希望賬本處于一個(gè)地方。如果你想在關(guān)系型數(shù)據(jù)庫(kù)中做到這一點(diǎn),無(wú)疑是場(chǎng)噩夢(mèng)。
而如果你用上了這些特制數(shù)據(jù)庫(kù),開(kāi)發(fā)就會(huì)變得非常簡(jiǎn)單。給了你所需要的正確工具,就可以提高開(kāi)發(fā)速度,就是這么回事。
本文章選自《數(shù)字化轉(zhuǎn)型方略》雜志,閱讀更多雜志內(nèi)容,請(qǐng)掃描下方二維碼
