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