一、前言
Snowflake是一款面向Amazon Cloud上EC2和S3而構建起來的在線數倉系統,支持極致彈性、多租戶、端到端安全、完整CRUD、事務、內置半結構化、無結構化數據等特性。從2012年開始設計開發,從2015年正式可用,到目前為止在Amazon Cloud上已經獲得了顯著的成功。就在2018年獲得7.13億美金的融資,總共獲得9.28億融資,估值從15億迅速上升到35億美金,營收翻4倍,其市場價值可見一斑!
Snowflake獲4.5億美元融資 估值達35億美元?www.ebrun.comSnowflake的成功還是有很多確定性因素的,其核心人員是資料庫領域的前輩,在此論文中也有提到說,他們團隊的資料庫開發經驗有100年以上(哪怕一人10年經驗,那也有10位這樣的核心人員了)。另外,從產品和技術上來看,Snowflake走出不一樣的道路,給我們有很多啟示,有很多很驚艷的點,我從自己的理解來回味下這篇論文。
二、架構選擇
Snowflake在設計之初就選擇了「存儲計算分離」的架構,在當時應該算是一招大膽而富有遠見的選擇,在2012年就開始基於EC2+S3來構建系統(也許,一開始並沒有這麼選擇),選擇信任底層AWS雲平台的基礎設施。這與當時的資料庫、數據倉庫的主流的做法有不小差異,因為基礎設施上無論是存儲、還是網路,性能上都不一定能滿足需求。
時至今日很多中小型公司都還沒完全相信雲計算,不願意搬遷自己的業務到雲上。對比同時期的阿里雲,那時才成立3年,整體才剛剛建設穩定,但顯然還不能做到存儲計算分離,公司都還沒有完全去IOE呢。
考慮到百G網路的到來,底層分散式文件系統不斷升級,延時不斷降低而吞吐大幅提升,基於遠程分散式塊存儲而構建嚴格語義與極致性能的資料庫系統,已經不是什麼新鮮事了,PolarDB和Aurora都已經證明。有同學測試過,基於網盤的資料庫與基於本地SSD的資料庫在性能上越來越接近了,在延時上還有些損失,但其他方面有一大堆的好處,光在自動擴容、高可靠、容災備份等複雜無比的問題上,就可以大大簡化並大量節省開發資源。
另外,選擇S3這種「Write-once」或「Append-only」的存儲作為其底層存儲,相比於傳統存儲有些劣勢,但也引入不少新特效和能力,因而在技術上也有很多變化,文件的組織方式、過期回收機制、mvcc機制、擴縮能力,都可以因地制宜。仔細想想,這與LSM的思路也有類似,從「In-place update」到「delete+add」,加快吞吐。
Snowflake另一個正確的選擇是「不選擇Hadoop」,在hadoop風口期卻沒有選擇hadoop,也是很有勇氣的。現在無論是阿里雲還是AWS,互動式的大數據分析又成為PB級數倉的選擇,Presto、F1 Query、包括我們自己的產品等,重新回歸傳統資料庫的體驗。因為底層基礎設施能力的提升和彈性能力讓上層資料庫服務也更加靈活,能適應於更寬泛的workload,因此Snowflake能同時支持和吸引了更多傳統數倉和傳統Hadoop的客戶。