天天看點

高可用架構設計(3) -電商商品詳情頁緩存背景及架構說明1 電商網站的商品詳情頁系統架構2 緩存服務3 架構結構

大背景:電商網站,首頁,商品詳情頁,搜尋結果頁,廣告頁,促銷活動,購物車,訂單系統,庫存系統,物流系統

小背景:商品詳情頁,如何用最快的結果将商品資料填充到一個頁面中,然後将頁面顯示出來

分布式系統:商品詳情頁,緩存服務,+底層源資料服務,商品資訊服務,店鋪資訊服務,廣告資訊服務,推薦資訊服務,綜合起來組成一個分布式的系統

1 電商網站的商品詳情頁系統架構

1.1 小型商品詳情頁系統

高可用架構設計(3) -電商商品詳情頁緩存背景及架構說明1 電商網站的商品詳情頁系統架構2 緩存服務3 架構結構

1.2 大型商品詳情頁系統

大型電商網站商品詳情頁的系統設計中,當商品資料發生變更時,會将變更消息壓入消息隊列中。

緩存服務從消息隊列中消費這條消息時,感覺到有資料發生變更,便通過調用資料服務接口,擷取變更後的資料,然後将整合好的資料推送至 redis 中。

Nginx 本地緩存的資料是有一定的時間期限的,比如說 10 分鐘,當資料過期之後,它就會從 redis 擷取到最新的緩存資料,并且緩存到自己本地。

使用者浏覽網頁時,動态将 Nginx 本地資料渲染到本地 html 模闆并傳回給使用者。

雖然沒有直接傳回 html 頁面那麼快,但是因為資料在本地緩存,是以也很快,其實耗費的也就是動态渲染一個 html 頁面的性能。如果 html 模闆發生了變更,不需要将所有的頁面重新靜态化,也不需要發送請求,沒有網絡請求的開銷,直接将資料渲染進最新的 html 頁面模闆後響應即可。

在這種架構下,我們需要保證系統的高可用性。

如果系統通路量很高,Nginx 本地緩存過期失效了,redis 中的緩存也被 LRU 算法給清理掉了,那麼會有較高的通路量,從緩存服務調用商品服務。但如果此時商品服務的接口發生故障,調用出現了延時,緩存服務全部的線程都被這個調用商品服務接口給耗盡了,每個線程去調用商品服務接口的時候,都會卡住很長時間,後面大量的請求過來都會卡在那兒,此時緩存服務沒有足夠的線程去調用其它一些服務的接口,進而導緻整個大量的商品詳情頁無法正常顯示。

這其實就是一個商品接口服務故障導緻緩存服務資源耗盡的現象。

高可用架構設計(3) -電商商品詳情頁緩存背景及架構說明1 電商網站的商品詳情頁系統架構2 緩存服務3 架構結構

1.3 頁面模闆

将資料動态填充/渲染到一個html模闆中,是什麼意思呢?

<html>
    <title>#{name}的頁面</title>
    <body>
        商品的價格是:#{price}
        商品的介紹:#{description}
    </body>
</html>
      

上面這個就可以認為是一個頁面模闆,裡面的很多内容是不确定的,#{name},#{price},#{description},這都是一些模闆腳本,不确定裡面的值是什麼?

将資料填充/渲染到html模闆中,是什麼意思呢?

{
    "name": "iphone7 plus(玫瑰金+32G)",
    "price": 5599.50
    "description": "這個手機特别好用。。。。。。"
}

<html>
    <title>iphone7 plus(玫瑰金+32G)的頁面</title>
    <body>
        商品的價格是:5599.50
        商品的介紹:這個手機特别好用。。。。。。
    </body>
</html>
      

上面這個就是一份填充好資料的一個html頁面

2 緩存服務

緩存服務,訂閱一個MQ的消息變更,如果有消息變更的話,那麼就會發送一個網絡請求,調用一個底層的對應的源資料服務的接口,去擷取變更後的資料

将擷取到的變更後的資料填充到分布式的redis緩存中去

高可用這一塊兒,最可能出現說可用性不高的情況,是什麼呢?

就是說,在接收到消息之後,可能在調用各種底層依賴服務的接口時,會遇到各種不穩定的情況

比如底層服務的接口調用逾時,200ms,2s都沒有傳回; 底層服務的接口調用失敗,比如說卡了500ms之後,傳回一個報錯

在分布式系統中,對于這種大量的底層依賴服務的調用,就可能會出現各種可用性的問題,一旦沒有處理好的話

可能就會導緻緩存服務自己本身會挂掉,或者故障掉,就會導緻什麼呢?

不可以對外提供服務,嚴重情況下,甚至會導緻說整個商品詳情頁顯示不出來

緩存服務接收到變更消息後,去調用各個底層依賴服務時的高可用架構的實作。

3 架構結構

圍繞着緩存服務去拉取各種底層的源資料服務的資料,調用其接口時,可能出現的系統不可用的問題

從簡

spring boot,微服務的非常快速,非常好用的技術架構,脫胎于spring,具體的東西就不講解,直接帶着大家上手搭建一個spring boot的架構

2個服務,緩存服務,商品服務,緩存服務依賴于商品服務

模拟各種商品服務可能接口調用時出現的各種問題,導緻系統不可用的場景,然後用hystrix完整的各種技術點全部貫穿在裡面

解決了一大堆設計業務背景下的系統不可用問題,hystrix整個技術體系,知識體系,也就講解完了

消息隊列,redis,咱們都不搞了

spring boot + http client + hystrix

參考

  • 《Java工程師面試突擊第1季-中華石杉老師》