秒殺系統架構

這是我參與更文挑戰的第30天,活動詳情查看:更文挑戰前端

架構設計方法

架構設計都有哪些方法呢?架構設計遵循特定的方法,好比 TOGAF(The Open Group Architecture Framework,開放組體系結構框架)、五視圖方法等。其中 TOGAF 主要針對複雜的企業系統架構,比較重,不大適合迭代速度很是快的互聯網產品,因此互聯網公司經常使用的主要是五視圖方法。後端

什麼叫五視圖方法?它是指從業務邏輯、開發環境、運行狀態、物理部署、數據關係等方面繪製出相應的邏輯視圖、開發視圖、運行視圖、物理視圖、數據視圖來設計架構。 其中,邏輯視圖、開發視圖、運行視圖屬於軟件架構的內容,物理視圖、數據視圖屬於系統架構的內容。緩存

  • 邏輯視圖:對應邏輯架構,主要關注功能需求,以及系統職責和行爲的劃分。邏輯視圖不只包括用戶可見的功能,還包括相應的輔助功能。好比秒殺系統中的活動場次切換、商品列表、用戶登陸、活動管理、後臺權限等功能,其中後臺權限屬於輔助功能。服務器

  • 開發視圖:對應開發架構,主要關注系統開發過程當中的質量屬性。它包括軟件源碼的組織方式、配置方式、編譯打包方式以及與第三方包的依賴關係等。markdown

好比,咱們這裏介紹的秒殺系統,採用的是 Go 語言開發代碼,使用的是 TOML 格式存放配置,還有 Gitlab 執行編譯打包等。網絡

  • 運行視圖:對應運行架構,主要關注軟件運行過程當中的質量屬性,它包括進程、線程、協程、對象之間的併發、同步、通訊的問題等。

好比,秒殺系統在運行時有用於從隊列消費數據的協程,有用於過濾請求並將有效請求寫入隊列的協程,這就須要好的設計來解決它們之間併發、同步、通訊的問題。架構

以上是五視圖法中軟件架構方面的內容,接下來我們看另外的兩個,屬於系統架構方面的內容。併發

  • 物理視圖:對應物理架構,主要關注安裝和部署需求。它包括軟件運行時的系統、網絡、服務器等基礎設施和相關配置,以及如何利用基礎設施來實現應用程序的高可用、可伸縮等。

好比秒殺系統使用雲廠商的 SLB(Server Load Balancer,負載均衡器)來提供負載均衡能力,使用雲廠商的多可用區來實現高可用。負載均衡

  • 數據視圖:對應數據架構,主要關注數據需求,它包括數據的格式、屬性、關係等。

好比,秒殺系統中活動場次與活動主題、活動商品的關係和屬性,管理員能夠經過管理後臺建立、修改和刪除活動主題、場次、商品等。框架

爲何軟件架構設計須要這些視圖呢?它們是爲了解決什麼問題呢?

俗話說「一圖抵千字」,架構設計中的五視圖就比如建築工程中大樓的各部分施工圖,可讓咱們更容易理解各自須要完成的工做。

好比,研發人員一看邏輯視圖、開發視圖、運行視圖、數據視圖,就知道要開發哪些功能、如何實現、如何部署;運維人員一看物理視圖,就知道基礎設施須要怎麼部署;測試人員一看數據視圖,就明白如何經過一系列的操做來驗證數據的準確性。

秒殺系統架構設計

前面咱們介紹了架構設計的方法,以及爲什麼要作架構設計。那麼秒殺的系統架構該如何設計呢?

接下來我就用剛纔提到的五視圖方法來介紹下。

邏輯架構

從前面的定義咱們瞭解到,邏輯架構關注的是功能需求。還記得我在模塊一里面提到的小米網秒殺系統的那些功能需求嗎?當時介紹了秒殺系統的前端、後端及管理後臺的需求分析,好比活動信息管理、活動詳情、商品詳情等,這些需求分析結果就是爲了設計邏輯架構。

系統前端、後端和管理後臺的需求有那麼多,咱們該怎樣組織那些需求信息呢?在邏輯架構中有一個「三層架構」法能夠幫咱們解決這個問題。哪三層呢?它們是表現層、業務邏輯層、數據層。

表現層

所謂表現層,簡單來講是指用戶能夠經過哪些方式使用系統功能。經過需求分析咱們瞭解到小米網秒殺系統的主要使用者有:消費者、管理員。其中消費者能夠經過電腦 Web 端、手機 Web 端、手機 App 端獲取秒殺的活動信息、商品信息;管理員能夠從電腦 Web 端訪問管理後臺管理秒殺活動。

