jd-hotkey探測熱點key

對任意突發性的無法預先感知的熱點數據,包括并不限于熱點數據(如突發大量請求同一個商品)、熱用戶(如惡意爬蟲刷子)、熱接口(突發海量請求同一個接口)等,進行毫秒級精準探測到。然后對這些熱數據、熱用戶等,推送到所有服務端JVM內存中,以大幅減輕對后端數據存儲層的沖擊,并可以由使用者決定如何分配、使用這些熱key(譬如對熱商品做本地緩存、對熱用戶進行拒絕訪問、對熱接口進行熔斷或返回默認值)。這些熱數據在整個服務端集群內保持一致性,并且業務隔離,worker端性能強悍。

適用場景:

1 mysql熱數據本地緩存

2 redis熱數據本地緩存

3 黑名單用戶本地緩存

4 爬蟲用戶限流

5 接口、用戶維度限流

6 單機接口、用戶維度限流

7 集群用戶維度限流

8 集群接口維度限流

環境部署

1 下載hotkey源碼

hotkey: 京東App后臺中間件,毫秒級探測熱點數據,毫秒級推送至服務器集群內存,大幅降低熱key對數據層查詢壓力

選擇master分支下載

2 下載etcd

相當于注冊中心作用

根據其文檔,需要先啟動etcd服務,下載地址:Releases · etcd-io/etcd

雙擊啟動

3 啟動worker

項目打包

啟動服務

java -jar worker-0.0.4-SNAPSHOT.jar --etcd.server=http://127.0.0.1:2379 --etcd.workerPath=myapp

