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