高性能、高可用緩存架構

架構

此處架構圖,後續有時間補上

方案設計要點

一、流量分發

Nginx : 分發層 + 應用層 流量分發策略
OpenResty + nginx + lua

二、多級緩存 + nginx本地渲染

Nginx 本地緩存 + Redis 緩存 + Tomcat堆緩存

三、時效性數據

  1. 針對庫存此類時效性要求高的數據,採用 緩存+數據庫 雙寫方案,實時更新緩存數據

    緩存+數據庫雙寫 容易發生數據不一致問題,可採用內存隊列來保證數據一致

  2. 商品概覽數據時效性要求低,採用 商品服務+消息對列 異步更新緩存數據

    分佈式緩存重建併發衝突:流量分發hash策略、消息隊列kafa策略不一致,數據變更的消息所到的緩存服務實例,跟我們的應用層nginx分發到的那個緩存服務實例也許就不在一臺機器上,可採用zookeeper分佈式鎖解決

四、緩存預熱

  1. 新系統第一次上線,此時在緩存裏可能是沒有數據的,來了大量的請求,命中到數據庫
  2. 系統在線上穩定運行着,但是突然間重要的redis緩存全盤崩潰了

方案:

  • nginx+lua將訪問流量上報到kafka中
  • storm從kafka中消費數據,實時統計出每個商品的訪問次數,訪問次數基於LRU內存數據結構的存儲方案
  • 守護線程,每隔一段時間,比如1分鐘,都將排名前3的熱數據list,同步到zk中去
  • 緩存服務,基於zk分佈式鎖,讀取熱點數據,更新到緩存

五、瞬間熱點/秒殺

  1. 在storm中,實時的計算出瞬間出現的熱點
  2. storm這裏,會直接發送http請求到nginx上,nginx上用lua腳本去處理這個請求
  3. storm會將熱點本身對應的productId,發送到流量分發的nginx上面去,放在本地緩存中
  4. storm會將熱點對應的完整的緩存數據,發送到所有的應用nginx服務器上去,直接放在本地緩存中
  5. 流量分發nginx的分發策略降級
  6. storm還需要保存下來上次識別出來的熱點list,diff差異,進行熱點取消
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章