天天看點

高并發高可用複雜系統中的緩存架構(二) 大型網站架構小型電商網站的商品詳情頁的頁面靜态化架構以及其缺陷大型電商網站的異步多級緩存建構 + nginx 資料本地化動态渲染的架構

小型電商網站的商品詳情頁的頁面靜态化架構以及其缺陷

背景是商品詳情頁的系統架構,以此基礎講解 -> 緩存架構 -> 高并發 -> 高可用

電商網站裡,大概可以說分成兩種,

  • 小型電商,簡單的一種架構方案,頁面靜态化的方案;
  • 大型電商,複雜的一套架構

為了講解大型電商的詳情頁架構,這裡先把小型的講解下

部分頁面靜态化或全量的頁面靜态化

先來看看頁面靜态化帶來的問題,假設有一個商品詳情頁的模闆如下

<html>
    <title></title>
    <body>
        商品名稱:#{productName}
        商品價格:#{productPrice}
        商品描述:#{productDesc}
    </body>
</html>      

裡面的占位文法需要資料來填充,比如儲存在 mysql 中的,此時資料變化了或者模闆變化了,都需要重新渲染成 html 頁面,放在 nginx 上,供使用者通路。如果隻是某一個商品資料變化了隻影響了一個頁面那還好說,直接重新渲染這一個即可,但是有商品推薦的,可能其他商品詳情頁面裡面也會出現。這個時候就比較難判定了,可能隻會全量渲染了

那麼問題來了,對于小網站,頁面很少,很實用,非常簡單,使用的模闆引擎有 velocity、freemarker 等,頁面資料管理的 cms 系統,内容管理系統等做一個一鍵全量渲染功能即可

對于大型網站來說,比如淘寶,他們的商品資料太多了,根本就沒有這麼多的時間去重新渲染,上億的商品等,可能需要好幾天

大型電商網站的異步多級緩存建構 + nginx 資料本地化動态渲染的架構

高并發高可用複雜系統中的緩存架構(二) 大型網站架構小型電商網站的商品詳情頁的頁面靜态化架構以及其缺陷大型電商網站的異步多級緩存建構 + nginx 資料本地化動态渲染的架構

大型電商網站的詳情頁架構一般是這樣的核心思路,如上圖

兩個關鍵點:

  1. 緩存資料生産服務
  2. nginx 上的 html 模闆 + 本地緩存資料

來捋一捋流程:

  1. 使用者通路 nginx

    會先從 nginx 的本地緩存擷取資料渲染後傳回,這個速度很快,因為全是記憶體操作。 本地緩存資料是有時間的,比如 10 分鐘

  2. 假如 nginx 本地緩存失效

    會從 redis 中擷取資料回來并緩存上

  3. 假如 redis 中的資料失效

    會從緩存資料生産服務中擷取資料并緩存上

  4. 緩存資料生産服務

    本地也有一個緩存,比如用的是 ehcache 他們通過隊列監聽商品修改等事件,讓自己的緩存資料及時更新

  5. 其他服務

    商品、店鋪等服務能擷取到商品的修改事件等,及時往 mq 中發出商品的修改事件, 并提供商品原始資料的查詢。這裡可能是直接從 mysql 庫中查詢的

這樣一來,在緩存上其實就擋掉了很多資料,一層一層的擋并發