1. 什麼是架構面試
我想這個問題,十我的回答得有十一個答案,由於另外的那一個是你們妥協的結果。哈哈,我理解,架構就是骨架,以下圖所示:數據庫
人類的身體的支撐是主要由骨架來承擔的,而後是其上的肌肉、神經、皮膚。架構對於軟件的重要性不亞於骨架對人類身體的重要性。後端
2. 什麼是設計模式設計模式
這個問題我問過的面試者不下於數十次,回答五花八門,在我看來,模式就是經驗,設計模式就是設計經驗,有了這些經驗,咱們就能在特定狀況下使用特定的設計、組合設計,這樣能夠大大節省咱們的設計時間,提升工做效率。緩存
做爲一個工做10年以上的老碼農,經歷的系統架構設計也算很多,接下來,我會把工做中用到的一些架構方面的設計模式分享給你們,望你們少走彎路。整體而言,共有八種,分別是:服務器
單庫單應用模式:最簡單的,可能你們都見過網絡
內容分發模式:目前用的比較多架構
查詢分離模式:對於大併發的查詢、業務併發
微服務模式:適用於複雜的業務模式的拆解微服務
多級緩存模式:能夠把緩存玩的很好
分庫分表模式:解決單機數據庫瓶頸
彈性伸縮模式:解決波峯波谷業務流量不均勻的方法之一
多機房模式:解決高可用、高性能的一種方法
3. 單庫單應用模式
這是最簡單的一種設計模式,咱們的大部分本科畢業設計、一些小的應用,基本上都是這種模式,這種模式的通常設計見下圖:
如上圖所示,這種模式通常只有一個數據庫,一個業務應用層,一個後臺管理系統,全部的業務都是用過業務層完成的,全部的數據也都是存儲在一個數據庫中的,好一點會有數據庫的同步。雖然簡單,可是也並非一無可取。
優勢:結構簡單、開發速度快、實現簡單,可用於產品的初版等有原型驗證需求、用戶少的設計。
缺點:性能差、基本沒有高可用、擴展性差,不適用於大規模部署、應用等生產環境。
4. 內容分發模式
基本上全部的大型的網站都有或多或少的採用這一種設計模式,常見的應用場景是使用CDN技術把網頁、圖片、CSS、JS等這些靜態資源分發到離用戶最近的服務器。這種模式的通常設計見下圖:
如上圖所示,這種模式較單庫單應用模式多了一個CDN、一個雲存儲OSS(七牛、又拍等雷同)。一個典型的應用流程(以用戶上傳、查看圖片需求爲例)以下:
上傳的時候,用戶選擇本地機器上的一個圖片進行上傳
程序會把這個圖片上傳到雲存儲OSS上,並返回該圖片的一個URL
程序把這個URL字符串存儲在業務數據庫中,上傳完成。
查看的時候,程序從業務數據庫獲得該圖片的URL
程序經過DNS查詢這個URL的圖片服務器
智能DNS會解析這個URL,獲得與用戶最近的服務器(或集羣)的地址A
而後把服務器A上的圖片返回給程序
程序顯示該圖片,查看完成。
由上可知,這個模式的關鍵是智能DNS,它可以解析出離用戶最近的服務器。運行原理大體是:根據請求者的IP獲得請求地點B,而後經過計算或者配置獲得與B最近或通信時間最短的服務器C,而後把C的IP地址返回給請求者。這種模式的優缺點以下:
優勢:資源下載快、無需過多的開發與配置,同時也減輕了後端服務器對資源的存儲壓力,減小帶寬的使用。
缺點:目前來講OSS,CDN的價格仍是稍微有些貴(雖然已經降價好幾回了),只適用於中小規模的應用,另外因爲網絡傳輸的延遲、CDN的同步策略等,會有一些一致性、更新慢方面的問題。