最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

啥是熱數(shù)據(jù)探測(cè)?

2021-04-15 21:22 作者:程序員魚皮  | 我要投稿

如果數(shù)據(jù)也要像垃圾一樣分類,熱數(shù)據(jù)算哪類呢?

大家好,我是魚皮,今天分享一個(gè)有點(diǎn)兒干的技術(shù)知識(shí)。

大家知道,各種網(wǎng)站、應(yīng)用的運(yùn)行離不開數(shù)據(jù)的支撐,尤其對(duì)于企業(yè)來說,業(yè)務(wù)數(shù)據(jù)就是它的生命。

但有時(shí),將所有數(shù)據(jù)堆成一坨、統(tǒng)一處理可能無法滿足我們對(duì)性能和存儲(chǔ)空間等要求。因此,我們需要對(duì)數(shù)據(jù)進(jìn)行分類處理,以適應(yīng)不同的業(yè)務(wù)需求和應(yīng)用場(chǎng)景。

其中,有一種劃分方式是將數(shù)據(jù)分為 “熱數(shù)據(jù)”、“冷數(shù)據(jù)”,甚至還有 “暖數(shù)據(jù)”!

就和垃圾分類一樣一樣的~

先來聊一聊什么是熱數(shù)據(jù)吧!

什么是熱數(shù)據(jù)?

顧名思義,熱數(shù)據(jù)是指 很熱門、頻繁被訪問 的數(shù)據(jù)。

比如某度熱榜上的新聞,可能每秒都會(huì)有成千上萬次的訪問量。

根據(jù)熱數(shù)據(jù)的特點(diǎn),又可以分為兩類:

  • 有預(yù)期:數(shù)據(jù)成為熱門是在意料之中的,比如提前預(yù)告的大促活動(dòng)中由網(wǎng)紅代言的爆款商品,某寶的雙十一購物節(jié)就是最好的例子。

  • 無預(yù)期:數(shù)據(jù)的訪問量突然飆升!可能是受到了人為惡意攻擊、網(wǎng)絡(luò)爬蟲,或者是不經(jīng)意間突然火爆的內(nèi)容。比如突然出現(xiàn)了一個(gè)大新聞,某浪微博還沒來得及做好防護(hù),可能就炸了。

為了應(yīng)對(duì)熱數(shù)據(jù),通常我們會(huì)選用緩存技術(shù),將數(shù)據(jù)以 K / V(鍵值對(duì))的方式提前存儲(chǔ)到內(nèi)存中。

鍵值對(duì)

當(dāng)我們需要訪問緩存數(shù)據(jù)時(shí),需要根據(jù)一個(gè) key 字符串,來找到對(duì)應(yīng)的值。

頻繁被訪問的 key,又稱為熱 key,熱 key 是一個(gè)廣泛的概念,不僅僅局限于緩存系統(tǒng),例如以下這些都是熱 key:

  1. 數(shù)據(jù)庫中被頻繁訪問的主鍵,如爆款應(yīng)用的 appId

  2. K / V 緩存系統(tǒng)中經(jīng)常被訪問的 key

  3. 惡意攻擊、機(jī)器人刷的請(qǐng)求信息,如用戶的 userId、機(jī)器 IP 等

  4. 頻繁被訪問的接口地址,如 app 信息查詢 /app/query

  5. 統(tǒng)計(jì)單個(gè)用戶訪問某接口的頻率,如 userId + /app/query

  6. 統(tǒng)計(jì)某臺(tái)機(jī)器訪問某接口的頻率,如 IP + /app/query

  7. 統(tǒng)計(jì)某用戶訪問某接口特定內(nèi)容的頻率,如 userId + /app/query + appId

了解了啥是熱數(shù)據(jù)后,我們?cè)賮砹牧臒釘?shù)據(jù)探測(cè)技術(shù),即 “找出熱數(shù)據(jù)” 的技術(shù)。

為什么要檢測(cè)熱數(shù)據(jù)?

我們檢測(cè)熱數(shù)據(jù)的原因很簡(jiǎn)單:

