大數據

[Snowflake核心技術解讀系列四]雲特性

背景:2020年9月16日,Snowflake成功IPO,交易首日市場估值達到704億美元,募集資金34億美元。Snowflake成為迄今為止規模最大的軟件IPO,市值最高突破1200億美元。Snowflake提供基於雲的數據存儲和分析服務,一般被稱為 "數據倉庫即服務",它允許企業用戶使用基於雲的硬件和軟件來存儲和分析數據。Snowflake自2014年起在亞馬遜S3上運行,自2018年起在微軟Azure上運行,自2019年起在谷歌雲平臺上運行,其Snowflake Data Exchange允許客戶發現、交換和安全地共享數據。[維基百科]
Snowflake取得了巨大的商業成功,技術是如何支撐起它的千億美元市值呢?它技術強在哪?OLAP內核技術愛好者浙川為大家傾情解讀Snowflake的核心技術原理。本文為該系列四。

更多雲特性

Snowflake除了通過上述的數據存儲、虛擬倉庫、雲服務組件來充分挖掘和利用雲原生技術外,還提供了更多的雲特性來豐富關係型數據倉庫的功能,以下章節會對此進行詳細介紹。

完全面向SaaS

用戶使用Snowflake數倉,不需要購買任何機器,也不需要安裝任何軟件,只需要購買Snowflake服務就行了。用戶只要將數據上傳到Snowflake中,就可以對這些數據進行查詢分析操作。Snowflake不僅支持標準的數據庫訪問接口如JDBC、ODBC等,而且支持通過Web界面上的按鈕直接操作數據。Snowflake的Web界面還支持用戶直接訪問數據庫元數據、統計使用信息、進行用戶和系統管理等。和DBaas(Database-as-a-Service)的最大不同是,Snowflake不需要用戶進行數據倉庫參數配置與調優,不需要用戶關注底層物理部署方式、存儲備份模式、故障恢復等數據倉庫關鍵特性。用戶在Snowflake上只需要關注的就是數據以及對數據的查詢。

高可靠性

Snowflake在兩種情況下會面臨可靠性問題:1)人為控制的系統升級或運維管理,2)系統故障。由於越來越多的用戶使用數倉的數據分析能力來支撐他們的核心業務,這些核心業務是不能接受業務停服的,因此,提供非常高的可靠性已經成了任何數據倉庫需要重點解決的問題之一。Snowflake採用了兩種方案來解決其兩種情況下面臨的可靠性問題:在線升級機制和故障恢復機制。
image.png

圖 2 Snowflake多數據中心實例

故障恢復機制。如圖2所示,Snowflake可以容忍其架構所有層級中單個節點或者任意組合節點發生故障,如果有節點發生故障,那麼其他節點可以接管故障節點負責的工作,以不影響用戶的使用體驗。Snowflake的數據是存儲在Amazon S3存儲服務上的,S3會將數據在不同的數據中心中進行備份,即便單個數據中心完全宕掉了,S3仍然可以通過其他數據中心提供相同的數據。因此,S3可以提供99.99%的數據可用性和99:999999999%的數據持久性。Snowflake雲服務組件中的元數據也是以這樣的方式存儲在S3中的。除了元數據以外,雲服務組件中其他組件都直接部署在EC2上,這些EC2也分佈在不同的數據中心中,由上層的負載均衡器來將用戶請求均勻地轉發到不同的EC2上。即使某個雲服務組件節點掛掉,或者某個數據中心整個掛掉,那麼整個Snowflake系統也不會受到影響,頂多是這個雲服務組件目前正在服務的查詢請求會失敗。後續相關的查詢請求均會自動轉發到該雲服務組件在其他數據中心的正常節點上。
和雲服務組件不同的是,虛擬倉庫並不是分佈在不同的數據中心中,這麼做的目的主要是考慮性能因素。網絡性能是分析型查詢執行性能的重要影響因素之一,而同一個數據中心內的網絡性能會遠遠高於跨數據中心訪問的網絡性能,因此,作為實際執行查詢請求的虛擬倉庫的計算節點是構建在同一個數據中心的EC2上的。在查詢執行過程中,如果某個計算節點掛掉了,該查詢會執行失敗,但是Snowflake會自動在相同的虛擬倉庫上重試。重試前,Snowflake要麼立即將掛掉的計算節點用新的節點來替換,要麼在無法替換的情況下,將掛掉的計算節點移除。Snowflake會維護一個備計算節點池,以便快速地替換掛掉的計算節點。
如果虛擬倉庫所在的數據中心整個掛掉,那麼該虛擬倉庫所正在運行的所有查詢都會失敗,此時就需要用戶來介入了:用戶需要主動地將虛擬倉庫部署到另一個數據中心來繼續服務。但是,這就會導致系統的不可用了。Snowflake當前採用這種設計方案的一個前提假設是數據中心整個掛掉的概率非常低,當然Snowflake也在設計新的方案以保障數據中心整個掛掉情況下的服務可靠性。
在線升級機制。Snowflake能夠在做系統升級的時候,也提供高可靠性,這依賴於Snowflake的在線升級機制。由於Snowflake的雲服務組件和虛擬倉庫是無狀態的,Snowflake允許同時部署雲服務組件中不同組件和虛擬倉庫的不同版本。所有狀態都保存在key-value存儲中,狀態數據通過一個映射引擎來進行訪問,該映射引擎還負責處理元數據版本和演進。

注:譯文來自 https://www.snowflake.com/resource/sigmod-2016-paper-snowflake-elastic-data-warehouse/

(Snowflake核心技術解讀系列一)架構設計
(Snowflake核心技術解讀系列二)雲原生技術
(Snowflake核心技術解讀系列三)雲原生技術


隨時歡迎技術圈的小夥伴們過來交流^_^
AnalyticDB詳情見:產品詳情
AnalyticDB產品試用:產品試用
AnalyticDB知乎公眾號:雲原生數據倉庫
AnalyticDB開發者社區公眾號:雲原生數據倉庫
AnalyticDB開發者釘釘群:23128105
image.png


AnalyticDB相關文章:
AnalyticDB MySQL擁抱雲原生,強力支撐雙十一
智穩雙全--AnalyticDB如何助力菜鳥運配雙十一
千萬商家的智能決策引擎--AnalyticDB如何助力生意參謀雙十一
AliExpress智能營銷引擎大揭祕-AnalyticDB如何做到快準狠省
十萬億級OLAP引擎解讀-AnalyticDB如何支撐數據銀行超大規模低成本實時分析

Leave a Reply

Your email address will not be published. Required fields are marked *