科普—Snowflake Architecture
傳統(tǒng)的數(shù)據(jù)平臺架構
Shared-Disk 架構
shared-disk 是一種早期的架構,將數(shù)據(jù)存儲在一個中央存儲位置,并可從多個數(shù)據(jù)庫集群節(jié)點訪問。每個集群節(jié)點訪問的數(shù)據(jù)是一致可用的,因為所有數(shù)據(jù)修改都被寫入共享磁盤。
這是一種很傳統(tǒng)的數(shù)據(jù)庫設計,以其數(shù)據(jù)管理的簡單性而聞名。雖然該方法在理論上很簡單,但它需要復雜的磁盤鎖定機制來確保數(shù)據(jù)一致性,這反過來容易造成瓶頸。
數(shù)據(jù)并發(fā)性,即允許多個用戶在數(shù)據(jù)庫中影響多個事務,也是一個主要問題,在 shared-disk 架構中增加更多的計算節(jié)點只會加劇這個問題。因此,這種架構的真正可擴展性是有限的。
圖片
Oracle RAC 是典型的 shared-disk 架構。
Shared-Nothing 架構
shared-noting 架構,每個節(jié)點都有自己的 CPU、內(nèi)存和磁盤,并且一般通過網(wǎng)絡層進行節(jié)點之間的通信,計算節(jié)點可以自由獨立擴展,規(guī)避了 shared-disk 的集中式存儲瓶頸。
圖片
常見的 shared-nothing 架構的數(shù)據(jù)庫有 DB2、Vertica、Greenplum。
Snowflake Architecture
Snowflake 團隊采取了獨特的方法。他們不是試圖逐步改進或轉(zhuǎn)換現(xiàn)有的軟件架構,而是構建了一個全新的、專為云端設計的現(xiàn)代數(shù)據(jù)平臺,允許多個用戶同時共享實時數(shù)據(jù)。
獨特的 Snowflake 設計在物理上將存儲和計算進行了分離,但在邏輯上進行了集成,并提供了安全和管理等服務。
Snowflake 混合模型架構由三個層組成:元數(shù)據(jù)服務層、計算層和數(shù)據(jù)存儲層。
圖片
The Cloud Services Layer
與 Snowflake 實例中的數(shù)據(jù)的所有交互都始于 Cloud Service 層,又被稱為全局服務層。
Snowflake Cloud Service 層是一組服務,用于協(xié)調(diào)身份驗證、訪問控制和加密等活動。它還包括用于處理一些基礎設施和元數(shù)據(jù)的管理功能,以及執(zhí)行查詢解析和優(yōu)化器等功能。
Cloud Service 層有時被稱為 Snowflake 的"大腦",因為所有不同的服務層組件共同工作,處理用戶從請求登錄開始的請求。
圖片
每當用戶請求登錄時,該請求由 Cloud Service 層處理。當用戶提交一個 Snowflake 查詢時,SQL 查詢將首先發(fā)送到Cloud Service 層優(yōu)化器,然后再發(fā)送到計算層進行處理。Cloud Service 層是使得可以在數(shù)據(jù)上進行數(shù)據(jù)定義語言(DDL)和數(shù)據(jù)操作語言(DML)操作的SQL客戶端接口的核心。
The Query Processing (Virtual Warehouse) Compute Layer
Snowflake 的計算集群,通常也叫做虛擬數(shù)倉(Virtual Warehouse),是一個由 CPU、內(nèi)存、和臨時存儲組成的動態(tài)資源集群,用戶可以自由創(chuàng)建計算集群,Snowflake 在后臺進行調(diào)度分配資源。
圖片
Snowflake 獨特的架構允許存儲和計算分離,這意味著任何一個 Virtual Warehouse 都可以訪問與其他 Virtual Warehouse 相同的數(shù)據(jù),而不會產(chǎn)生沖突或?qū)ζ渌?warehouse 的性能造成影響。這是因為每個 Snowflake 的 Virtual Warehouse 都是獨立運行、無狀態(tài)的,不與其他 Virtual Warehouse 共享計算資源。
在一個 session 中運行時,Virtual Warehouse 總是會消耗計算配額。
然而,Snowflake Virtual Warehouse 可以隨時啟動和停止,并且可以在運行時隨時調(diào)整大小。Snowflake 支持兩種不同擴展方式。Virtual Warehouse 可以通過調(diào)整 warehouse 的大小來進行垂直擴展,也可以通過向 warehouse 添加集群來進行水平擴展??梢酝瑫r使用這兩種擴展方法,也 可以只使用其中一種。
Scaling Up
在創(chuàng)建計算集群的時候,可以指定其大小,這個大小主要表示了 warehouse 所占的服務器資源,size 越大,計算資源越多,計算性能也就越強。
Virtual Warehouse 可以擴展其大小,這一般也叫做 scaling up,在處理一些復雜的任務時可以對其進行調(diào)整。
圖片
Scaling Out
Virtual Warehouse 還可以擴展其集群的數(shù)量,進一步提升計算性能,這種擴展方式叫做 scaling out。
圖片
計算集群可以被隨意創(chuàng)建,并且任意擴展,這帶來了一個極大的好處便是可以將不同的 workload 分配到不同的 warehouse 中,并且共享底層的數(shù)據(jù)存儲。
圖片
Centralized (Hybrid Columnar) Database Storage Layer
Snowflake 的集中式數(shù)據(jù)庫存儲層包含所有的數(shù)據(jù),例如結構化和半結構化數(shù)據(jù)。
當數(shù)據(jù)加載到Snowflake時,它會被優(yōu)化重新組織為一種壓縮的列格式,并存儲和維護在 Snowflake 數(shù)據(jù)庫中。每個Snowflake 數(shù)據(jù)庫由一個或多個 schema 組成,schema 是數(shù)據(jù)庫對象(如表和視圖)的邏輯分組。
圖片
存儲在 Snowflake 數(shù)據(jù)庫中的數(shù)據(jù)始終是經(jīng)過壓縮和加密的。Snowflake 負責管理數(shù)據(jù)存儲的每個方面。Snowflake會自動將存儲的數(shù)據(jù)組織成微型分區(qū),這是一種經(jīng)過優(yōu)化、不可變的壓縮列格式,并使用 AES-256 進行加密。
Snowflake 通過優(yōu)化和壓縮數(shù)據(jù),使元數(shù)據(jù)提取和查詢處理更加簡單和高效,每當用戶提交一個 Snowflake 查詢時,該查詢會先經(jīng)過 Cloud Service 層的優(yōu)化器,然后再發(fā)送到計算層進行處理。
Snowflake 的數(shù)據(jù)存儲層有時被稱為遠程磁盤層,底層文件系統(tǒng)是在 AWS、Google Cloud 或 Microsoft Azure 上實現(xiàn),數(shù)據(jù)存儲時使用的特定提供商是在創(chuàng)建 Snowflake 賬戶時選擇的。
Snowflake不限制您存儲的數(shù)據(jù)量、創(chuàng)建的數(shù)據(jù)庫數(shù)量或數(shù)據(jù)庫對象數(shù)量。Snowflake 表可以輕松存儲 PB 級別的數(shù)據(jù)。在 Snowflake 賬戶中,隨著存儲的增加或減少,不會對虛擬倉庫的大小產(chǎn)生影響。這兩者獨立于彼此和云服務層進行擴展。
Snowflake Caching
Snowflake 在 Cloud Service 和 Virtual Warehouse 層都有對應的緩存策略,主要是為了能夠避免頻繁訪問遠端 S3
存儲,加速查詢性能。
Result Cache
從Snowflake檢索數(shù)據(jù)的最快方式是使用 Result Cache。Snowflake 查詢的結果會被緩存或持久化保存24小時,然后被清除。但每次重新執(zhí)行查詢時,時間會被重置,最長可以從首次執(zhí)行查詢的日期和時間開始計算,持續(xù)31天。在31天之后,或者如果基礎數(shù)據(jù)發(fā)生變化,則在再次提交查詢時生成并緩存新的結果。
查詢結果緩存由 Snowflake 的 Cloud Service 層管理,并且可以被所有的計算集群所共享。
圖片
Metadata Cache
在 Cloud Service 層中還維護了一個元數(shù)據(jù)緩存層 Metadata Cache,Snowflake 收集和管理有關表、分區(qū)等元數(shù)據(jù)。對于表,Snowflake 存儲行計數(shù)、表的字節(jié)大小、文件引用和表版本。因此,在運行 SELECT COUNT(*) 查詢時,不需要運行 Virtual Warehouse,因為計數(shù)統(tǒng)計信息保存在元數(shù)據(jù)緩存中。
圖片
Virtual Warehouse Local Disk Cache
在計算層中,Virtual Warehouse 中還維護了本地磁盤緩存。
圖片
每當一個虛擬倉庫接收到要執(zhí)行的查詢時,它將首先掃描本地 SSD 磁盤緩存,然后再訪問 Snowflake 遠程磁盤存儲。從 SSD 讀取速度比從數(shù)據(jù)庫存儲層讀取速度快,但仍需要運行虛擬倉庫來完成操作。

































