八種架構設計模式及其優缺點概述(上)

1. 什麼是架構面試

        我想這個問題,十我的回答得有十一個答案,由於另外的那一個是你們妥協的結果。哈哈,我理解,架構就是骨架,以下圖所示:數據庫

 

        人類的身體的支撐是主要由骨架來承擔的,而後是其上的肌肉、神經、皮膚。架構對於軟件的重要性不亞於骨架對人類身體的重要性。後端

 

2. 什麼是設計模式設計模式

        這個問題我問過的面試者不下於數十次,回答五花八門,在我看來,模式就是經驗,設計模式就是設計經驗,有了這些經驗,咱們就能在特定狀況下使用特定的設計、組合設計,這樣能夠大大節省咱們的設計時間,提升工做效率。緩存

        做爲一個工做10年以上的老碼農,經歷的系統架構設計也算很多,接下來,我會把工做中用到的一些架構方面的設計模式分享給你們,望你們少走彎路。整體而言,共有八種,分別是:服務器

 

  1. 單庫單應用模式:最簡單的,可能你們都見過網絡

  2. 內容分發模式:目前用的比較多架構

  3. 查詢分離模式:對於大併發的查詢、業務併發

  4. 微服務模式:適用於複雜的業務模式的拆解微服務

  5. 多級緩存模式:能夠把緩存玩的很好

  6. 分庫分表模式:解決單機數據庫瓶頸

  7. 彈性伸縮模式:解決波峯波谷業務流量不均勻的方法之一

  8. 多機房模式:解決高可用、高性能的一種方法

 

3. 單庫單應用模式
        這是最簡單的一種設計模式,咱們的大部分本科畢業設計、一些小的應用,基本上都是這種模式,這種模式的通常設計見下圖:

        如上圖所示,這種模式通常只有一個數據庫,一個業務應用層,一個後臺管理系統,全部的業務都是用過業務層完成的,全部的數據也都是存儲在一個數據庫中的,好一點會有數據庫的同步。雖然簡單,可是也並非一無可取

        優勢:結構簡單、開發速度快、實現簡單,可用於產品的初版等有原型驗證需求、用戶少的設計。

        缺點:性能差、基本沒有高可用、擴展性差,不適用於大規模部署、應用等生產環境。

                
4. 內容分發模式
        基本上全部的大型的網站都有或多或少的採用這一種設計模式,常見的應用場景是使用CDN技術把網頁、圖片、CSS、JS等這些靜態資源分發到離用戶最近的服務器。這種模式的通常設計見下圖:

        

        如上圖所示,這種模式較單庫單應用模式多了一個CDN、一個雲存儲OSS(七牛、又拍等雷同)。一個典型的應用流程(以用戶上傳、查看圖片需求爲例)以下:

 

  1. 上傳的時候,用戶選擇本地機器上的一個圖片進行上傳

  2. 程序會把這個圖片上傳到雲存儲OSS上,並返回該圖片的一個URL

  3. 程序把這個URL字符串存儲在業務數據庫中,上傳完成。

  4. 查看的時候,程序從業務數據庫獲得該圖片的URL

  5. 程序經過DNS查詢這個URL的圖片服務器

  6. 智能DNS會解析這個URL,獲得與用戶最近的服務器(或集羣)的地址A

  7. 而後把服務器A上的圖片返回給程序

  8. 程序顯示該圖片,查看完成。

     

        由上可知,這個模式的關鍵是智能DNS,它可以解析出離用戶最近的服務器。運行原理大體是:根據請求者的IP獲得請求地點B,而後經過計算或者配置獲得與B最近或通信時間最短的服務器C,而後把C的IP地址返回給請求者。這種模式的優缺點以下:

        優勢:資源下載快、無需過多的開發與配置,同時也減輕了後端服務器對資源的存儲壓力,減小帶寬的使用。

        缺點:目前來講OSS,CDN的價格仍是稍微有些貴(雖然已經降價好幾回了),只適用於中小規模的應用,另外因爲網絡傳輸的延遲、CDN的同步策略等,會有一些一致性、更新慢方面的問題。

相關文章
相關標籤/搜索