1. 提升性能

如果使用分布式緩存,在讀取時(shí)還是需要網(wǎng)絡(luò)通訊的,就會(huì)有額外的時(shí)間開銷。那如果能對(duì)熱點(diǎn)數(shù)據(jù)提前進(jìn)行本地緩存,即預(yù)熱,就能大幅提升機(jī)器讀取數(shù)據(jù)的性能,減輕下層緩存集群的壓力。

熱數(shù)據(jù)多級(jí)緩存讀取流程

當(dāng)然,這不意味著所有數(shù)據(jù)都應(yīng)該存儲(chǔ)到本地。緩存級(jí)數(shù)越多,更新操作就越復(fù)雜,數(shù)據(jù)不一致的風(fēng)險(xiǎn)就越大!

2. 規(guī)避風(fēng)險(xiǎn)

對(duì)于無預(yù)期的熱數(shù)據(jù)(熱 key),可能會(huì)對(duì)業(yè)務(wù)帶來極大的風(fēng)險(xiǎn),可將風(fēng)險(xiǎn)分為兩個(gè)層次:

對(duì)數(shù)據(jù)層的風(fēng)險(xiǎn)

正常情況下,Redis 緩存單機(jī)就可支持十萬左右 QPS(每秒請(qǐng)求量),并能通過集群增大并發(fā)度。對(duì)于并發(fā)量一般的系統(tǒng),用 Redis 做緩存就足夠了。但是如果有一個(gè)商品數(shù)據(jù)突然爆火,或者收到惡意請(qǐng)求,對(duì)該數(shù)據(jù) key 的訪問 QPS 可能飆升到百萬、千萬量級(jí)!在低版本 Redis 單線程的工作方式下,會(huì)導(dǎo)致正常的請(qǐng)求排隊(duì),無法及時(shí)響應(yīng),嚴(yán)重時(shí)會(huì)導(dǎo)致整個(gè)分片集群癱瘓。

還有一種情況,某熱點(diǎn) key 突然過期,會(huì)導(dǎo)致大量請(qǐng)求直接砸向脆弱的數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫掛掉!

對(duì)應(yīng)用服務(wù)的風(fēng)險(xiǎn)

每個(gè)應(yīng)用在單位時(shí)間所能接受和處理的請(qǐng)求量是有限的,如果受到惡意請(qǐng)求的攻擊,讓惡意用戶獨(dú)自占用了大量請(qǐng)求處理資源,就會(huì)導(dǎo)致其他人畜無害的正常用戶的請(qǐng)求無法及時(shí)響應(yīng)。

惡意請(qǐng)求導(dǎo)致的請(qǐng)求排隊(duì)

因此,需要一套動(dòng)態(tài)熱 key 檢測(cè)機(jī)制,當(dāng)無預(yù)期的熱點(diǎn)數(shù)據(jù)出現(xiàn)時(shí),第一時(shí)間發(fā)現(xiàn)他,并針對(duì)這些數(shù)據(jù)進(jìn)行特殊處理。如本地緩存、拒絕惡意用戶、接口限流 / 降級(jí)等。在提升數(shù)據(jù)訪問性能的同時(shí)規(guī)避可能的風(fēng)險(xiǎn)。

那么如何檢測(cè)熱數(shù)據(jù)呢?

如何檢測(cè)熱數(shù)據(jù)?

首先,我們需要給 “熱” 定義一個(gè)閾值或規(guī)則,到底多熱算熱呢?

可以根據(jù)經(jīng)驗(yàn)值定義,也可以根據(jù)系統(tǒng)數(shù)據(jù)的平均熱度來定義,比如 1 秒內(nèi)訪問 1000 次的數(shù)據(jù)算是熱數(shù)據(jù)。

對(duì)于單機(jī)應(yīng)用,檢測(cè)熱數(shù)據(jù)很簡(jiǎn)單,直接在本地為每個(gè)key創(chuàng)建一個(gè)滑動(dòng)窗口計(jì)數(shù)器,統(tǒng)計(jì)單位時(shí)間內(nèi)的訪問總數(shù)(頻率),并通過一個(gè)集合存放檢測(cè)到的熱 key。

