1. 程式人生 > >【並發編程】高並發相關技術

【並發編程】高並發相關技術

增加 src 雪崩 分布 擴容 分庫分表 strong uav 請求

高並發之擴容思路

垂直擴容(縱向擴展):提高系統部件能力
水平擴容(橫向擴展):增加更多系統成員來實現

讀操作擴展:memcache、redis、CDN等緩存
寫操作擴展:Cassandra、Hbase等

高並發之緩存思路

緩存特征

命中率:命中數/(命中數+未命中數)
最大元素(空間)
清空策略:FIFO, LFU, LRU, 過期時間,隨機等

緩存命中率影響因素

業務場景和業務需求
緩存的設計(粒度和策略)
緩存容量和基礎設施

緩存分類和應用場景

本地緩存:編程實現(成員變量、局部變量、靜態變量)、Guava Cache
分布式緩存:Memcache、Redis

高並發場景下緩存的常見問題

緩存一致性

不一致的場景
更新數據庫成功->更新緩存失敗->數據不一致
更新緩存成功->更新數據庫失敗->數據不一致
更新數據庫成功->淘汰緩存失敗->數據不一致
淘汰緩存成功->更新數據庫失敗->查詢緩存miss

緩存並發問題
使用鎖
技術分享圖片

緩存穿透(擊穿)問題
技術分享圖片

解決方案:
緩存空對象:對查詢結果為空的對象也進行緩存,如果是集合,可以緩存一個空集合
如果是緩存單個對象,可以通過對象標識區分,防止請求擊穿到數據庫。這種方式實現成本低
適合命中不高但是可能頻繁更新的數據。
單獨過濾處理:對所有可能對應數據為空的對象單獨存放,並在請求前攔截,防止請求擊穿到數據庫。

這種方式實現復雜,適合命中不高,更新不頻繁的數據。

緩存的雪崩問題
技術分享圖片

限流、降級、熔斷、多級緩存

高並發之消息隊列思路

高並發之應用拆分思路

高並發之應用限流思路

高並發之服務降級與服務熔斷思路

高並發之數據庫切庫分庫分表思路

高並發之高可用手段

【並發編程】高並發相關技術