NoSQL“開山之作”Amazon DynamoDB的十年創新之旅
十年前,亞馬遜云科技正式推出Amazon DynamoDB,一種快速、靈活的 NoSQL 數據庫服務,可在任意規模環境中提供一致的個位數毫秒響應時間。
亞馬遜首席技術官Werner Vogels曾表示:“我們非常高興推出Amazon DynamoDB,一種快速、可靠且具有成本效益的 NoSQL 數據庫服務,專為互聯網規模的應用程序而設計。” Amazon DynamoDB代表了亞馬遜在大型非關系型數據庫和云服務技術領域15年持續投入的成果。
Vogels表示:“我們早在2007年就發表了有關亞馬遜Dynamo技術細節的論文,并以此奠定了首批非關系型數據庫的雛形。最初的Dynamo基于一套強大的分布式系統原則設計,并生成了一個可隨意擴展和高可靠的數據庫系統。Amazon DynamoDB繼續基于這些原則構建,也是亞馬遜多年運行大規模非關系型數據庫和云服務(如Amazon SimpleDB和Amazon S3)的經驗積累。很高興看到我們的探索和經驗轉化為易于使用的托管服務,并提供給我們的客戶。”
亞馬遜云科技數據庫、數據分析、機器學習副總裁Swami Sivasubramanian和Vogels同為2007年Dynamo論文的合著作者之一。Swami是Amazon DynamoDB開發的主要貢獻者,那時他是一名從事分布式系統技術設計、實施和分析相關工作的亞馬遜研究工程師。
Amazon DynamoDB發布十年之際,Swami表示:“我們正在經歷數據和機器學習的‘文藝復興’時代。如今企業可以將數據存儲在這些數據庫中,并快速開始在 Amazon S3 中構建自己的數據湖,然后就可以立刻開展數據分析,并在幾周甚至幾天時間內就能通過Amazon SageMaker實現人工智能賦能,這真的非常了不起。我非常期待現在能有機會幫助客戶更快地從數據中獲得洞察。客戶真的希望將數據‘物以致用’,實現數據驅動的決策。越來越多的CIO和企業意識到這將成為數據使用者的‘生存法則’,那些有能力將數據應用于實際工作的人將披荊斬棘,無往不利。”
以下Swami與我們分享了Amazon DynamoDB的起源、前身以及未來。
關于Dynamo的起源
Swami:我們在2007年發表了Dynamo論文,探討這個話題之前,我們需要先追溯到2004、2005 年。那時我正在攻讀博士學位,(并隨后于2006年從阿姆斯特丹自由大學獲得計算機科學博士學位),也在考慮我將在哪里工作。看到亞馬遜正在快速成長,并不斷突破常規,打破界限,我選擇了以亞馬遜研究工程師實習生的身份加入亞馬遜。
那時亞馬遜云科技還不存在,加入亞馬遜后,我很快意識到作為一家電子商務公司,亞馬遜實際上也是一家科技公司。為了支持自身電子商務業務相關的各類運營場景和工作負載,亞馬遜涌現出了大量創新技術、專利和發明,這種情形在全球任何一家公司都難得一見。
在亞馬遜擔任工程師時,我和團隊曾在假期流量高峰期間經歷過一次嚴重的擴展失敗。這是由數據庫事務死鎖而導致的,其背后正是亞馬遜當時使用的商業關系型數據庫。故障發生后,我們一群工程師們一起編寫了一份錯誤更正文檔,對發生了什么、學到了什么、如何解決問題以及如何避免問題再次發生等進行了詳細說明。
我當時問了一個問題:“為什么我們要為這些工作負載使用關系型數據庫?本質上,它們并不需要 SQL 級別的復雜性和事務保證。”
這導致我們開始重新思考如何設計底層數據存儲。當時,還沒有可伸縮的非關系型數據庫,這是我們開始著手搭建Amazon Dynamo原型并撰寫論文的原因。事實上,Amazon Dynamo 并不是工程師們當時唯一思考和研究的架構。我們意識到我們還需要一個可擴展的存儲系統,Amazon S3 就誕生于此。同時,還需要一個更易于管理的關系型數據庫,能夠自動進行復制、故障切換和備份/恢復,這也是 Amazon RDS 的由來。
最初撰寫Dynamo論文時,我們就定了一條規則,即“在開發原始設計時不對外發布”,而是先將Dynamo運行于支持多個Amazon.com服務的實際生產環境中。這樣,Dynamo論文就會是一種端到端的可用方案,并有實際應用經驗。Werner和我對此感受非常強烈,因為我們不希望僅僅撰寫一篇學術論文而已。10年后,我們非常榮幸的是Dynamo論文還獲得了ACM的時間考驗獎,這是由ACM主辦的The SIGOPS Hall of Fame Award,從2016年開始評選過去十年科技圈最具影響力的論文名人堂。
構建Amazon DynamoDB的初衷及其過去十年的演進
Swami:Amazon DynamoDB背后的想法來自于與SmugMug、Flickr等客戶首席執行官的對話和討論。他們是最早帶有互聯網屬性的公司,而在當時類似這樣的互聯網公司正在快速走向市場。他們的典型特征包括在線用戶數量呈爆炸式增長、數據模式不固定,追求快速交付和輕運維等。傳統關系型數據庫將所有數據存儲在一個盒子中,無法高效地擴展,這迫使用戶需要對其數據庫重新分片,然后還需要管理所有的分區和重新分區等,這讓用戶面臨巨大的運維挑戰和壓力。
這對我們來說并不新鮮,構建原始Amazon Dynamo的初衷正是應對這些挑戰。當時,Amazon Dynamo還不是一項服務,而是一個由亞馬遜工程師構建的軟件系統。在一次客戶咨詢會議上,時任Flickr 首席執行官Don MacAskill表示:“你們已經啟用了 Amazon Dynamo,驗證了可擴展非關系型數據庫系統的可行性,為什么不能把它作為外部服務提供給我們使用?”
當時,所有亞馬遜云科技的相關管理人員都在場,實際上,這也是我們問自己的一個問題。Flickr并不是唯一需要它的客戶,越來越多的客戶想要可擴展的數據庫,無需處理分區和重新分區等復雜的運維工作,同時他們還需要極高的可用性。于是,我們開始認真思考構建一個不受SQL API限制的、可擴展的云數據庫。
Amazon DynamoDB與原始Amazon Dynamo不盡相同,它實際上是通過幾個原始Amazon Dynamo組件搭建的一項易于使用的云服務。客戶不再需要配置集群,只需創建一個表存儲數據,即可輕松實現無縫縮放。管理員不必執行任何操作,甚至無需安裝單個庫來操作數據庫。
Amazon Dynamo到Amazon DynamoDB的演變非常重要,亞馬遜真正以前所未有的方式擁抱云,獲得它的彈性和可擴展性。
我們在2012年1月18日正式發布Amazon DynamoDB,該服務一經推出就大受歡迎,Flickr等公司率先使用該服務。Amazon DynamoDB強大的彈性、個位數毫秒的延遲性能等深受客戶青睞。我們進行了大量創新,從協議層一直到SSD存儲的底層存儲層等各項功能。
這里不得不提的一個有趣的用例,也是最早將DynamoDB投入生產的客戶之一,他們做的是超級碗(Super Bowl:全國橄欖球聯盟決賽——全美直播的體育界春晚)廣告投放。 因為Amazon DynamoDB具備強大的彈性,可以無縫地擴展到每秒100,000次寫入,并在超級碗活動結束后縮減,這樣客戶就不會擔心產生額外的成本。當年,這在技術領域是個大事。現在大家習以為常的橫向擴展與彈性,對當時的數據庫而言,那是無法想象的。
那是一個大膽的設想。Amazon DynamoDB專為云而構建的架構讓所有橫向擴展用例成為可能。現在,Amazon DynamoDB正為多個高流量Amazon站點和系統提供支持,包括 Alexa、亞馬遜全球電商網站和所有亞馬遜運營中心。2021年,在亞馬遜長達66小時的Prime會員日大促期間,上述站點和系統進行了數萬億次API調用,Amazon DynamoDB以低至個位數毫秒延遲的高性能表現,無感支持峰值達每秒8,920萬個請求,同時確保系統的高可用性。
Amazon DynamoDB自2012年問世以來,我們為其增加了大量創新功能,不僅涉及底層可用性、持久性、安全性和規模等特性,還包括易用性等。
Amazon DynamoDB不止步于鍵值存儲,還支持基于哈希的分區和基于范圍的分區,并且增加了對二級索引的支持,支持更復雜的查詢功能,同時不影響規模或可用性。
現在,Amazon Kinesis Data Streams也適用于Amazon DynamoDB,捕獲可擴展的流式數據。我認為任何數據庫都不應該是孤島,更不能是死胡同。它應該支持生成變化的數據流,然后將這些數據流連接到分析應用程序或其他數據存儲。
同時,我們也針對備份和恢復等功能全面創新。對于像Amazon DynamoDB 這樣具有數百萬個分區的大型數據庫系統而言,備份和恢復并非易事,我們致力于通過創新讓客戶獲得更好的體驗。
我們還為Amazon DynamoDB添加了創建全局表的功能,以便客戶可在輕松實現數據庫負載全球覆蓋的同時,獲得近乎本地運行的讀寫性能。此外,Amazon DynamoDB還擴展了事務處理能力。所有這些創新都致力于不斷提升Amazon DynamoDB的可用性和可擴展性。
我們同時致力于為客戶提供更高的成本效益。客戶通常需要長期存儲數據,雖然這些舊數據可能很少被訪問,但它必須保持高度可用,以便不時之需。例如,社交媒體用戶很少訪問舊的內容和圖片,但一旦有這類訪問請求,需要確保可以立即為用戶提供這些內容。這種不經常訪問的數據可能會給客戶帶來高昂的存儲費用,而且這類數據的數量還在不斷增長。過去,為了優化成本,客戶會通過編寫代碼的方式,將舊的、訪問頻率較低的數據從Amazon DynamoDB 移動到存儲成本較低的如Amazon S3中。
在2021 re:Invent全球大會上,我們推出了Amazon DynamoDB Standard-Infrequent Access表類,一種新的經濟高效的表類,用于存儲不經常訪問的數據,同時保持Amazon DynamoDB的高可用性和性能。
不忘初心,我們始終將DynamoDB的最初愿景作為指引,持續創新,為客戶提供更易于查詢的用例,支持進行復雜全局事務復制等,不斷擴展能力范圍,同時持續優化管理成本。
展望Amazon DynamoDB的未來十年
Swami:十年前,當我們推出Amazon DynamoDB 時,客戶才剛剛開始對云本身有了更好的理解,它的好處是什么,可以做什么。
如今,就客戶構建IT應用程序而言,云已經成為的新常態,規模也是新常態,每個應用程序都需要基于不確定性構建。我們將繼續代表客戶進行創新,Amazon DynamoDB本身也在這個持續變革的旅程中。我們將繼續朝著端到端的現代化數據戰略邁進。正如之前提到的,數據庫不應該是孤島。
客戶將不再只想在數據庫中存儲和查詢數據,他們需要分析這些數據來創造價值,無論是通過創建更好的個性化推薦引擎,還是使用機器學習運行預測分析的預測系統。將數據流點對點無縫連接,并繼續讓Amazon DynamoDB更安全、高可用,性能更強且易于使用,這些都將是我們永無止境的追求。