這裏的電腦 Web 端、手機 Web 端、手機 App 端主要用來向用戶呈現秒殺的活動信息、商品信息,並提供相關操做的入口,好比購買和後臺維護,它們屬於表現層。

邏輯層

邏輯層主要是和業務邏輯相關,好比秒殺系統的前端功能主要包括有用戶登陸、查看活動、訂閱通知、查看商品、搶購、下單等;管理後臺的功能主要包括有專題管理、場次管理、商品管理、庫存管理、價格管理、限購管理等。這些都跟秒殺業務邏輯相關,因此咱們能夠把相關需求歸於邏輯層。

數據層

數據層是指系統的業務邏輯須要處理哪些數據。好比,秒殺系統的數據包括配置數據和用戶數據,其中配置數據主要是活動信息和商品信息,用戶數據主要是用戶訂單和用戶信息,他們就能夠歸於數據層。

物理架構

  • 第一,爲了實現動靜分離,咱們須要部署 CDN 節點,將秒殺系統靜態頁面和靜態數據利用 CDN 緩存起來,以便利用 CDN 的就近訪問能力提供更高的性能。好比咱們能夠在中國和新加坡都部署 CDN 節點,以便爲中國用戶和海外用戶提供更好的訪問速度。

  • 第二,動靜分離意味着除了 CDN 外,咱們還須要部署秒殺後端節點。爲了實現秒殺後端節點的高可用,咱們須要使用雲架構保障其基礎設施層的高可用。並且須要部署到雲的多個可用區,防止單一可用區發生故障影響服務。好比,使用兩個可用區,每一個可用區使用兩臺機器。每臺機器訪問存儲的時候,採用主備方式,優先訪問當前可用區內的存儲,若是當前可用區內存儲有故障,自動切到其餘可用區的備用存儲。不一樣可用區之間的存儲,採用高速專線同步。

  • 第三,爲了將不一樣可用區做爲一個總體對外提供服務,咱們須要部署路由器、防火牆、交換機、SLB(Server Load Balancer,負載均衡器)。其中,路由器是負責接收外網請求並轉發到內網;防火牆負責過濾掉有風險的數據,好比過濾掉黑客發起的網絡攻擊;交換機負責將請求轉發到具體的可用區內;SLB 是負載均衡器,它能夠將可用區內多個節點做爲一個總體對外提供訪問,並將請求均衡地轉發到後端各節點。SLB 之間採用主備的方式部署,若是可用區 1 的 SLB 掛了,可用區 2 的 SLB 會自動接管屬於可用區1 的流量,並將流量轉發給可用區 1 內的雲主機。

  • 第四,部署完各節點後,還須要設置域名解析,將域名解析到咱們部署的 SLB 外網 IP 上。一般,對於流量大的系統,會採用多個負載均衡器,而後使用動態 DNS 解析的方案作多個 SLB 的 DNS 負載均衡,以防單個 SLB 沒法扛住大流量。

數據架構

數據架構一般用 E-R 圖(Entity Relationship Diagram,實體-聯繫圖)表示,咱們一般用它來表示數據對象與屬性、用戶之間的關係。

在需求分析過程當中,咱們瞭解到秒殺系統主要有兩大主要數據:活動信息和商品信息。除了這兩大主要數據外,還有兩大次要數據:訂單和黑名單。其中訂單是用戶搶購商品並下單生成的,而黑名單是爲了反黃牛而設計的,一般經過大數據分析統計生成,若是用戶 ID 在黑名單中,則不容許搶購商品。

那這幾大數據都包含哪些屬性呢?

結合需求分析過程,咱們得知:

  • 活動信息,包括專題、場次、描述、時間、限購策略、商品列表、狀態等信息;

  • 商品信息,包括商品 ID、名稱、描述、規格、原價、活動價、活動庫存等信息;

  • 訂單信息,包括訂單 ID、用戶 ID、商品 ID、商品價格、商品數量、總價、收貨地址、建立時間等信息;

  • 黑名單,包括用戶 ID 列表。

這些數據中,活動信息、商品信息、黑名單都是由管理員在管理後臺管理的,只有訂單信息是由用戶在商城下單建立的,管理員能夠經過管理後臺查看訂單信息。

相關文章
相關標籤/搜索