Java 高併發思路
此文記錄了自己學習Java 高併發思路的基礎知識,紀念自己面試前的準備。
擴容
垂直擴容(縱向擴容):提高系統部件能力
水平擴充套件(橫向擴容):增加更多系統成員
讀操作擴充套件
memcache、redis、CDN
寫操作擴充套件
Cassandra、Hbase等
快取
快取的特徵
- 命中率:命中數/(命中數+沒有命中數)
- 最大元素(空間)
- 清空策略:FIFO(先進先出)、LFU(最少使用)、LRU(最近使用時間)、過期時間
快取命中率的影響因素
- 業務場景、業務需求
- 快取的設計(粒度、策略)
- 快取的容量和基礎設施
快取的分類和應用場景
- 本地快取:程式設計實現(無法共享)Guava Cache
- 分散式快取:Memcache、Redis
Redis快取
快取一致性
快取併發
快取穿透
快取雪崩
訊息佇列
訊息佇列的特性
- 業務無關:只做訊息分發
- FIFO:先投遞先到達
- 容災:節點的動態增刪和訊息的持久化
- 效能:吞吐量提升,系統內部通訊效率提高
為什麼需要訊息佇列
- 生產個消費的速度或穩定性等因素不一致
訊息佇列的好處
- 業務解耦
- 最終一致性
- 廣播
- 錯峰與流控
訊息佇列 Kafka
應用拆分
應用拆分的原則
- 業務優先
- 循序漸進(拆分、測試)
- 兼顧技術(重構、分層)
- 可靠測試
應用拆分落地實現-微服務
應用限流
限流演算法
- 計數器法
- 滑動視窗
- 漏桶演算法 Leaky Bucket
- 令牌桶演算法 Token Bucket
服務降級、服務熔斷
服務降級
如果服務處理不了了,就返回一個預設值
- 自動降級:超時、故障
降級 VS 熔斷
- 共性:目的相同、最終表現一致
- 區別:觸發原因不同、實現方式不同
Hystrix
資料庫切庫、分庫、分表
資料庫瓶頸
- 單個庫資料量太大:多個庫
- 單個庫伺服器壓力大,讀寫瓶頸:多個庫
- 單個表資料量過大:分表
高可用技術手段
- 任務排程系統分散式:elastic-job + zookeeper
- 主備切換:apache curator + zookeeper(分散式鎖)
- 監控報警機制
相關文章
- 處理高併發的一般思路
- 高併發處理思路與手段(一):擴容
- (四)Java高併發秒殺API之高併發優化JavaAPI優化
- Java高併發之CyclicBarrier簡介Java
- Java高併發測試框架JCStressJava框架
- java高併發系列 - 第21天:java中的CAS操作,java併發的基石Java
- Java高併發系列——檢視閱讀Java
- java高併發之ConcurrentSkipListMap的那些事Java
- java高併發核心要點|系列1Java
- Java高併發之synchronized關鍵字Javasynchronized
- [分散式][高併發]高併發架構分散式架構
- 簡述高併發解決思路-如何處理海量資料(中)
- Java高併發實戰,鎖的優化Java優化
- Java使用程式碼模擬高併發操作Java
- Java億級流量高併發設計方案Java
- 【高併發】如何設計一個支撐高併發大流量的系統?這次我將設計思路分享給大家!
- 高併發,大資料量系統的資料結構優化思路大資料資料結構優化
- 高併發(鎖)
- OpenResty高併發REST
- Java ConcurrentHashMap 高併發安全實現原理解析JavaHashMap
- Java高併發與多執行緒(一)-----概念Java執行緒
- (二)Java高併發秒殺API之Service層JavaAPI
- 什麼是高併發,怎麼解決高併發
- Java併發---併發理論Java
- [Java併發]Java
- 走進高併發(二)Java並行程式基礎Java並行行程
- java高併發系列 - 第12天JUC:ReentrantLock重入鎖JavaReentrantLock
- 實戰Java高併發程式設計模式視訊Java程式設計設計模式
- Java高併發秒殺系統【觀後總結】Java
- 高併發技術
- 高併發和 keepalived
- Go 高階併發Go
- 高併發架構架構
- 併發數、併發以及高併發分別是什麼意思?
- Java併發指南14:Java併發容器ConcurrentSkipListMap與CopyOnWriteArrayListJava
- (三)Java高併發秒殺系統API之Web層開發JavaAPIWeb
- java高併發系列 - 第24天:ThreadLocal、InheritableThreadLocal(通俗易懂)Javathread
- Android 高階面試-3:Java、同步和併發相關Android面試Java