1. 程式人生 > >讀大型網站技術架構---第一篇---第二章---架構模式

讀大型網站技術架構---第一篇---第二章---架構模式

關於大型網站架構模式,我覺得只要看看阿里的就足夠了,它成功了,所以它的架構模式就是指路明燈以及行業的正確架構模式,所以關於架構其實現在即使你沒有參與進去,但是模式就是那樣。

1.分層

分層是一種常見的架構模式,主要是將系統在橫向維度上切分成幾個部分,每個部分負責相對比較單一的職責,然後通過上層對下層的依賴和呼叫組成一個完整的系統。

分層好處:

可以將一個龐大系統切分成不同部分;各層之間具有一定獨立性,各層可以根據具體問題獨立演化而只需要保持呼叫介面不變即可。

分層挑戰:

合理規劃層次邊界和介面。遵守分層架構約束,禁止跨層呼叫及逆向呼叫。

2.分割

縱向方面對系統進行切分就是分割。

具體分割:

在應用層,將不同業務進行分割,可以將購物,論壇,搜尋,廣告分割成不同應用;比如購物業務,可以進一步分割成機票酒店業務,3C業務,小商品業務等更細粒度。基於這些粒度還可以繼續分割成首頁,搜尋列表,商品詳情等模組。

3.分散式

分層和分割的主要目的就是便於分散式部署,即將不同模組部署在不同的伺服器上,通過遠端呼叫協同工作。

分散式帶來的問題:

3.1 服務呼叫通過網路,可能對效能造成影響;

3.2 伺服器越多,伺服器宕機概率越大,可能一臺宕機造成服務不可用會導致很多應用不可訪問,降低網站的可用性;

3.3 分散式環境中的資料一致性問題;

3.4 分散式環境中的事務問題

常見分散式方案:

3.1 分散式應用和服務;

3.2 分散式靜態資源;網站的靜態資源可以獨立部署,採用獨立域名,就是常見的動靜分離。

3.3 分散式資料和儲存;

3.4 分散式計算;Hadoop相關產品;

3.5 分散式鎖,分散式事務,分散式檔案系統等等;

4.叢集

分散式解決了分層和分割後的模組的獨立部署,但是針對使用者訪問頻率高的模組,還是需要將伺服器叢集化,通過負載均衡裝置共同對外提供服務,提高系統的可用性。

5.快取

快取就是改善軟體效能的第一手段,主要可以使用以下幾個手段:

5.1 CDN

5.2 反向代理

5.3 本地快取

5.4 分散式快取

6.非同步

大型系統之間解耦的手段除了之前說的分層,分割,分散式之外,還有一個手段就是非同步;將一個業務操作分成多個將階段,每個階段之間通過共享資料的方式非同步執行進行協作。

單機系統:

單機系統內考慮非同步可以使用多執行緒共享記憶體佇列的方式。

分散式系統:

分散式系統可以使用分散式訊息佇列實現非同步。

非同步特性:

6.1 提高系統可用性;資料會儲存在訊息佇列中,系統整體不會產生故障,消費者伺服器恢復正常後可以繼續消費資料,可能帶來的問題就是訊息堆積怎麼辦。

6.2 加快網站響應速度;

6.3 消除併發訪問高峰;

7.冗餘

資料冗餘包括兩種方式:

冷備份:資料庫定期備份,存檔儲存;

熱備份:資料庫進行主從分離,實時同步;

8.自動化

8.1 釋出過程自動化;

8.2 程式碼管理自動化;

8.3 自動化測試;

8.4 自動化安全檢測;

8.5 自動化部署;

8.6 自動化監控;

8.7 自動化報警;

8.8 自動化失效轉移;(將失效的伺服器從叢集中隔離出去)

8.9 自動化失效恢復;(重新啟動服務,同步資料保證資料的一致性)

8.10 自動化降級;(在高峰期時拒絕一些請求及關閉不重要的服務將系統負載降至一個安全水平)

8.11 自動化分配資源;(將空閒資源分配給重要的服務,擴大其部署規模)

9.安全

9.1 密碼和手機進行身份驗證,登入,交易等等;

9.2 資源加密;

9.3 XSS,SQL注入;

9.4 過略敏感資訊,垃圾資訊;

10.架構模式在新浪的應用

新浪微博的架構如下: