日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

一致 先验分布 后验分布_浅谈Loki分布式架构中的一致性哈希

發(fā)布時(shí)間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一致 先验分布 后验分布_浅谈Loki分布式架构中的一致性哈希 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

云原生小白

看到上面藍(lán)色字了么?關(guān)注下吧!

Loki在分布式部署的模式下,保存Ingester服務(wù)的狀態(tài)主要有3個(gè)渠道,分別是etcd、consul和基于gossip協(xié)議的memberlist。不管Loki用的是什么方式,它們最終都是將哈希環(huán)以KV的方式保存。再聊Loki之前,先來了解下一致性哈希的基本概念。

一致性哈希[1]是在1997年由麻省理工學(xué)院提出的一種分布式哈希(DHT)實(shí)現(xiàn)算法。相較于普通的哈希算法,一致性哈希除了繼承數(shù)據(jù)的離散性、擴(kuò)展性和容錯(cuò)性之外,還引入了虛擬節(jié)點(diǎn)的概念,極大的優(yōu)化了數(shù)據(jù)在存儲(chǔ)過程的中出現(xiàn)的傾斜問題。另外,遇到需要在不中斷業(yè)務(wù)的情況下擴(kuò)容節(jié)點(diǎn)或處理故障節(jié)點(diǎn)時(shí)造成的數(shù)據(jù)哈希變動(dòng)場(chǎng)景,通常還需要引入數(shù)據(jù)副本和請(qǐng)求中繼的方式來支持服務(wù)的熱變動(dòng)。

Loki的分布式架構(gòu)與Cortex一脈相承,其中對(duì)于各組件服務(wù)狀態(tài)和數(shù)據(jù)的哈希路由均采用了相同的設(shè)計(jì)。在ring.go中可以看到在Cortex中定義4種類型的哈希環(huán)IngesterRingRulerRingDestributorRingCompactorRing。其中最重要的一個(gè)環(huán)便是IngesterRing

先來看看Loki官方的架構(gòu)說明里面是怎么描述的吧。

從這里面我們可以了解到幾個(gè)關(guān)鍵信息:

  • 對(duì)日志流進(jìn)行hash是根據(jù)tenant IDLabels這兩個(gè)字段計(jì)算的
  • 每個(gè)Ingester服務(wù)都會(huì)擁有一組32位數(shù)字組成的Token注冊(cè)到哈希環(huán)中
  • Ingester狀態(tài)只有JOINING和ACTIVE狀態(tài)時(shí),才可以接收日志寫請(qǐng)求
  • Ingester狀態(tài)只有ACTIVE和LEAVING狀態(tài)時(shí),才可以接收日志讀請(qǐng)求
  • 查詢hash環(huán)上尋址會(huì)符合token > 日志流hash key中最小的一個(gè)token,并找到預(yù)期對(duì)應(yīng)的ingester實(shí)例
  • 如果復(fù)制因子大于1,則在已有哈希環(huán)上token的位置再順時(shí)針尋找下一個(gè)不屬于當(dāng)前ingster的實(shí)例

根據(jù)上述描述,我們大致得到一個(gè)類似下面的示意圖:

可以看到,當(dāng)復(fù)制因子等于2時(shí),Distributor就會(huì)將日志流發(fā)給兩個(gè)ingester服務(wù)處理。其中一個(gè)ingester故障或者下線時(shí),查詢?nèi)罩緯r(shí)仍然可以從有副本下一個(gè)Ingester實(shí)例中獲取到數(shù)據(jù)

在真實(shí)環(huán)境里,我們來看看Loki中關(guān)于IngesterRing的核心配置如下:

ingester_config:
??lifecycler:
????num_tokens:??|?default?=?128]
????ring:
??????kvstore:???|?default?=?"consul"]
??????replication_factor:??|?default?=?3]

這里最重要的便是虛擬節(jié)點(diǎn)(num_tokens)復(fù)制因子(replication_factor),這兩個(gè)配置將直接影響日志流經(jīng)過一致性哈希后的路由。虛擬節(jié)點(diǎn)的數(shù)量直接影響了一致性哈希的數(shù)據(jù)離散性。可以簡(jiǎn)單的概括為num_tokens越多,日志流經(jīng)過一致性哈希后會(huì)分散得更均衡到ingester處理,不過這是建立在犧牲內(nèi)存消耗和查找時(shí)間前提下的結(jié)論。

關(guān)于一致性哈希均衡性的結(jié)論可參考 https://medium.com/@dgryski/consistent-hashing-algorithmic-tradeoffs-ef6b8e2fcae8#890d

此外,復(fù)制因子的數(shù)量決定了Loki分布式集群對(duì)于節(jié)點(diǎn)故障的容忍性,以replication_factor=2為例,當(dāng)日志流經(jīng)過一致性哈希后會(huì)映射至兩個(gè)ingester實(shí)例,那么當(dāng)集群出現(xiàn)故障時(shí),在掛掉一個(gè)ingester實(shí)例時(shí),Loki日志流的寫入和讀取可以從相鄰的下一個(gè)ingester實(shí)例中獲取到。如果恰好兩個(gè)相鄰的ingester實(shí)例掛掉的話那此時(shí)日志流的讀寫映射到此區(qū)域的皆會(huì)受到影響。我們知道,ingester在將chunks刷新到存儲(chǔ)前,這部分?jǐn)?shù)據(jù)都是存在內(nèi)存的,所以復(fù)制因子配置過大,會(huì)造成內(nèi)容冗余,配置過小則又會(huì)造成故障時(shí)丟失數(shù)據(jù)的風(fēng)險(xiǎn)。在生產(chǎn)環(huán)境中使用時(shí),需根據(jù)loki的集群規(guī)模找到最佳值。

我們可以在瀏覽器中訪問http:///ring來查看和管理一致性哈希環(huán)。

可以看到里面主要存了Ingester的ID、狀態(tài)、地址、注冊(cè)時(shí)間、更新時(shí)間、Token數(shù)(虛擬節(jié)點(diǎn))、數(shù)據(jù)分布情況和每個(gè)Ingester的詳細(xì)Tokens。對(duì)所有的tokens做個(gè)排序便形成了一致性哈希環(huán)。當(dāng)有新的ingester加入進(jìn)來的時(shí)候,帶來的新tokens會(huì)填入一致性哈希環(huán),期間涉及到實(shí)例間數(shù)據(jù)遷移的部分僅會(huì)影響新token相鄰節(jié)點(diǎn)之間展開。

另外,我們還可以發(fā)現(xiàn)ingester注冊(cè)進(jìn)環(huán)中的服務(wù)名取的是hostname,也就是說如果你的Loki集群主機(jī)名有變化的話,ingester會(huì)以新的實(shí)例名稱注冊(cè)進(jìn)哈希環(huán)。老的失效的ingester仍然會(huì)保留在環(huán)中影響數(shù)據(jù)分布。這時(shí)我們需要在管理界面中將失效的Ingester實(shí)例刪除掉,也就是圖中的Forget按鈕。

如果你的Loki集群是裸金屬部署,那你需要保證服務(wù)器的HostName?

如果你的Loki集群是通過kubernetes部署,那Ingester一定要用StatesfulSet類型

最后,除一致性哈希外,Loki中關(guān)于仲裁一致性也會(huì)影響集群的可用性。當(dāng)Distributor的一次請(qǐng)求要經(jīng)過集群內(nèi)超過半數(shù)的ingester成功相應(yīng)后才會(huì)將本次請(qǐng)求返回給客戶端。關(guān)于這部分,Loki采用的Dynamo-style[2]方法,這個(gè)曾經(jīng)在Amazon的Dynamo系統(tǒng)中采用過,目前Riak, Cassandra, 和Voldemort這些無主節(jié)點(diǎn)備份模型也有參考。這里算是另一個(gè)話題了,留作以后再寫吧。

參考資料

[1]

一致性哈希: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.147.1879&rep=rep1&type=pdf

[2]

Dynamo-style: https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf

你可能還喜歡

點(diǎn)擊下方圖片即可閱讀

Loki告警日志內(nèi)容的騷方法

如何用Loki來繪制Ingress Nginx監(jiān)控大屏

關(guān)注公眾號(hào)【云原生小白】,回復(fù)「入群」加入Loki學(xué)習(xí)群

總結(jié)

以上是生活随笔為你收集整理的一致 先验分布 后验分布_浅谈Loki分布式架构中的一致性哈希的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。