精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊原美圖開源的 Kv 存儲 Titan

開源
國內(nèi)公司大部分都有自己的輪子,開發(fā)完一代目拿到 KPI 走人,二代目繼續(xù)填坑,三四代淪為邊緣。即使開源也很難有持續(xù)的動力去維護(hù),比如本文要分享的 美圖 titan[1],很多優(yōu)化的 proposals[2] 都沒實(shí)現(xiàn),但是做為學(xué)習(xí)項(xiàng)目值得研究,萬一哪天二次開發(fā)呢?

市面上開源 kv 輪子一大堆,架構(gòu)上都是 rocksdb 做單機(jī)引擎,上層封裝 proxy, 對外支持 redis 協(xié)議,或者根據(jù)具體業(yè)務(wù)邏輯定制數(shù)據(jù)類型,有面向表格 table 的,有做成列式存儲的。

國內(nèi)公司大部分都有自己的輪子,開發(fā)完一代目拿到 KPI 走人,二代目繼續(xù)填坑,三四代淪為邊緣。即使開源也很難有持續(xù)的動力去維護(hù),比如本文要分享的 美圖 titan[1],很多優(yōu)化的 proposals[2] 都沒實(shí)現(xiàn),但是做為學(xué)習(xí)項(xiàng)目值得研究,萬一哪天二次開發(fā)呢?

整體架構(gòu)

Titan 代碼 1.7W 行,純 go 語言實(shí)現(xiàn)。server 層只負(fù)責(zé)處理用戶請求,將 redis 數(shù)據(jù)結(jié)構(gòu)映射成 rocskdb key/value, 底層使用 tikv 集群。

圖片

站在巨人的肩膀上,titan 無需考濾數(shù)據(jù) rebalance, 不關(guān)心數(shù)據(jù)存儲副本同步,這也是為什么代碼量如此少

壓測[3] 數(shù)據(jù)只有 2018 年的,性能一般,latency 也沒區(qū)分 99 和 95 分位。如果基于最新版本的 tikv 集群測試效果可能更好

數(shù)據(jù)類型實(shí)現(xiàn)

目前數(shù)據(jù)結(jié)構(gòu)只實(shí)現(xiàn)了 string, set, zset, hash, list, 有些也只是部分支持,只能說夠用

持久化的 kv 輪子,難點(diǎn)就是如何把 redis 數(shù)據(jù)結(jié)構(gòu)與 rocksdb key/value 做映射。原來單進(jìn)程天然實(shí)現(xiàn)的原子性很難實(shí)現(xiàn),維護(hù)一種數(shù)據(jù)涉及多個(gè) key, 如果分布在多個(gè) instance 進(jìn)程又涉及了分布式事務(wù),吞吐自然降低很多

比然我們常用 lua 腳本自定義一些業(yè)務(wù)邏輯,將涉及的多個(gè) key 用 hash tag 處理下,變成同一個(gè) redis slot, 但這在 titan 里是做不到的

性能問題,比如 HLEN? 操作,本來 redis O(1) 操作,如果在 titan  的 hash metakey 中維護(hù) len 記錄,那么高并發(fā)寫刪 hash 時(shí)就會有大量沖突。再比如 zset 數(shù)據(jù)結(jié)構(gòu),zrange?, zrangebyscore?, zrangebylex 需要將 member, score 分別編碼存儲,用空間換時(shí)間

String

String 類型只有兩種 key: MetaKey, ExpireKey

圖片

MetaKey 中 namespace 用于實(shí)現(xiàn)多租戶隔離,但也只是邏輯上的,畢竟資源仍然是共用的,dbid 類似 redis db0, db1 ...

ExpireKey 用于主動過期數(shù)據(jù),后臺任務(wù)定期掃。每個(gè)類型都有,后面省略不表

MetaValue 前 42 字節(jié)為屬性信息,后面才是真正的用戶 value. 時(shí)間字段表示創(chuàng)建,更新,過期 timestamp, 被動過期時(shí)會檢查 ExpireAt. uuid 用于唯一標(biāo)識 key, titan 主動 GC 會用到

Type 表示數(shù)據(jù)類型

const (
ObjectString = ObjectType(iota)
ObjectList
ObjectSet
ObjectZSet
ObjectHash
)

Encoding 表示具體的編碼類型

const (
ObjectEncodingRaw = ObjectEncoding(iota)
ObjectEncodingInt
ObjectEncodingHT
ObjectEncodingZipmap
ObjectEncodingLinkedlist
ObjectEncodingZiplist
ObjectEncodingIntset
ObjectEncodingSkiplist
ObjectEncodingEmbstr
ObjectEncodingQuicklist
)

