Hot key

  • Note: All 1-4 bullet points could be used separately.

  • Detect hot key (step2/3)

    • The one showed in the flowchart is a dynamic approach. There are several ways to decide hot keys:

      • Within proxy layer

      • Within client

      • Use redis shipped commands ./redis-cli --hotkeys

  • Randomly hash to multiple nodes instead of only one (step4)

  • Enable local cache for hot keys (step5)

  • Circuit breaker kicks in if detecting cache failure (step6)

   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                                                    
   β”‚               β”‚                                                                                    
   β”‚    Client     β”‚                                                                                    
   β”‚               β”‚                                                                                    
   β”‚               β”‚                                                                                    
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                                                    
     β”‚    β”‚     β”‚                                                                                       
     β”‚    β”‚     β”‚                                                                                       
     β”‚    β”‚     β”‚                                                               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β”‚    β”‚     β”‚                                                               β”‚ Configuration center β”‚
     β”‚    β”‚     β”‚    ─ ─ ─ ─ ─ ─ ─ step0. subscribe to hot key changes ─ ─ ─ ─ β–Άβ”‚                      β”‚
     β”‚    β”‚     β”‚   β”‚                                                           β”‚   (e.g. Zookeeper)   β”‚
     β”‚  Step1:  β”‚                                                               β””β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
     β”‚ Requests β”‚   β”‚                                                            β”‚          β–²           
     β”‚ come in  β”‚                                                                β”‚          β”‚           
     β”‚    β”‚     β”‚   β”‚                                                            β”‚          β”‚           
     β”‚    β”‚     β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€Step3. Hot key change is publishedβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚           
     β”‚    β”‚     β”‚   β”‚                                                                       β”‚           
     β”‚    β”‚     β”‚   β”‚                                                                       β”‚           
     β”‚    β”‚     β”‚   β”‚                                                                     Yes           
     β”‚    β”‚     β”‚   β”‚                                                                       β”‚           
     β–Ό    β–Ό     β–Ό   β–Ό                                                                       β”‚           
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                      β”‚           
   β”‚           App Cluster           β”‚                                                      β”‚           
   β”‚                                 β”‚    step 2:    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       .─────────.      
   β”‚ β”Œ ─ ─ ─ ┐  β”Œ ─ ─ ─ ┐  β”Œ ─ ─ ─ ┐ β”‚   aggregate   β”‚    Stream processing    β”‚      β•±           β•²     
   β”‚   local      local      local   β”œβ”€β”€β”€to detect ─▢│                         │────▢(Is it hot key)    
   β”‚ β”‚ cache β”‚  β”‚ cache β”‚  β”‚ cache β”‚ β”‚    hot keys   β”‚      (e.g. Flink)       β”‚      `.         ,'     
   β”‚  ─ ─ ─ ─    ─ ─ ─ ─    ─ ─ ─ ─  β”‚               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        `───────'       
   β”‚     β–²                           β”‚                                                                  
   β”‚ β”Œ ─ ╬ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ β”‚                                                                  
   β”‚     β•‘  step 6. circuit breaker  β”‚                                                                  
   β”‚ β”‚   β•‘                         β”‚ β”‚                                                                  
   β”‚  ─ ─║─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─  β”‚                                                                  
   β””β”€β”€β”€β”€β”€β•¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                                  
         β•‘          β”‚                  step4. For the same hot key,                                     
         β•‘          β”‚                 randomly map to multiple nodes                                    
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚                        instead of only 1                                          
β”‚ Step5. Cache β”‚    └───────────────┬──────────────────────────────────────┐                            
β”‚hot key withinβ”‚                    β”‚                                      β”‚                            
β”‚ local cache  β”‚                    β”‚                                      β”‚                            
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 
                         β”‚  β”Œ ─ ─ ─ ─ ─ ─ ─     β”Œ ─ ─ ─ ─ ─ ─ ─    β”Œ ─ ─ ─ ─ ─ ─ ─    β”‚                 
                         β”‚    distributed  β”‚      distributed  β”‚     distributed  β”‚   β”‚                 
                         β”‚  β”‚ cache node A      β”‚ cache node B     β”‚ cache node C     β”‚                 
                         β”‚   ─ ─ ─ ─ ─ ─ ─ β”˜     ─ ─ ─ ─ ─ ─ ─ β”˜    ─ ─ ─ ─ ─ ─ ─ β”˜   β”‚                 
                         β”‚                                                            β”‚                 
                         β”‚                       Cache Cluster                        β”‚                 
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Last updated