參考:
得物熱點探測技術架構設計與實踐
Redis數據傾斜與JD開源hotkey源碼分析揭秘
京東熱點檢測 HotKey 學習筆記
hotkey: 京東App后臺中間件,毫秒級探測熱點數據,毫秒級推送至服務器集群內存,大幅降低熱key對數據層查詢壓力
京東毫秒級熱key探測框架設計與實踐,已實戰于618大促
問題一、如何進行熱點探測?
? ? ? ?首先我們要定義一下如何才能算是一個熱點,我們知道熱點產生的條件是 2 個:一個時間,一個流量。那么根據這個條件我們可以簡單定義一個規則:比如 1 秒內訪問 1000 次的數據算是熱數據,當然這個數據需要根據具體的業務場景和過往數據進行具體評估。
? ? ? ?對于單機應用,檢測熱數據很簡單,直接在本地為每個 Key 創建一個滑動窗口計數器,統計單位時間內的訪問總數(頻率),并通過一個集合存放檢測到的熱 Key。
? ? ? ?而對于分布式應用,對熱 Key 的訪問是分散在不同的機器上的,無法在本地獨立地進行計算,因此,需要一個獨立的、集中的熱 Key 計算單元。
我們可以簡單理解為:分布式應用節點感知熱點規則配置,將熱點數據進行上報,工作節點進行熱點數據統計,對于符合閾值的熱點進行推送給客戶端,應用收到熱點信息進行本地緩存等策略這五個步驟:
1.熱點規則:配置熱 Key 的上報規則,圈出需要重點監測的 Key
2.熱點上報:應用服務將自己的熱 Key 訪問情況上報給集中計算單元
3.熱點統計:收集各應用實例上報的信息,使用滑動窗口算法計算 Key 的熱度
4.熱點推送:當 Key 的熱度達到設定值時,推送熱 Key 信息至所有應用實例
5.熱點緩存:各應用實例收到熱 Key 信息后,對 Key 值進行本地緩存(此步驟根據具體業務策略調整)