為了兼容,定義與 redis 一致

Set

圖片

MetaKey? 與 String 類型一樣,MetaValue? 一共 50 字節(jié),前 42 字節(jié)一樣,后 8 字節(jié)維護(hù)集合 Set? 成員數(shù)量信息。也就是說后續(xù)的 SCARD 是 O(1),但同時(shí)刪除增加都要修改 MetaValue

DataKey? 編碼了 Set 唯一 uuid 與成員 member 信息,由于集合只需要成員 member, 所以 DatValue? 是 []byte{0}

Zset

圖片

與集合一樣,zset MetaKey/MetaValue 內(nèi)容一樣

DataKey? 內(nèi)容基本一樣,DataValue? 是 score 值,同時(shí)也維護(hù)了 score -> member 映射的 ScoreKey?, 用于空間換時(shí)間方便 zrangebyscore 查詢

Hash

圖片

注意這里 hash 的 MetaValue? 并沒有維護(hù)成員 Len 信息,所以當(dāng) HLEN 時(shí)要遍歷 range 整個(gè) data key 空間,為什么這么做呢?

titan 作者說 hash 寫并發(fā)時(shí)會有大量的事務(wù)沖突,所以選擇不維護(hù)。后來他們提出一個(gè)方案,對 MetaKey 拆分成多個(gè) slot,盡可能減少沖突,同時(shí)還能提高 HELN 性能,不過后來也沒實(shí)現(xiàn)

List

List? 有兩種結(jié)構(gòu),一個(gè)是 ziplist?, value 是用 pb 將多個(gè)元素編碼在一起, 另外一個(gè)是 linkedlist. 當(dāng)前實(shí)現(xiàn)沒看到 ziplist 到 linkedlist 的轉(zhuǎn)換,其實(shí)對于持久化存儲來說,只用 linkedlist 足夠了

圖片

MetaValue 后 24 字節(jié)分別維護(hù)了 len, lindex 和 rindex, 其中 index 類型是 float64, 為什么不是 int64 類型呢?

原因在于對于 Linsert 操作,如果插入 (2, 3) 之間,那么會失敗,但是用 float64 大概率會成功,但是考濾 float64 也有精度問題,存在失敗的概率

// calculateIndex return the real index between left and right, return ErrPerc=
func calculateIndex(left, right float64) (float64, error) {
if f := (left + right) / 2; f != left && f != right {
return f, nil
}
return 0, ErrPrecision
}

DataKey? 編碼 index 信息,DataValue 就是值

事務(wù)沖突

由于 titan 整體都是小事務(wù),所以對于 tikv 事務(wù)開啟了 1PC 和 AsyncCommit, 來提高整體吞吐量。對于沖突的事務(wù),titan 盡可能重試證執(zhí)行成功

關(guān)于 affinity 親緣性問題,titan 想將一個(gè)類型的 key 盡可能放到一個(gè) tikv 實(shí)例中,當(dāng)前沒有實(shí)現(xiàn),很難,不好搞。可以說 tikv 減少了持久化 kv 開發(fā)難度,也束縛了靈活性

刪除 GC

Delete? 時(shí),刪除 MetaKey?,如果存在 TTL 那么刪除 ExpireKey?, 對于非 String,將 DataKey 扔到 sys namespace 中

$sys{namespace}:{sysDatabaseID}:GC:{datakey}

后臺 doGC? 調(diào)用 gcDeleteRange? 慢慢刪除,由于 DataKey 中存在 uuid, 基本不會重復(fù),不影響用戶重新創(chuàng)建相同 key

Flushdb 操作也非常重,理論上可以給所有 key 編碼時(shí)帶上 version, 這樣可以快速 flush 快速回滾

運(yùn)維周邊

代碼開源只是第一步,周邊生態(tài)建設(shè)好用的人才多。目前看 tikv 運(yùn)維 pingcap 有很多文檔,基本夠用了,做好參數(shù)上的調(diào)優(yōu)

監(jiān)控,故障處理,做好 chaos 故障注入測試

數(shù)據(jù)一致性校驗(yàn),異構(gòu)同步 redis 等等目前看都是缺失的

小結(jié)

目前 titan 的狀態(tài)離真正 production ready 還差若干個(gè) P0 故障,OOM 內(nèi)存被打爆,spike 流量把集群打跨

圖片

代碼還有些書寫瑕疵,想要用的同學(xué),有能力二次開發(fā)的做好集群壓測,故障注入,限流,千萬不要急于上線,隨時(shí)做好回滾的準(zhǔn)備

責(zé)任編輯:武曉燕 來源: 董澤潤的技術(shù)筆記
相關(guān)推薦

