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