- 資訊首頁(yè) > 互聯(lián)網(wǎng) >
- 隨機IOPS全面超越,騰訊云CSG存儲網(wǎng)關(guān)高性能緩存
CSG存儲網(wǎng)關(guān)是基于騰訊云高性能、高可靠性的對象存儲系統COS對外提供iSCSI、NFS和CIFS/SMB訪(fǎng)問(wèn)協(xié)議。作為一種混合云方案, 幫助用戶(hù)不用修改本地應用就可以把數據上傳到COS。網(wǎng)關(guān)可以部署在用戶(hù)IDC也可以部署在騰訊云上,產(chǎn)品形態(tài)如下所示。
1.緩存命中率和延時(shí)是技術(shù)上兩大挑戰,
網(wǎng)關(guān)和COS之間需要走外網(wǎng)來(lái)通訊,外網(wǎng)網(wǎng)絡(luò )存在延時(shí)高、抖動(dòng)和丟包等問(wèn)題,而且還會(huì )占用客戶(hù)大量帶寬。
實(shí)際場(chǎng)景下,我們發(fā)現用戶(hù)經(jīng)常訪(fǎng)問(wèn)的數據只是一小部分熱點(diǎn)數據,存在局部性特點(diǎn),所以如果能在網(wǎng)關(guān)上加一層緩存且緩存命中率足夠高的話(huà),理論上網(wǎng)關(guān)就可以達到接近本地磁盤(pán)的讀性能,也可以減少對帶寬占用。
緩存的大小受容量的限制只能保存一部分熱點(diǎn)數據, 需要根據場(chǎng)景選擇合適的緩存算法。評價(jià)緩存系統好壞一般通過(guò)命中率和延時(shí)兩個(gè)指標,緩存算法一般都是在兩者間權衡。影響命中率的關(guān)鍵就是緩存替換算法,而延時(shí)主要跟并發(fā)鎖設計有關(guān)。一般緩存系統采用一把大的全局鎖,對于CSG采用本地磁盤(pán)作為存儲介質(zhì)的系統,普通的SATA盤(pán)延時(shí)差不多10ms左右,如果采用全局鎖最多只有100qps/s, 所以需要對鎖進(jìn)行優(yōu)化。
2. 業(yè)界現有技術(shù)實(shí)現過(guò)程及弊端解析
業(yè)界普遍的做法是采用緩存替換算法是LRU,例如Linux內核page cache、 memcached等。典型的實(shí)現方式是hashtable 雙鏈 全局鎖的方式,但是這種實(shí)現存在兩大問(wèn)題:
所有的操作都需要加全局鎖造成并發(fā)低,延時(shí)高
對于數據訪(fǎng)問(wèn)局部性差的場(chǎng)景命緩存失效中率低,比如順序掃描
針對這兩個(gè)問(wèn)題常見(jiàn)的實(shí)現改進(jìn)思路是:
犧牲LRU特性,即減少節點(diǎn)移動(dòng)到head的次數, 從而降低全局鎖的競爭,但是可能會(huì )造成熱點(diǎn)數據被淘汰
LRU鏈表分兩段或多段,基于一定的訪(fǎng)問(wèn)策略解決局部性差的場(chǎng)景
memecached 和page cache也是基于這兩種改進(jìn)思路優(yōu)化的,下面分析下memecached 和page cache的具體實(shí)現細節。
memcached 的LRU算法實(shí)現:
每個(gè)節點(diǎn)一把鎖保護節點(diǎn)數據和索引
LRU鏈表分為hot、warm和cold三個(gè)子鏈表,大小比例為 32:32:34
每個(gè)子鏈表一把全局鎖,maintainer 線(xiàn)程根上述比例維持鏈表長(cháng)度時(shí)要加全局鎖
節點(diǎn)訪(fǎng)問(wèn)時(shí)只需要加節點(diǎn)鎖同時(shí)標記為active 并不移動(dòng)解決了鎖沖突問(wèn)題,而且分三個(gè)子鏈表配合制定的訪(fǎng)問(wèn)策略解決了局部性差的場(chǎng)景。但是只是由maintainer 線(xiàn)程根據 active 表示來(lái)判斷是否移動(dòng)到 head, 過(guò)度的犧牲LRU特性會(huì )造成熱點(diǎn)數據被淘汰導致命中率低。
page cache 的LRU實(shí)現:
全局鎖(zone鎖)
LRU鏈表分為activate和inactivate兩個(gè)子鏈表, 比例為1:1
也是采用分兩個(gè)子鏈表解決了局部性差的場(chǎng)景, 但是依然采用的是全局鎖沒(méi)有對鎖做優(yōu)化。
memecached 和page cache的實(shí)現針對局部性差的場(chǎng)景都是采用拆分鏈表的方式。針對全局鎖的問(wèn)題memecached 中雖然采用了節點(diǎn)鎖,但是過(guò)度的犧牲LRU特性會(huì )造成緩存命中率低。
3. 高性能騰訊云CSG技術(shù)背后細節
CSG在實(shí)現的參考了這兩個(gè)方案的優(yōu)缺點(diǎn),希望能夠在并發(fā)性能的和緩存的命中率之間到達平衡, 具體實(shí)現如下:
hashtable每個(gè)bucket一把鎖保護節點(diǎn)和索引,一把全局鎖保護LRU鏈表
鏈表由midpoint指針?lè )譃閔ot 和cold兩個(gè)子鏈表,默認的節點(diǎn)數比例是 2:1
CSG也是通過(guò)midpoint把LRU鏈表劃分為hot 和cold兩個(gè)子鏈表來(lái)解決局部性差場(chǎng)景。鎖的優(yōu)化采用的是段鎖 全局鎖,對節點(diǎn)的訪(fǎng)問(wèn)是先加段鎖訪(fǎng)問(wèn)數據,移動(dòng)節點(diǎn)時(shí)才加全局鎖,把全局鎖的臨界區控制到了最小范圍。這樣即保證了LRU特性提升了緩存命中率而且鎖沖突也不嚴重, 實(shí)際測試4線(xiàn)程加全局鎖修改鏈表可以達到50w /s的并發(fā)滿(mǎn)足了需求。
如上圖所示我們實(shí)現的段鎖hashtable是對每一個(gè)bucket一把鎖,對hash到同一個(gè)bucekt的key加同一鎖,多線(xiàn)程并發(fā)鎖沖突小并發(fā)高。hash沖突時(shí)采用的鏈式?jīng)_突處理, 當load_factor > 1.0時(shí)會(huì )自動(dòng)進(jìn)行resize,保證key和 bucket鎖得比例小于1:1。
下圖是多線(xiàn)程情況下跟stl 中unordered_map 加全局鎖性能對比數據,測試環(huán)境4 cpu 8G mem。
對比發(fā)現即使單線(xiàn)程性能也差不多10%的性能損耗,4線(xiàn)程下是unordered_map的兩倍以上, key越多鎖沖突越少并發(fā)性能也越好。
4. 與競品讀性能對比
測試環(huán)境:4cpu 16Gmem 1G網(wǎng)卡 平臺: cvm CBS(普通盤(pán)100G) 卷 500G
測試工具:fio -ioengine=libaio -iodepth=128 -direct=1 -rw=randread -bs=[32k|64k|512k]
數據對比在局部性比較好的場(chǎng)景隨機范圍80G,CSG的延時(shí)比國外知名云商低10%左右。局部性比較差的場(chǎng)景隨機范圍500G, CSG 讀隨機IOPS是競品3倍。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站