JD-hotkey輕量級(jí)熱 key 探測框架
JD-hotkey 是京東 APP 后臺(tái)熱數(shù)據(jù)探測框架,歷經(jīng)多次高壓壓測和 2020 年京東 618 大促考驗(yàn)。在上線運(yùn)行的這段時(shí)間內(nèi),每天探測的key數(shù)量數(shù)十億計(jì),精準(zhǔn)捕獲了大量爬蟲、刷子用戶,另準(zhǔn)確探測大量熱門商品并毫秒級(jí)推送到各個(gè)服務(wù)端內(nèi)存,大幅降低了熱數(shù)據(jù)對(duì)數(shù)據(jù)層的查詢壓力,提升了應(yīng)用性能。
該框架歷經(jīng)多次壓測,8核單機(jī)worker端每秒可接收處理16萬個(gè)key探測任務(wù),16核單機(jī)至少每秒平穩(wěn)處理20萬以上,實(shí)際壓測達(dá)到30萬以上,CPU平穩(wěn)支撐,框架無異常。在真實(shí)業(yè)務(wù)場景中,可用1:1000的比例,即1臺(tái)worker支撐1000臺(tái)服務(wù)端Tomcat的key探測任務(wù),即可帶來極大的數(shù)據(jù)存儲(chǔ)資源節(jié)省(如對(duì)redis集群的擴(kuò)充)。
介紹
對(duì)任意突發(fā)性的無法預(yù)先感知的熱點(diǎn)請(qǐng)求,包括并不限于熱點(diǎn)數(shù)據(jù)(如突發(fā)大量請(qǐng)求同一個(gè)商品)、熱用戶(如爬蟲、刷子)、熱接口(突發(fā)海量請(qǐng)求同一個(gè)接口)等,進(jìn)行毫秒級(jí)精準(zhǔn)探測到。 然后對(duì)這些熱數(shù)據(jù)、熱用戶等,推送到該應(yīng)用部署的所有機(jī)器JVM內(nèi)存中,以大幅減輕對(duì)后端數(shù)據(jù)存儲(chǔ)層的沖擊,并可以由客戶端決定如何使用這些熱key(譬如對(duì)熱商品做本地緩存、對(duì)熱用戶進(jìn)行拒絕訪問、對(duì)熱接口進(jìn)行熔斷或返回默認(rèn)值)。 這些熱key在整個(gè)應(yīng)用集群內(nèi)保持一致性。
核心功能:熱數(shù)據(jù)探測并推送至集群各個(gè)服務(wù)器
適用場景:
1 mysql熱數(shù)據(jù)本地緩存
2 redis熱數(shù)據(jù)本地緩存
3 黑名單用戶本地緩存
4 爬蟲用戶限流
5 接口、用戶維度限流
6 單機(jī)接口、用戶維度限流限流
7 集群用戶維度限流
8 集群接口維度限流
worker 端強(qiáng)悍的性能表現(xiàn)
每10秒打印一行,totalDealCount代表處理過的key總量,可以看到每10秒處理量在270萬-310萬之間,對(duì)應(yīng)每秒30萬左右QPS。
僅需要很少的機(jī)器,即可完成海量key的實(shí)時(shí)探測計(jì)算推送任務(wù)。比擴(kuò)容redis集群規(guī)模成本低太多。
界面效果