滑動(dòng)窗口

而對(duì)于分布式應(yīng)用,對(duì)熱 key 的訪問是分散在不同的機(jī)器上的,無法在本地獨(dú)立地進(jìn)行計(jì)算,因此,需要一個(gè)獨(dú)立的、集中的 熱 key 計(jì)算單元。

至此,可將熱數(shù)據(jù)探測(cè)工作分為配置規(guī)則、熱 key 上報(bào)、熱 key 統(tǒng)計(jì)、熱 key 推送四個(gè)步驟:

  1. 配置規(guī)則:指定熱 key 的上報(bào)條件,圈出需要重點(diǎn)監(jiān)測(cè)的 key

  2. 熱 key 上報(bào):每臺(tái)機(jī)器將自己的 key 訪問情況上報(bào)給集中計(jì)算單元

  3. 熱 key 統(tǒng)計(jì):收集各應(yīng)用實(shí)例上報(bào)的信息,使用滑動(dòng)窗口算法計(jì)算key的熱度

  4. 熱 key 推送:當(dāng)key的熱度達(dá)到設(shè)定值時(shí),推送熱key信息至所有應(yīng)用實(shí)例,各應(yīng)用實(shí)例將key值進(jìn)行本地緩存。

上報(bào)和計(jì)算

通過上述步驟,一套基本的熱 key 檢測(cè)機(jī)制就完成了。但熱數(shù)據(jù)探測(cè)系統(tǒng)往往會(huì)面對(duì)復(fù)雜的業(yè)務(wù)場(chǎng)景,還要考慮其他的問題,比如 key 失效處理等。

有贊 TMC 熱 Key 探測(cè)設(shè)計(jì)

為滿足高并發(fā)場(chǎng)景,在設(shè)計(jì)熱 key 探測(cè)框架時(shí),還應(yīng)重點(diǎn)關(guān)注如下指標(biāo):

  1. 實(shí)時(shí)性:考慮到熱 key 的突發(fā)性(甚至可能是 1 毫秒),必須能夠?qū)崟r(shí)發(fā)現(xiàn)熱 key 并推送

  2. 高性能:框架應(yīng)保持輕量且高性能,有效降低成本

  3. 準(zhǔn)確性:精準(zhǔn)探測(cè)符合規(guī)則的熱 key,不漏報(bào)、更不誤報(bào)

  4. 一致性:保證應(yīng)用實(shí)例與本地緩存的熱 key 一致,不能出現(xiàn)數(shù)據(jù)錯(cuò)誤

  5. 可擴(kuò)展:要統(tǒng)計(jì)的 key 數(shù)量級(jí)很大時(shí),集中計(jì)算集群可水平擴(kuò)展

此外,優(yōu)秀的熱 key 探測(cè)框架還應(yīng)滿足易接入、業(yè)務(wù)無侵入、可動(dòng)態(tài)配置、規(guī)則熱更新、可視化管理等特性。

最后,想深入學(xué)習(xí)的同學(xué)可以看一下京東開源的熱 key 探測(cè)框架 JD-hotkey 以及有贊開源的 TMC,他們的設(shè)計(jì)都非常巧妙。

我之前也寫過有關(guān)這兩個(gè)框架的分析文章,后面有機(jī)會(huì)整理下再發(fā)出來。


啥是熱數(shù)據(jù)探測(cè)?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
咸宁市| 同德县| 和政县| 皮山县| 大化| 衡阳县| 广宁县| 永修县| 辉南县| 长乐市| 河南省| 广德县| 桃园县| 田阳县| 漳州市| 繁峙县| 温州市| 大理市| 南阳市| 东城区| 壤塘县| 蕉岭县| 高淳县| 南溪县| 宜兴市| 富民县| 股票| 肥城市| 精河县| 资溪县| 玛多县| 宝应县| 汉川市| 句容市| 黄冈市| 清丰县| 宁南县| 白银市| 东城区| 天峻县| 古交市|