本例指定了etcd地址和workPath(控制臺添加規則時,app名稱要和該值保持一致

4 啟動dashboard

新建數據庫 hotkey_db,并導入表,表來自db.sql

啟動dashboard

java -jar dashboard-0.0.2-SNAPSHOT.jar --etcd.server=http://127.0.0.1:2379

訪問http://127.0.0.1:8081(端口號可以通過dashboard的yml配置文件指定)

項目中接入hotkey

新建springboot項目

導入jar

文檔中只是提到了導入client的jar,但是沒有提到具體的jar的配置

開始導入了如下的jar,但是實際測試時,無法檢測hotkey

        <!-- 該jar無法使hotkey生效 --><dependency><groupId>io.github.ck-jesse</groupId><artifactId>jd-hotkey-client</artifactId><version>2.0.0</version></dependency>

只能對源碼的client進行打包并導入

在springboot項目中新建lib目錄,拷貝hotkey-client-0.0.4-SNAPSHOT-jar-with-dependencies.jar到lib目錄

通過maven導入該jar

        <dependency><groupId>com.jd.platform.hotkey</groupId><artifactId>hotkey-client</artifactId><version>0.0.4-SNAPSHOT</version><scope>system</scope><systemPath>${project.basedir}/lib/hotkey-client-0.0.4-SNAPSHOT-jar-with-dependencies.jar</systemPath></dependency>

yml配置

#etcd的地址,如有多個用逗號分隔
etcd:server: ${etcdServer:https://127.0.0.1:2379}
#  server: ${etcdServer:http://10.170.161.91:2379}
#  server: http://open-etcd.jd.com:2000
spring:application:name: ${name:myapp}###############################---redis---##############################
#  redis:
#    host: ${REDIS_HOST:127.0.0.1}
#    port: ${REDIS_PORT:6379}
#    password: ${REDIS_PASSWORD:}
server:port: 9999

讀取yml并初始化對象

package com.qfedu.hotkeytest;import com.jd.platform.hotkey.client.ClientStarter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;@Component
public class Starter {@Value("${etcd.server}")private String etcd;@Value("${spring.application.name}")private String appName;@PostConstructpublic void init() {ClientStarter.Builder builder = new ClientStarter.Builder();ClientStarter starter = builder.setAppName(appName).setEtcdServer(etcd).build();starter.startPipeline();}}

在dashboard中添加用戶

添加用戶時指定app名稱,和啟動worker時指定的workPath值保持一致

添加規則

本例表示,5秒內,訪問aaa前綴的key超過10次,則認為是熱點key,并緩存60秒

通過控制層測試

    @RequestMapping("/hotKey")public Object hotKey(String key) {if (!StringUtils.isEmpty(key) && JdHotKeyStore.isHotKey(key)) {return "isHot";} else {return "noHot";}}

5秒內,訪問該接口超過10次,自動生成緩存

jd-hotkey通過Caffeine將數據緩存到服務器的jvm內存中

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95736.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95736.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95736.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#WPF實戰出真汁07--【系統設置】--菜品類型設置

1、菜品設置介紹 菜品設置跟餐桌設置的功能目的是相同的&#xff0c;包括了新增&#xff0c;刪除&#xff0c;編輯&#xff0c;分頁&#xff0c;查詢&#xff0c;重置&#xff0c;全選&#xff0c;全消&#xff0c;列表功能&#xff0c;實現流程也是布局設計&#xff0c;后臺邏…

aave v3 存款與借款利息的計算方式

本文只涉及到利率計算的數學原理&#xff0c;不作源碼解析:存款首先我們假設小明在aave里面存了10000usdt&#xff0c;存的時候年化收益率是5%,那么半年后其存款的利息是多少呢?常規的計算方式如下:利息10000*5%*(存款的時長/一年的時長)這么做有什么問題呢&#xff1f;假設現…

Windows MCP.Net:基于.NET的Windows桌面自動化MCP服務器深度解析

&#x1f4cb; 目錄 項目概述 技術架構深度解析 核心功能模塊詳解 代碼實現分析 使用場景與實戰案例 性能優化與最佳實踐 擴展開發指南 總結與展望 項目概述 什么是Windows-MCP.Net&#xff1f; Windows MCP.Net是一個基于.NET 10.0開發的Windows桌面自動化MCP&…

Boost.Asio學習(7):Boost.Beast實現簡易http服務器

namespace beast boost::beast;beast::flat_buffer是一個用于 Boost.Asio 和 Boost.Beast 網絡讀寫的緩沖區實現。專為 一次性順序讀取 / 消費 場景設計&#xff0c;比 std::string 或 std::vector 高效&#xff0c;因為它是扁平內存結構&#xff08;contiguous memory&#x…

深入解析JVM內存區域劃分:從理論到實踐

Java虛擬機&#xff08;JVM&#xff09;是Java程序運行的核心環境&#xff0c;它負責管理內存分配、垃圾回收、字節碼執行等關鍵任務。理解JVM的內存區域劃分&#xff0c;對于優化Java應用性能、排查內存問題&#xff08;如OutOfMemoryError、StackOverflowError&#xff09;至…

滑窗|貪心|?滾動數組

lc17.08pair按身高升序、相同時體重降序排序結果是找體重序列的最長遞增子序列長度核心&#xff1a;轉化為二維最長遞增子序列問題求解vector<int> dp;for (auto& p : hw) {int w p.second;auto it lower_bound(dp.begin(), dp.end(), w);if (it dp.end()) {dp.pu…

深入理解數據庫架構:從原理到實踐的完整指南

一、數據庫存儲架構的多維度分類體系 1.1 基于數據組織方式的存儲架構分類 數據庫的存儲架構從根本上決定了其性能特征、適用場景和擴展能力。理解不同的數據組織方式是選擇合適數據庫技術的基礎&#xff0c;這種分類不僅反映了技術實現的差異&#xff0c;更體現了對不同業務需…

體彩排列三第2025218期號碼分析

大家好&#xff0c;本人蔡楚門來此平臺分享一下本期得經驗和思路&#xff0c;希望能夠給大家帶來好的運氣和靈感&#xff01;體彩排列三第2025218期號碼分析&#xff0c;大小號碼數字分析&#xff0c;上期開出全小號碼最多&#xff0c;最近兩期的開獎號碼全部都是全小號碼最多&…

java設計模式之迪米特法則介紹與說明

一、核心概念與目標 基本定義 迪米特法則的核心思想是&#xff1a;一個對象應該對其他對象盡可能少地了解&#xff0c;僅與直接關聯的對象&#xff08;即“朋友”&#xff09;通信&#xff0c;避免與“陌生人”產生直接交互。 直接朋友&#xff1a;包括當前對象的成員變量、方法…

2024-2025華為ICT大賽中國區 實踐賽昇騰AI賽道(高職組)全國總決賽 理論部分真題+解析

Part 1 昇騰AI全棧系統模塊(共6題)&#xff1a;1、許多計算芯片可以設計作為人工智能的計算芯片&#xff0c;但不同的芯片計算性能不同&#xff0c;昇騰計算芯片是一種()芯片。(單選題)A.CPU B.GPU C. NPU D.TPU正確答案&#xff1a;C解析&#xff1a;A項CPU中央處理器的架…

網絡安全和基礎設施安全局 (CISA) 表示微分段不再是可選的

網絡安全和基礎設施安全局 (CISA) 最近發布了一系列指導文件中的第一份&#xff0c;旨在幫助聯邦機構實施微分段&#xff0c;作為其零信任架構 (ZTA) 戰略的一部分&#xff0c;以遵守2022 年白宮的授權。 該文件《零信任中的微分段&#xff0c;第一部分&#xff1a;介紹和規劃…

Spring Boot SseEmitter 重復請求問題深度分析與解決方案

1. 前言 在使用 Spring Boot 開發流式接口(Server-Sent Events)時,我們遇到了一個令人困惑的問題:每次 SseEmitter 完成后,都會觸發第二次請求,導致重復請求檢測機制誤報。本文將詳細記錄問題的發現、分析過程以及最終的解決方案。 2. 系統架構背景 2.1 請求處理架構 …

心路歷程-三個了解敲開linux的大門

學習前都愛嘮叨一番&#xff1a; 了解一下&#xff1a;互聯網的發展是離不開服務器的&#xff0c;而服務器的系統主流的還是Linux&#xff1b;這個是有數據進行支撐的&#xff1b;這個只是作為了解而已&#xff0c;我們并不買課&#xff0c;也不做什么買賣的行為&#xff0c;僅…

關于“雙指針法“的總結

筆者這些天終于達成了只狼的全成就&#xff0c;甚是歡喜。然而樂極生悲&#xff0c;最近做了些算法題&#xff0c;竟沒有一道靠自己做出來。感覺算法題常常用到“雙指針法”呢……為什么到現在我還是做不出來這些算法題……今天就來試著總結一下它的使用場景吧。快慢指針法又名…

基于51單片機的智能吊燈

基于 51 單片機的智能吊燈設計與實現論文簡綱一、引言1.1 研究背景與意義闡述傳統照明設備在節能性、智能化方面的不足&#xff0c;結合智能家居產業發展趨勢&#xff0c;說明設計基于 51 單片機的智能吊燈對提升生活便利性、降低能耗的現實意義。1.2 國內外研究現狀簡要介紹當…

CF每日三題(1500-1700)

1792C 逆向思維1036D 前綴和尺取1598D 組合數學取三元組 將二元組放在坐標系中更好找到規律 1792C 思維 1500 參考題解 正難則反 注意是對一個排列進行操作&#xff0c;最后還原成1,2,…,n 每次選兩個數字很難想&#xff0c;反著想就是把1-n的排列變成所給數組的逆操作&#x…

Boost搜索引擎項目(詳細思路版)

目錄 項目相關背景 搜索引擎原理技術棧和項目環境 導入數據到自己的本地 數據去標簽與數據清洗模塊 Enumfile(src_path, &file_list)遞歸式寫入 Parsehtml(file_list, &results)去標簽 bool Parsetitle(const string& file, string* title)拆分標題 bool Pa…

AI產品經理面試寶典第69天:大模型穩定性評估與AI倫理挑戰面試題全解析

1. AI倫理與技術挑戰 1.1 問:你認為AI的最大挑戰是什么? 答:AI面臨的最大挑戰是算法偏見與模型黑箱問題。具體表現為: 數據偏見放大:訓練數據中隱含的性別、種族等偏見會被模型繼承,如招聘算法中的性別歧視案例 決策透明性缺失:深度學習模型的可解釋性不足,醫療診斷場…

【build】RDK構建系統v0.1 (持續更新。。。。)

一、 項目概述RDK構建系統是一個用于構建和定制嵌入式系統的自動化工具&#xff0c;通過簡單的命令行操作&#xff0c;您可以完成從下載依賴包、定制根文件系統、構建內核到打包鏡像的完整流程。該系統采用模塊化設計&#xff0c;提供了豐富的配置選項&#xff0c;適用于不同的…

關于RSA和AES加密

RSA非對稱加密 非對稱加密不能傳輸大數據量&#xff0c;但比對稱加密要安全&#xff0c;所以傳輸密碼一般就是用的非對稱加密 接口拿到RSA公鑰然后再加密之后傳給后端就好了 let crypt new JSEncrypt(); crypt.setPublicKey(res.message); // console.log(加密前:, data); let…