精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

国产视频欧美视频| 国产视频不卡一区| 久久久免费观看| 亚洲天堂网一区二区| 成人视屏在线观看| 成人免费一区二区三区视频| 99在线看视频| 一级黄色av片| 欧美欧美全黄| 伊人成人开心激情综合网| 久久精品一卡二卡| 亚洲最大网站| 一区二区三区在线视频免费 | 国产手机在线视频| 久久高清精品| 亚洲国产免费av| 超碰超碰在线观看| 激情国产在线| 国产精品国产馆在线真实露脸 | 亚洲视频图片小说| 欧美精品国产精品久久久 | 亚洲国产97在线精品一区| 日本www.色| 丁香花高清在线观看完整版| 国产精品免费丝袜| 精品中文字幕人| 精品美女www爽爽爽视频| 日韩电影在线免费看| 久久久久久久色| 成人无码精品1区2区3区免费看| 老司机成人在线| 日韩一卡二卡三卡| 中文字幕22页| 九九热线视频只有这里最精品| 亚洲一区二区3| 久久99国产精品一区| 国产福利电影在线| 91麻豆swag| 韩国成人av| 精品久久久久成人码免费动漫| 久久国产精品第一页| 国产成人精品999| 日韩污视频在线观看| 影音先锋亚洲精品| 欧美精品videosex牲欧美| 日韩三级在线观看视频| 成人高清电影网站| 一本色道久久88综合亚洲精品ⅰ| 成人手机在线免费视频| 国产精品qvod| 亚洲成**性毛茸茸| 欧美久久久久久久久久久| 91精品网站在线观看| 欧美疯狂做受xxxx富婆| 日本三级黄色网址| 婷婷激情成人| 欧美区一区二区三区| 日韩精品视频一二三| 粉嫩91精品久久久久久久99蜜桃| 在线观看不卡视频| 精品久久久久久中文字幕2017| 日韩成人影音| 欧美性大战xxxxx久久久| wwwwxxxx日韩| 欧美综合影院| 日韩一区国产二区欧美三区| 精品人妻二区中文字幕| 国产伦乱精品| 国产视频精品久久久| 国产美女精品久久| jlzzjlzz亚洲女人| 久久久精品2019中文字幕神马| 亚洲视频重口味| 国产秀色在线www免费观看| 樱桃视频成人在线观看| 一区二区高清在线| 黄色一级在线视频| 日韩精品专区| 欧美日本韩国一区二区三区视频| 婷婷激情综合五月天| 欧美电影院免费观看| 日韩精品中文字幕在线不卡尤物 | 美女久久久久久| 欧美一区二区三区不卡| 国产伦理在线观看| 日韩成人av在线资源| 亚洲片在线资源| 日本二区三区视频| 黄色精品免费| 日本久久亚洲电影| 国产男女猛烈无遮挡| 成人精品免费网站| 日本高清一区| 成人福利网站| 欧美性猛交xxxxx水多| 超碰成人在线播放| 红杏视频成人| 日韩在线免费视频| 日韩欧美不卡视频| 久久精品国产一区二区三区免费看| 成人国产在线视频| 婷婷亚洲一区二区三区| 一区在线观看视频| 欧美变态另类刺激| 24小时成人在线视频| 亚洲精品国偷自产在线99热| 岛国片在线免费观看| 在线日韩中文| 成人有码视频在线播放| 青青色在线视频| ...av二区三区久久精品| 亚洲熟妇国产熟妇肥婆| 激情综合五月| 一区二区三区亚洲| 四虎永久在线精品| 激情久久五月天| 成人性视频网站| 国产精品成人久久久久| 亚洲a视频在线| 国产精品国产精品国产专区不蜜 | 91麻豆精品久久久久蜜臀| 国产激情视频网站| 亚洲一区欧美| 国产欧美精品一区二区| 亚洲 美腿 欧美 偷拍| 亚洲欧美色图小说| 久热精品在线观看视频| 国产成人av| 68精品久久久久久欧美| 性一交一乱一精一晶| 国产精品久久久久久久久动漫| 国产 福利 在线| 视频二区欧美毛片免费观看| 日韩中文字幕免费看| 天天操天天干天天摸| 97久久精品人人做人人爽| 日韩极品视频在线观看 | 日韩视频在线一区二区三区| 92看片淫黄大片看国产片| h视频在线播放| 色婷婷av一区二区三区gif| 粉嫩精品一区二区三区在线观看| 日本精品www| 欧美一区=区三区| 中文字幕精品视频| 99re热视频| 国产欧美日韩在线视频| 日本精品久久久久中文字幕| 亚洲aa在线| 欧洲成人免费视频| 久久免费看视频| 一本色道亚洲精品aⅴ| www.自拍偷拍| 亚洲欧美久久| 欧美精品国产精品久久久 | 国产精品久久激情| 国产在线超碰| 欧美色中文字幕| 99精品全国免费观看| 奇米777欧美一区二区| 亚洲欧美日产图| 黄色成人小视频| 超在线视频97| 亚洲精品一级片| 亚洲国产另类av| 99久久人妻无码中文字幕系列| 亚洲一区二区三区四区五区午夜| 久久久久久国产精品一区| 免费v片在线观看| 亚洲日本欧美日韩高观看| 日批视频免费观看| 综合av第一页| 熟妇高潮一区二区| 免费看的黄色欧美网站| 亚洲成人一区二区三区| 精品视频一二| 97视频com| 国产露出视频在线观看| 欧美日本一区二区三区| 久草网在线观看| ww亚洲ww在线观看国产| the porn av| 欧美高清不卡| 久久日韩精品| 四虎国产精品成人免费影视| 丁香亚洲综合激情啪啪综合| 97久久夜色精品国产九色| av免费不卡| 在线观看精品自拍私拍| 精品国精品国产自在久不卡| 欧美日韩中文字幕日韩欧美| 日本伦理一区二区三区| 成人一区二区在线观看| 乱子伦视频在线看| 欧美1级日本1级| 欧美一区1区三区3区公司| 亚洲日本中文| 91av在线看| 黄色网址在线免费| 亚洲男人的天堂在线播放| 国产尤物视频在线观看| 亚洲福利一二三区| 一级免费黄色录像| 99re6这里只有精品视频在线观看| 少妇一级淫免费放| 国产日韩欧美在线播放不卡| 国产麻豆电影在线观看| 免费成人网www| 91传媒视频免费| 成人在线高清| 欧美专区福利在线| 五月婷婷视频在线观看| 在线视频亚洲欧美| 天堂在线视频观看| 制服丝袜国产精品| 在线免费一区二区| 图片区日韩欧美亚洲| www.av免费| 欧美国产日本视频| 欧美 日本 国产| 粉嫩高潮美女一区二区三区| 182午夜在线观看| 免费亚洲视频| 男人的天堂狠狠干| 综合久久精品| 亚洲一区精彩视频| 色综合综合色| 精品麻豆av| www国产黄色| 国产精品调教| 1卡2卡3卡精品视频| 久久精品资源| 国产精品美女午夜av| 美脚恋feet久草欧美| 亚洲18私人小影院| 污影院在线观看| 欧美成年人视频网站欧美| 欧美日韩在线资源| 深夜福利一区二区| 在线视频三区| 中文字幕亚洲专区| av资源网在线观看| 在线精品国产成人综合| 久久久久久青草| 亚洲欧洲激情在线| 国内在线免费高清视频| 亚洲人成网站999久久久综合| 亚洲人妻一区二区三区| 日韩av中文字幕在线| 天堂中文资源在线观看| 亚洲成人黄色在线| 丰满肉肉bbwwbbww| 欧美精品第1页| 97精品人妻一区二区三区在线| 欧美日韩日日夜夜| 一区二区小视频| 在线观看91精品国产麻豆| 91麻豆国产在线| 9191精品国产综合久久久久久| 97精品人妻一区二区三区在线| 欧美精品xxxxbbbb| www.爱爱.com| 亚洲福利视频免费观看| 神宫寺奈绪一区二区三区| 亚洲精品国产精品久久清纯直播 | 日韩久久精品成人| 牛牛澡牛牛爽一区二区| 亚洲最新av在线| 久热国产在线| 欧美国产第一页| 蜜桃视频www网站在线观看| 国产成人精品一区二区在线| 成人免费在线观看视频| 91久久久久久久久久久久久| 98视频精品全部国产| 精品国产福利| 精品国产一区二区三区噜噜噜 | 伊人网综合视频| 91尤物视频在线观看| 欧美日本韩国一区二区三区视频| 久久免费精彩视频| 精品福利在线观看| 中文字幕丰满人伦在线| 日韩一本二本av| 视频二区在线| 日韩在线激情视频| eeuss鲁一区二区三区| 国产精品69av| 麻豆一二三区精品蜜桃| 久久久www免费人成黑人精品| 久久神马影院| 日本阿v视频在线观看| 日韩高清不卡一区| 中文字幕乱码在线人视频| 91免费小视频| 国产免费无码一区二区视频| 欧美午夜丰满在线18影院| 夜夜爽8888| 亚洲国语精品自产拍在线观看| 岛国大片在线观看| 欧美高清激情视频| 色综合天天色| 国产精品一区二区三区在线 | 二区三区不卡| 91久久极品少妇xxxxⅹ软件| 国产成人ay| 欧美一级欧美一级| 蜜桃视频一区二区三区在线观看 | 久久先锋影音av| 欧洲猛交xxxx乱大交3| 欧美系列亚洲系列| 欧美一区,二区| 久久久精品在线观看| 男人最爱成人网| 国产二区一区| 99久久www免费| 麻豆传传媒久久久爱| 国产91高潮流白浆在线麻豆| 国产不卡在线观看视频| 精品高清美女精品国产区| 国产wwwxxx| 蜜桃久久久久| 国产精品swag| 午夜激情久久| 日韩欧美xxxx| av不卡在线播放| 免费在线看黄网址| 在线电影欧美成精品| 成人欧美亚洲| 热久久美女精品天天吊色| 好吊妞视频这里有精品| 国产成人精品免费看在线播放 | 1024亚洲合集| 在线观看中文字幕2021| 亚洲精品一区中文字幕乱码| av影院在线免费观看| 高清av免费一区中文字幕| 你懂的网址国产 欧美| 五月天丁香综合久久国产 | jizz日本免费| 亚洲一区二区精品视频| 精品国产无码一区二区| 中文字幕日韩欧美精品在线观看| videos性欧美另类高清| 欧美高清性xxxxhdvideosex| 亚洲黄页一区| 香蕉视频免费网站| 一区二区在线观看视频| 99久久久久久久| 欧美精品在线免费| 久久99成人| 超碰人人爱人人| 国产91精品精华液一区二区三区 | 伦理片一区二区三区| 97超级碰碰碰| 国产真实有声精品录音| 国产成人无码av在线播放dvd| 久久久久高清精品| 一区二区三区四区免费视频| 国产综合色激情| 日本黄色播放器| 国产一区二区不卡| 国产一级视频在线播放| 亚洲成人av片在线观看| 英国三级经典在线观看| 欧美婷婷久久| 老司机精品视频在线| 91高清免费看| 亚洲激情 国产| 吉吉日韩欧美| 在线观看视频黄色| 国产aⅴ精品一区二区三区色成熟| 黄色小说在线观看视频| 亚洲男人的天堂网站| 欧美成人三级| 中文字幕人妻熟女人妻洋洋| 不卡一二三区首页| 狠狠狠狠狠狠狠| 久久精品国产欧美激情| 99a精品视频在线观看| 鲁一鲁一鲁一鲁一澡| 欧美高清在线视频| www日本在线| 日本三级久久久| 欧美成人直播| 波多野结衣一二三区| 91成人免费在线视频| 1区2区在线观看| 久久国产精品一区二区三区四区 | 午夜精品久久久久久久白皮肤| 亚洲瘦老头同性70tv| 一区二区免费av| 欧美日韩国产综合新一区| 91在线高清| 国内精品一区二区| 久久精品72免费观看| 国产精品2020| 日韩中文字幕免费| 欧美人妖在线观看| 狠狠操狠狠干视频|