原创 京東毫秒級熱key探測框架設計與實踐,已完美支撐618大促

在擁有大量併發用戶的系統中,熱key一直以來都是一個不可避免的問題。或許是突然某些商品成了爆款,或許是海量用戶突然湧入某個店鋪,或許是秒殺時瞬間大量開啓的爬蟲用戶, 這些突發的無法預先感知的熱key都是系統潛在的巨大風險。 風險是什麼呢?

原创 使用redis分佈式鎖高併發下QPS測試,單機一秒下1千個訂單

前面一篇講過併發下單時進行優化的一些策略,後來我寫了代碼進行了實測。 關於redisson做分佈式鎖的代碼在這篇文章。這裏我來測試一下分佈式鎖的性能。 簡單的controller package com.tianyalei.redisl

原创 分佈式環境下對部分熱數據(如redis熱key,熱請求)進行探測,並對探測結果及時同步到各個client實例的JVM內存的方案簡述

可先閱讀之前的這篇,有讚的熱key探測及緩存方案。 常見場景 突發性的無法預先感知的熱點數據請求,或者有陣發性明顯熱點數據的。 譬如突然大量請求都命中了redis的某個分片,造成該redis卡頓,影響其他請求。熱key特性如 goodsI

原创 使用Retryer優雅地實現對Callable各種各樣的重試調用

Runnable和Callable都是多線程編程中常用的接口,通常是通過實現該接口編寫業務邏輯後,再由new Thread去發起線程調用。 主要區別在於Runnable沒有返回值,而Callable有返回值。下面就來看一個重試框架Retr

原创 10G mysql binlog重放並傳輸到另一臺服務器執行,阿里中間件大賽

轉載自:https://tianchi.aliyun.com/forum/new_articleDetail.html?spm=5176.11165310.0.0.90a57f61Sy5xTQ&raceId=231600&postsId=

原创 有讚的redis熱key探測及緩存到jvm內存框架方案

下面這篇文章來自於有讚的知識共享,總體設計還是不錯的,但我對其中的一點比較存疑。就是將計算熱點key的工作放在客戶端這裏。 因爲一個java實例,可能面臨巨多的get請求,譬如請求的key數量較多,那麼由客戶端來記錄這些key,並計算ke

原创 Java簡單實現滑動窗口

由於最近有一個統計單位時間內某key的訪問次數的需求,譬如每5秒訪問了redis的某key超過100次,就取出該key單獨處理。 這樣的單位時間統計,很明顯我們都知道有個邊界問題,譬如5秒內100次的限制。剛好前4.99秒訪問都是0,最後

原创 redis探祕:選擇合適的數據結構,減少80%的內存佔用,這些點你get到了嗎?

本文首發於京東零售平臺公衆號,https://mp.weixin.qq.com/s/uzuz7rqctQ-bjdRcf1tO9g redis作爲目前最流行的nosql緩存數據庫,憑藉其優異的性能、豐富的數據結構已成爲大部分場景下首選的緩存

原创 6 mysql底層解析——緩存,Innodb_buffer_pool,包括連接、解析、緩存、引擎、存儲等

前面幾篇主要學習存儲,在磁盤上的存儲結構,內部格式等。 這一篇就來看內存,對於Innodb來說,也就是最關鍵的Innodb_buffer_pool。 我們都知道,內存讀寫和磁盤讀寫的速度不在一個數量級,在數據庫中,數據都是最終落到磁盤上的

原创 2分鐘快速發佈自己的項目供別人在pom裏依賴

大家經常會在maven、gradle裏依賴別人的項目或模塊。大家知道,別人的項目都是發佈在maven中央倉庫的,要經歷一系列的步驟方能上傳成功,才能供別人依賴。 這裏要說一種簡單方式,2分鐘就讓你的項目可以供大家使用。就是這個網站:ht

原创 基於各服務註解方式,在網關zuul中對所有下游服務權限做控制,覆蓋到所有接口,權限控制到角色、菜單、按鈕、方法

開源地址:https://gitee.com/tianyalei/zuulauth 在單體應用架構下,常見的用戶-角色-菜單權限控制模式,譬如shiro,就是在每個接口方法上加RequireRole,RequirePermission,當

原创 任意組合、編排的多線程併發框架,支持任意阻塞、等待、串並行組合,回調、超時、默認值等

併發場景可能存在的需求之——任意編排 1 多個執行單元的串行請求   2 多個執行單元的並行請求   3 阻塞等待,串行的後面跟多個並行   4 阻塞等待,多個並行的執行完畢後才執行某個   5 串並行相互依賴   6 複雜場景

原创 京東618大促壓測時自研中間件暴露出的問題總結,壓測級別數十萬/秒

前天618大促演練進行了全鏈路壓測,在此之前剛好我的熱key探測框架(點擊可跳轉到開源地址)也已經上線灰度一週了,小範圍上線了幾千臺服務器,每秒大概接收幾千個key探測,每天大概幾億左右,因爲量很小,所以框架表現穩定。藉着這次壓測,剛好可

原创 Java中使用etcd,包括基本的set、get、超時設置,watch監聽等

etcd的使用文章。 etcd來zookeeper類似,常用的主要有set,get,getPrefix:獲取指定前綴的所有數據,grant:key的超時設置,watch:監聽回調事件,watchPrefix:監聽某個前綴的事件,keepA

原创 京東熱key探測框架本地壓測數據記錄,單機(8核)QPS約16萬/s,可水平擴展

繼上一次全鏈路壓測時,熱key框架由於Java低版本(1.8.0_131之前的1.8版本)獲取docker內cpu核數有問題,實則獲取的是宿主機的核數,造成線程數量過多,壓測瞬間cpu達到100%,問題也記錄在了另一篇(https://b