2020-05-06 22:07:53

UbuntuLinux操作系統(tǒng)

2023-07-30 17:34:53

KV存儲ChunkPosit

2017-09-26 15:27:57

開源TiDB代碼

2023-05-11 07:30:10

KV存儲GC優(yōu)化

2022-03-21 08:49:01

存儲引擎LotusDB

2022-03-11 08:35:06

數(shù)據(jù)庫存儲監(jiān)控

2018-03-27 10:06:26

對象存儲演進(jìn)

2022-09-14 21:15:44

互聯(lián)網(wǎng)存儲技術(shù)

2023-09-04 08:26:08

手機(jī)開源Android

2021-07-05 09:40:25

iSCSI存儲協(xié)議以太網(wǎng)

2020-03-04 17:37:09

存儲系統(tǒng)硬件層

2020-06-23 08:15:13

計(jì)算存儲分離

2024-03-27 07:58:23

開源軟件MongoDB

2023-02-03 10:08:13

前端存儲庫存儲配額

2022-11-30 21:32:23

開源buildah工具

2018-04-24 09:05:09

容器存儲接口

2020-12-30 09:20:26

Redis數(shù)據(jù)庫開源

2020-03-13 10:36:19

KV存儲性能

2024-08-19 10:24:14

2021-11-29 10:41:09

分布式抽象接口
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

