腾讯开源 DCache,分布式 NoSQL 存储系统
當你在電商平臺秒殺商品或者在社交網絡刷熱門話題的時候,可以很明顯感受到當前網絡數(shù)據(jù)流量的恐怖,幾十萬商品剛開搶,一秒都不到就售罄;哪個大明星出軌的消息一出現(xiàn),瞬間閱讀與轉發(fā)次數(shù)可以達到上億。作為終端用戶的我們可能會思考,服務系統(tǒng)是怎么在這樣嚴峻的流量環(huán)境中存活下來的。
其實,服務系統(tǒng)的架構中有許多巧妙的設計來應對這樣的問題,而在這其中,通常系統(tǒng)都會架設緩存系統(tǒng),用以緩解海量訪問請求與數(shù)據(jù)帶來的沖擊,實現(xiàn)高性能訪問需求。
同時,隨著微服務與云等技術的發(fā)展,分布式架構的需求變得越來越普遍,再加上今天 Web 上的數(shù)據(jù)類型已經不再單一,而且數(shù)據(jù)量也呈爆發(fā)式增長,傳統(tǒng)的結構化存儲方案已經跟不上腳步,對數(shù)據(jù)庫的 SQL 操作不再滿足要求,于是 NoSQL 出現(xiàn)。
將這幾種技術方案整合起來,我們可以設計出分布式 NoSQL 緩存系統(tǒng),當前這一類系統(tǒng)有一些比較強大的開源方案,比如 Memcached 和 Redis,它們對整個服務系統(tǒng)的可用性、可擴展性與性能起到至關重要的作用。
聽說最近騰訊開源了一個分布式 NoSQL 存儲系統(tǒng) DCache,它的典型應用場景就在分布式緩存。根據(jù)官方介紹,DCache 基于 TARS 微服務治理方案,它支持 k-v、k-k-row、list、set 與 zset 多種數(shù)據(jù)結構,數(shù)據(jù)基于內存存儲,同時支持后接 DB 實現(xiàn)數(shù)據(jù)持久化。DCache 具備快速水平擴展能力,同時配套有 Web 運維平臺實現(xiàn)高效的運維操作。
我們第一時間采訪了 DCache 研發(fā)團隊成員山寶銀,希望對項目的研發(fā)背景與相關技術細節(jié)有進一步了解。
當前開源的分布式緩存系統(tǒng)中,Memcached 與 Redis 是很普遍的選擇,騰訊此次為什么要自己造一個系統(tǒng)呢?
山寶銀介紹,雖然 Memcached與Redis 本身都擁有極其強大的能力,但是存在運維困難、缺乏集群化方案與無法應對微服務趨勢帶來的挑戰(zhàn)等問題。
舉個例子,當前微服務是一大趨勢,大家都在說要做微服務,它可以讓計算與存儲之間解耦,實現(xiàn)輕量級通信。微服務不需要管理生命同期,而作為系統(tǒng)組件的 Redis 則不然,“我們做服務架構設計時希望把邏輯層和數(shù)據(jù)層分離開來,但是如果使用 Redis 做緩存,緩存與DB之間的數(shù)據(jù)一致性問題,以及緩存不命中如何解決等問題都需要使用者在業(yè)務邏輯中做相關處理,這增加了一定的復雜度和難度,也增加了邏輯層和數(shù)據(jù)層的耦合度。”
另一方面,山寶銀介紹,起初面對海量數(shù)據(jù)和高性能訪問需求,騰訊內部各個團隊其實都開發(fā)了各自的緩存系統(tǒng),然而這些系統(tǒng)之間協(xié)議不統(tǒng)一、服務模型多樣化、不具有通用性容錯、擴展能力也參差不齊,所以團隊就著手研發(fā)了 DCache 這一套通用 Cache 系統(tǒng),希望整體去解決業(yè)務、開發(fā)、運維和監(jiān)控面臨的各種挑戰(zhàn)。
所以也可以看到,目前 DCache 已經應用于騰訊內部多個業(yè)務上,包括 QQ 瀏覽器、應用寶、騰訊地圖、騰訊電腦管家、手機管家與騰訊游戲等。
SQL 是指數(shù)據(jù)庫的結構化查詢語言,它是數(shù)據(jù)庫的操作命令集,傳統(tǒng)的關系型數(shù)據(jù)庫都使用標準的SQL語句操作處理數(shù)據(jù)。分布式是軟件系統(tǒng)的一種架構模式,在分布式系統(tǒng)中,多個硬件或軟件組件分布在不同計算機上,彼此之間通過消息傳遞進行通信,對外表現(xiàn)為一個整體,提供統(tǒng)一化的服務。
有一種普遍的觀點是,數(shù)據(jù)庫 SQL 與分布式之間存在天然對立性,山寶銀的理解是:“分布式系統(tǒng)因為數(shù)據(jù)分散在不同的節(jié)點,所以像 SQL 的聯(lián)表、事務等操作需要全局的鎖保護,這樣處理起來比較復雜,并且影響性能。”
SQL 還有與 NoSQL 的取舍問題,NoSQL 是指一類數(shù)據(jù)庫,主要用于高性能處理超海量數(shù)據(jù),它的一大特點是數(shù)據(jù)結構簡單,以key-value為主,數(shù)據(jù)之間非關聯(lián),容易做水平擴展。
從字面上看,NoSQL 似乎是與 SQL 對立的,做 NoSQL 似乎就意味著放棄 SQL,然而實際上 NoSQL 本意是 Not Only SQL,它不僅僅是 SQL,那么也就可以包含 SQL 的能力。“NoSQL 也不是一定就得放棄 SQL,其實在代理層可以增加 SQL 的解析、計算邏輯來實現(xiàn) SQL 操作,但這樣會影響性能,所以還是看應用場景和業(yè)務需求。”
山寶銀為我們簡單分析了 DCache “分布式 NoSQL”的意義。在SQL處理方面,分布式似乎存在劣勢,然而分布式意味著可以聯(lián)結更多的廉價計算機,充分運用算力,以低成本的方式應對高強度的并發(fā)訪問請求,此外分布式架構還有不少優(yōu)勢,比如避免系統(tǒng)單點問題導致的整體故障,實現(xiàn)高可用。而另一方面,山寶銀也說到:“DCache 因為主要的目標就是高性能,SQL 操作并不是主要想解決的問題,所以 DCache 沒有實現(xiàn) SQL 的功能。”
DCache 對外提供服務的粒度是 group,一個 group 負責一部分的數(shù)據(jù)分片,至于每個 group 服務哪些數(shù)據(jù),是根據(jù)數(shù)據(jù)的 key 做 hash 映射后所處的范圍來確定的。
DCache 會把數(shù)據(jù)的key通過hash 算法映射到0~4294967295 (unsigned int) 范圍內,然后把 0~4294967295 范圍均勻劃分到不同的 group 上。例如有兩個 group,key 做 hash 后的值在 0~2147483647 范圍就分發(fā)到 group1,在 2147483648~4294967295 范圍就分發(fā)到 group2。
在一個 group 內,采用主備架構,只有主節(jié)點接收讀寫請求,所以數(shù)據(jù)一致性是可以保證的,而當主機不可用時,會觸發(fā)主備自動切換,保證服務持續(xù)可用。
DCache 架構
我們疑惑 DCache 似乎強依賴于 etcd 與 TARS 等中間件,那它本身的核心特性與能力體現(xiàn)在哪里?
山寶銀解釋,DCache 并不強依賴 etcd,“etcd 只涉及了路由服務 RouterServer 的選主,如果 RouterServer 部署單點也是可用的,而且 RouterServer 的宕機不會影響到數(shù)據(jù)的讀寫訪問,因為所有的 Proxy 與 Cache 服務都有本地的路由緩存”,關于 TARS 的采用,他說:“因為 TARS 是一個非常優(yōu)秀的服務開發(fā)框架,它屏蔽了底層的網絡通信細節(jié),且自帶了名字服務等很多服務化需要的功能,對于 DCache 來說,使用已有的 TARS 框架可以更好地做到服務化,我們沒有必要去重復的造輪子。”
至于 DCache 本身的能力,山寶銀介紹:“DCache 自身的存儲引擎具有很高的性能,而且支持后接 DB,對使用者來說,不需要再關心 DB 和緩存之間的數(shù)據(jù)一致性,以及緩存不命中帶來的一系列問題。”
具體來說,DCache 持久化與 Redis 不一樣,后者只是把內存中的數(shù)據(jù)在本地磁盤做一個備份,保證 Redis 重啟之后做數(shù)據(jù)恢復。
“Redis 持久化主要是為了數(shù)據(jù)備份。DCache 后端有了 DB 以后,業(yè)務的邏輯與后臺的數(shù)據(jù)可以完全隔開,DCache自身會處理緩存與DB之間的數(shù)據(jù)一致性問題。DCache會不斷的將Cache中的數(shù)據(jù)落地后端DB,如果 Cache 中存儲空間不夠,會將已經落地DB的冷數(shù)據(jù)淘汰掉。在數(shù)據(jù)查詢的過程中,如果查詢Cache不命中,會從 DB 讀取并重新存到 Cache,以此來保證 Cache中數(shù)據(jù)的熱點性和命中率,同時 DB 與 Cache 的穿透問題也得到解決。另外,數(shù)據(jù)持久化到后端DB的能力對于一些需要做離線數(shù)據(jù)分析的業(yè)務場景也比較方便。總之你完全不用關心數(shù)據(jù)的東西,只需要把數(shù)據(jù)寫到 Cache,后端的落地由 DCache 處理。”
DCache 特性
此外,DCache 的分布式集群化、異地鏡像部署、容災容錯能力在實際線上應用中都會提供非常高的價值。
作為一個分布式存儲系統(tǒng),DCache 的應用場景沒有限制在緩存上,山寶銀介紹,對于有高性能 NoSQL 存儲需求的場景,都可以使用 DCache,而且因為 DCache 具備容量淘汰與過期自動清理數(shù)據(jù)的功能,對于需要存儲熱點數(shù)據(jù)(如熱門文章)與臨時數(shù)據(jù)(如有時效性的聊天記錄)的場景也可以提供很好的支持。
山寶銀也提供了 DCache 的性能數(shù)據(jù):
目前騰訊內部包括 QQ 瀏覽器、應用寶、騰訊地圖、騰訊電腦管家、手機管家與騰訊游戲在內的近百個業(yè)務都接入了 DCache,這些業(yè)務的體量之大可以想象,山寶銀補充:“除了提供的這一組簡單的數(shù)據(jù),DCache 在高效可靠地支撐著近百個業(yè)務的運轉,日均調用量過萬億次,這也從側面說明了 DCache 在生產環(huán)境的性能與穩(wěn)定性。”
而除了系統(tǒng)本身高性能、高擴展、高可用與數(shù)據(jù)安全的設計外,Web 可視化的高效運維平臺也成了 DCache 不可或缺的重要能力。基于內存的 NoSQL 存儲系統(tǒng)在運維上會產生巨大的額外開銷,它需要對相關技術進行深入理解,并且在緊要關頭果斷做出正確決策。
DCache 基于 TARS 開發(fā),所以運維平臺將 DCache 與 TARS 的服務管理統(tǒng)一做在了一個模塊上,山寶銀介紹該運維平臺將大大提高效率,同時降低了運維門檻,關于服務的部署、上線、遷移、擴容、監(jiān)控與配置這些操作都可以輕松實現(xiàn)。
山寶銀,騰訊后臺高級工程師,專注于分布式 NoSQL 存儲領域的技術研發(fā)工作,參與騰訊多個自研存儲系統(tǒng)的開發(fā),在分布式系統(tǒng)、高可用與高性能服務等領域有較豐富的經驗。
總結
以上是生活随笔為你收集整理的腾讯开源 DCache,分布式 NoSQL 存储系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯再次开源三项技术,提升企业运维效率
- 下一篇: 99%的数据中心都会面临的痛点,现在终于