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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

啥是热数据探测?

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 啥是热数据探测? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果數據也要像垃圾一樣分類,熱數據算哪類呢?

大家好,我是魚皮,今天分享一個有點兒干的技術知識。

大家知道,各種網站、應用的運行離不開數據的支撐,尤其對于企業來說,業務數據就是它的生命。

但有時,將所有數據堆成一坨、統一處理可能無法滿足我們對性能和存儲空間等要求。因此,我們需要對數據進行分類處理,以適應不同的業務需求和應用場景。

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

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

先來聊一聊什么是熱數據吧!

什么是熱數據?

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

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

根據熱數據的特點,又可以分為兩類:

  • 有預期:數據成為熱門是在意料之中的,比如提前預告的大促活動中由網紅代言的爆款商品,某寶的雙十一購物節就是最好的例子。

  • 無預期:數據的訪問量突然飆升!可能是受到了人為惡意攻擊、網絡爬蟲,或者是不經意間突然火爆的內容。比如突然出現了一個大新聞,某浪微博還沒來得及做好防護,可能就炸了。

為了應對熱數據,通常我們會選用緩存技術,將數據以 K / V(鍵值對)的方式提前存儲到內存中。

當我們需要訪問緩存數據時,需要根據一個 key 字符串,來找到對應的值。

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

  • 數據庫中被頻繁訪問的主鍵,如爆款應用的 appId
  • K / V 緩存系統中經常被訪問的 key
  • 惡意攻擊、機器人刷的請求信息,如用戶的 userId、機器 IP 等
  • 頻繁被訪問的接口地址,如 app 信息查詢 /app/query
  • 統計單個用戶訪問某接口的頻率,如 userId + /app/query
  • 統計某臺機器訪問某接口的頻率,如 IP + /app/query
  • 統計某用戶訪問某接口特定內容的頻率,如 userId + /app/query + appId
  • 了解了啥是熱數據后,我們再來聊聊熱數據探測技術,即 “找出熱數據” 的技術。

    為什么要檢測熱數據?

    我們檢測熱數據的原因很簡單:

    1. 提升性能

    如果使用分布式緩存,在讀取時還是需要網絡通訊的,就會有額外的時間開銷。那如果能對熱點數據提前進行本地緩存,即預熱,就能大幅提升機器讀取數據的性能,減輕下層緩存集群的壓力。

    當然,這不意味著所有數據都應該存儲到本地。緩存級數越多,更新操作就越復雜,數據不一致的風險就越大!

    2. 規避風險

    對于無預期的熱數據(熱 key),可能會對業務帶來極大的風險,可將風險分為兩個層次:

    對數據層的風險

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

    還有一種情況,某熱點 key 突然過期,會導致大量請求直接砸向脆弱的數據庫,導致數據庫掛掉!

    對應用服務的風險

    每個應用在單位時間所能接受和處理的請求量是有限的,如果受到惡意請求的攻擊,讓惡意用戶獨自占用了大量請求處理資源,就會導致其他人畜無害的正常用戶的請求無法及時響應。

    因此,需要一套動態熱 key 檢測機制,當無預期的熱點數據出現時,第一時間發現他,并針對這些數據進行特殊處理。如本地緩存、拒絕惡意用戶、接口限流 / 降級等。在提升數據訪問性能的同時規避可能的風險。

    那么如何檢測熱數據呢?

    如何檢測熱數據?

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

    可以根據經驗值定義,也可以根據系統數據的平均熱度來定義,比如 1 秒內訪問 1000 次的數據算是熱數據。

    對于單機應用,檢測熱數據很簡單,直接在本地為每個key創建一個滑動窗口計數器,統計單位時間內的訪問總數(頻率),并通過一個集合存放檢測到的熱 key。

    而對于分布式應用,對熱 key 的訪問是分散在不同的機器上的,無法在本地獨立地進行計算,因此,需要一個獨立的、集中的 熱 key 計算單元。

    至此,可將熱數據探測工作分為配置規則、熱 key 上報、熱 key 統計、熱 key 推送四個步驟:

  • 配置規則:指定熱 key 的上報條件,圈出需要重點監測的 key
  • 熱 key 上報:每臺機器將自己的 key 訪問情況上報給集中計算單元
  • 熱 key 統計:收集各應用實例上報的信息,使用滑動窗口算法計算key的熱度
  • 熱 key 推送:當key的熱度達到設定值時,推送熱key信息至所有應用實例,各應用實例將key值進行本地緩存。
  • 通過上述步驟,一套基本的熱 key 檢測機制就完成了。但熱數據探測系統往往會面對復雜的業務場景,還要考慮其他的問題,比如 key 失效處理等。

    為滿足高并發場景,在設計熱 key 探測框架時,還應重點關注如下指標:

  • 實時性:考慮到熱 key 的突發性(甚至可能是 1 毫秒),必須能夠實時發現熱 key 并推送
  • 高性能:框架應保持輕量且高性能,有效降低成本
  • 準確性:精準探測符合規則的熱 key,不漏報、更不誤報
  • 一致性:保證應用實例與本地緩存的熱 key 一致,不能出現數據錯誤
  • 可擴展:要統計的 key 數量級很大時,集中計算集群可水平擴展
  • 此外,優秀的熱 key 探測框架還應滿足易接入、業務無侵入、可動態配置、規則熱更新、可視化管理等特性。


    最后,想深入學習的同學可以看一下京東開源的熱 key 探測框架 JD-hotkey 以及有贊開源的 TMC,他們的設計都非常巧妙。

    我之前也寫過有關這兩個框架的分析文章,后面有機會整理下再發出來。

    總結

    以上是生活随笔為你收集整理的啥是热数据探测?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。