人成在线免费网站| 欧美激情综合色| 成人做爽爽免费视频| 在线播放第一页| 国产又粗又黄又爽的视频| 精品亚洲免a| 亚洲女同一区二区| 国产精品www网站| 国产女人18毛片水真多18| wwwww在线观看免费视频| 国产福利一区二区精品秒拍| 国产欧美日韩精品在线| 97超碰国产精品女人人人爽| 亚洲一区二区中文字幕在线观看| 国产黄在线观看| 亚洲视频成人| 亚洲精品一区二区三区99| 中文字幕av日韩精品| 中文字幕视频免费观看| 国产一区不卡| 日本高清不卡视频| 欧美成人第一区| 亚洲天堂一区在线观看| 欧美日韩另类图片| 懂色av中文一区二区三区天美| 国产精品裸体一区二区三区| 国产一级片免费| 国产成人高清精品免费5388| 欧美在线视频日韩| 一区二区三区四区视频在线观看| 狠狠躁夜夜躁人人爽视频| 精品产国自在拍| 欧美在线观看视频一区二区| 日韩一区二区三区资源| 中文无码精品一区二区三区| 亚洲激情二区| 亚洲女成人图区| 免费黄色日本网站| 精品美女视频在线观看免费软件| 狂野欧美一区| 永久免费看mv网站入口亚洲| 日本人69视频| 欧美性爽视频| 久久亚洲精华国产精华液 | 你懂的国产精品永久在线| 欧美一区二区播放| 国产亚洲黄色片| 青青草免费在线| 免费观看在线综合| 欧美理论电影在线播放| 国产精品成人免费一区久久羞羞| 久久女人天堂| 亚洲自拍偷拍综合| 欧美人与性禽动交精品| 97成人在线观看| 琪琪一区二区三区| 久久成人综合| 国产成人亚洲精品狼色在线| 久久久久久久999| 日本精品在线免费观看| 加勒比色老久久爱综合网| 日韩一二三区视频| 日本一区二区黄色| 电影在线观看一区| 国产欧美日韩一区二区三区在线观看| 精品久久久久久乱码天堂| 青青艹在线观看| 天堂一区二区在线| 国产精品小说在线| 国产精品theporn动漫| 在线中文一区| 亚洲日本中文字幕| 日本a在线免费观看| 97在线观看免费观看高清 | 天天综合永久入口| 蜜臀久久99精品久久久久久9| 国产精品第三页| 懂色av蜜臀av粉嫩av喷吹| 蜜乳av一区二区三区| 成人精品视频99在线观看免费| 日韩和一区二区| 天天射成人网| 亚洲社区在线观看| 欧美激情 一区| 欧美电影在线观看完整版| 亚洲欧美成人网| 国产无遮挡在线观看| 午夜国产精品视频| 欧美一性一乱一交一视频| 国产免费无码一区二区视频| 日本久久黄色| 亚洲乱码国产乱码精品精| 97人妻人人揉人人躁人人| 亚州av在线播放| 国产视频第一区| 成人性生交大片免费| 国产精品视频精品| 国产免费一级视频| 亚洲国产国产亚洲一二三| 欧美怡红院视频一区二区三区| 一区二区视频在线免费观看| 国产91丝袜在线18| 成人精品网站在线观看| 欧美熟妇交换久久久久久分类| 精品一区二区在线免费观看| 国产成人av在线播放| 天天操天天干视频| 亚洲手机视频| 欧美区二区三区| 亚洲不卡视频在线观看| 国产亚洲一区在线| 国产日韩欧美在线观看| 超碰在线97观看| 国产成人免费在线视频| 亚洲美女免费精品视频在线观看| 老司机福利av| 精品少妇3p| 色老头一区二区三区在线观看| 成人黄色a级片| 黄色录像免费观看| 欧美激情在线免费| 亚洲一区二区国产| 制服 丝袜 综合 日韩 欧美| 国产影视一区| 欧美极品少妇与黑人| 中文字幕日产av| 91蜜桃网址入口| 日本午夜一区二区三区| 国产一区二区影视| 午夜欧美一区二区三区在线播放| 亚洲美免无码中文字幕在线| 亚洲美女尤物影院| 在线视频一区二区三区| 野战少妇38p| 亚洲人体av| 国产日韩欧美在线| 成人18在线| 欧美在线观看18| 日韩精品无码一区二区三区久久久| 激情五月***国产精品| 2019最新中文字幕| 免费国产精品视频| 一区二区久久久久久| 国产精品嫩草影视| 91成人精品| 国内精品伊人久久| 一级黄色在线观看| 国内成人免费视频| 国内不卡一区二区三区| 国产毛片av在线| 一本色道久久综合亚洲aⅴ蜜桃 | 校园春色 亚洲| 国产在线精品视频| 久久久精品国产一区二区三区| 国产视频网址在线| 在线亚洲一区观看| 欧美三级视频网站| 免费精品视频在线| 综合久久国产| 日韩精品一区国产| 亚洲色图第一页| 国产午夜麻豆影院在线观看| 久久精品在这里| 成人午夜视频免费观看| 51一区二区三区| 日韩欧美成人一区| 欧美成人国产精品一区二区| 久久伊人亚洲| 亚洲.欧美.日本.国产综合在线| 婷婷在线播放| 欧美视频一二三区| 欧美自拍偷拍网| 国产日韩一区| 日本一区视频在线观看| 国产成人亚洲一区二区三区| 日韩成人激情视频| 国产盗摄x88av| 不卡一区二区三区四区| 亚洲成年人专区| 亚洲精品.com| 亚洲精品国产电影| 久久国产精品波多野结衣av| 麻豆精品视频在线观看| 欧美日韩一区在线播放| 国产精品麻豆成人av电影艾秋| 日韩在线观看免费全| 亚洲综合久久网| 国产精品伦一区二区三级视频| 国产素人在线观看| 欧洲乱码伦视频免费| 亚洲影院高清在线| 免费大片在线观看www| 91久久精品网| 国产精品三区在线观看| 久久精品久久综合| 免费网站在线观看视频 | 99久久99| 快射av在线播放一区| 欧美在线不卡一区| 久久精品一区二区三| 国产视频视频一区| 日韩中文字幕免费在线| 婷婷综合成人| 69视频在线免费观看| 男人天堂久久久| 亚洲国产美女久久久久| 国产精品久久久久久久久毛片| 国产精品无码永久免费888| 在线观看av日韩| 精品久久不卡| 国产亚洲精品美女久久久m| 欧美成人福利| 欧美亚洲午夜视频在线观看| а√中文在线8| 日韩你懂的在线观看| 久久久久久久久久久影院| 一区二区三区在线不卡| 中文字幕人妻一区| 激情综合色综合久久| 91黄色小网站| 精品国产一区一区二区三亚瑟 | 久久久久久久久久久久久久久99| 四虎1515hh.com| 一本一道久久a久久精品蜜桃| 久久久99爱| 97超碰成人| 久久久久久久网站| 3p视频在线观看| 亚洲欧美成人网| 香港一级纯黄大片| 精品国内二区三区| 草久视频在线观看| 亚洲已满18点击进入久久| 日韩免费高清一区二区| 亚洲欧美春色| 亚州欧美一区三区三区在线 | 日韩成人亚洲| 欧美在线免费观看| 波多野结衣一区二区| 亚洲高清色综合| 日本熟女毛茸茸| 五月天中文字幕一区二区| 337p日本欧洲亚洲大胆张筱雨 | 日韩在线成人| 91免费在线视频| 4438五月综合| 久久久久久网站| 欧美卡一卡二| 欧美日本亚洲视频| 免费污视频在线| 欧美黑人xxx| 日本a一级在线免费播放| 亚洲国产精品va在线看黑人| 丰满人妻一区二区三区四区53| 欧美午夜激情小视频| 国产一区第一页| 北岛玲一区二区三区四区| 91色国产在线| 蜜臀av一区二区| 亚洲精品免费一区亚洲精品免费精品一区| 午夜久久黄色| 久久精品xxx| 最新亚洲视频| 成人在线看视频| 欧美区亚洲区| 亚洲激情一区二区| 女同另类激情重口| 久久久久久亚洲精品不卡4k岛国 | 一区在线电影| 91精品国产麻豆国产在线观看| 中文字幕乱码一区二区三区| 91av精品| 欧美 国产 综合| 欧美在线看片| 日韩精品 欧美| 久久一区激情| 1314成人网| 99riav久久精品riav| 久久久久久综合网| 国产成人免费视频网站| 三级男人添奶爽爽爽视频| 国产一区二区福利视频| 欧美丰满熟妇bbb久久久| 9久草视频在线视频精品| 色屁屁草草影院ccyy.com| 亚洲免费观看高清完整版在线观看 | 伊人夜夜躁av伊人久久| 日本道在线观看| 欧美三区在线视频| 欧美在线观看不卡| 欧美视频在线一区二区三区| 亚洲精品无码久久久| 正在播放亚洲一区| 久久久久亚洲视频| 69久久99精品久久久久婷婷| 黄色美女一级片| 一区二区三区黄色| 欧美黄色视屏| 国产精品久久久久久久久男| 超碰成人在线观看| 色视频一区二区三区| 激情综合在线| 日韩av在线中文| 日本在线不卡一区| 蜜桃色一区二区三区| 国产欧美视频在线观看| 国产无套内射又大又猛又粗又爽 | 国产日韩欧美视频在线观看| 欧美少妇一区二区| 蜜桃视频在线观看www| 日韩专区中文字幕| 青青青免费在线视频| 114国产精品久久免费观看| 动漫一区二区三区| caoporn国产精品免费公开| 精品国产午夜| a级黄色一级片| 粉嫩aⅴ一区二区三区四区五区| 国产不卡在线观看视频| 色综合久久综合网| 免费av网站观看| 久久99久久99精品中文字幕| 激情中国色综合| 日本一区二区不卡高清更新| 亚洲看片免费| 国产成人精品一区二区在线小狼| 中文字幕免费在线观看视频一区| yjizz国产| 亚洲国产欧美精品| 久草在线视频福利| 亚洲淫片在线视频| 综合在线一区| 成人日韩在线视频| 欧美韩国一区二区| 日韩黄色片网站| 亚洲毛片一区二区| 亚洲十八**毛片| 欧洲精品久久| 久久激情一区| 九九热免费在线观看| 欧美激情一区二区三区蜜桃视频| 日本特级黄色片| 亚洲精品大尺度| 国产夫妻在线播放| 精品国产二区在线| 亚洲深夜激情| 亚洲人人夜夜澡人人爽| 国产精品久久久久久久久动漫| 欧美日韩在线视频免费播放| 欧美另类z0zxhd电影| 熟妇人妻av无码一区二区三区| 欧美疯狂xxxx大交乱88av| 国产高清亚洲| 免费的av在线| 久久久一二三| 无套内谢大学处破女www小说| 精品国产精品自拍| 日韩精品系列| 国产精品9999| 色综合蜜月久久综合网| 亚洲图片 自拍偷拍| 一区二区三区国产豹纹内裤在线| 成人av一区二区三区在线观看 | 成人黄色片网站| 久久久久久久久久久久久久久久久久| 欧美性猛交xxxx乱大交91| 伊人夜夜躁av伊人久久| 四虎永久在线精品免费网址| 91黄色8090| 精品freesex老太交| 婷婷中文字幕在线观看| 亚洲一区二区不卡免费| 亚洲人视频在线观看| 国产精品日韩欧美| 中文字幕免费一区二区| av2014天堂网| 欧洲精品一区二区| caopo在线| 久久99精品国产99久久| 日韩黄色免费网站| 国产精品一区二区人妻喷水| 欧美日韩免费在线观看| 国产裸舞福利在线视频合集| 亚洲一区二区三区久久| 夜夜嗨网站十八久久| 久久久久久久久久久久国产精品| 亚洲成人资源网| www.色日本| 欧美孕妇与黑人孕交| 99久久99久久精品国产片桃花 | 国产精品网曝门| 国产高清免费观看| 上原亚衣av一区二区三区| 一区中文字幕| 色哺乳xxxxhd奶水米仓惠香| 蜜桃视频在线观看一区| 国产少妇在线观看| 亚洲片在线资源| 一区二区三区欧洲区| av无码精品一区二区三区|