大型網站技術架構綜述

由于最近經常用簡書,于是開始把之前在其他平臺寫的文章搬到這里。并總結形成專輯,希望對大家有用。

1. 高可用架構的設計原則:網站高可用的主要手段是冗余,應用部署在多臺服務器上同時提供訪問,數據存儲在多臺服務器上互相備份,任何一臺服務器宕機都不會影響應用的整體可用,也不會導致數據丟失。

2.伸縮性強架構的設計標準:衡量架構伸縮性的主要標準是是否可以用多臺服務器構建集群,是否容易向集群中添加新的服務器。加入新的服務器后是否可以提供和原來的服務器無差別的服務。集群中可容納的總的服務器數量是否有限制。

3.擴展性強架構的設計標準:衡量網站架構擴展性好壞的主要標準是在網站增加新的業(yè)務產品時,是否可以實現(xiàn)對現(xiàn)有產品的透明無影響,不需要任何改動或者很少的改動既有業(yè)務功能就可以上線新產品。不同產品之間是否很少耦合,一個產品改動對其他產品無影響,其他產品和功能不需要受牽連進行改動。網站可擴展架構的主要手段是消息隊列和分布式服務。

4. 任何一個大型網站都是從小網站發(fā)展而來的,開始的架構都很簡單,甚至只有一臺服務器,當出現(xiàn)性能問題是不斷優(yōu)化,最終發(fā)展成具有成千上萬臺服務器的規(guī)模。性能優(yōu)化分為web前端性能優(yōu)化、應用服務器性能優(yōu)化、存儲服務器性能優(yōu)化。web前端優(yōu)化包括瀏覽器加載、網站視圖模型、圖片服務、CDN服務等。主要優(yōu)化手段有優(yōu)化瀏覽器訪問、使用反向代理、CDN等。應用服務器的主要優(yōu)化手段有緩存(如memcached)、異步(如消息隊列)、集群。


大型網站架構演化過程:一臺服務器承載應用程序和數據、文件 => 數據和應用分離 =>使用緩存(本地緩存和遠程緩存) => 應用服務器使用集群 => 數據庫讀寫分離 => 使用反向代理和CDN => 數據分庫 => 分布式數據庫和分布式文件系統(tǒng) => 使用Nosql數據庫和搜索引擎 => 業(yè)務拆分 => 分布式服務。

5. 應用服務器的高可用架構設計主要基于服務無狀態(tài)這一特性,這就需要單獨存儲用戶的session信息。常用的方式有利用瀏覽器的cookie記錄session以及使用session服務器集群。

6.保證數據高可用的主要手段是數據備份和失效轉移機制。對于緩存服務器集群,應當通過邏輯或者物理分區(qū)的方式將整個網站的每個應用的緩存部署在多臺服務器上,任何一臺服務器宕機都只影響應用緩存的一部分數據,不會對應用性能和數據庫負載造成太大影響。

7. CAP:系統(tǒng)的可用性、伸縮性和一致性。一般來說無法同時滿足這3者,一般都會選擇可用性和伸縮性,放棄強一致性。

8. 網站的伸縮性設計分為2類,一類是根據功能進行物理分離實現(xiàn)伸縮,一類是單一功能通過集群實現(xiàn)伸縮。前者是不同的服務器部署不同的服務,提供不同的功能,后者是集群內的多臺服務器部署相同的服務,提供相同的功能。其中單一功能的伸縮又可分為應用服務器集群伸縮性和數據服務器集群伸縮性。

9. 對于應用服務器集群伸縮性,需要把應用服務器設計成無狀態(tài)的,即應用服務器不存儲請求上下文信息,這樣用戶請求可以發(fā)送到集群中任意一臺服務器處理,任意一臺服務器處理結果都是相同的。應用服務器集群伸縮性通常有DNS域名解析負載均衡、反向代理負載均衡、IP負載均衡、鏈路層負載均衡。

10. 事實上大型網站總是部分使用DNS域名解析作為第一級負載均衡手段,即域名解析得到的一組服務器并不是實際提供web服務的物理服務器,而是同樣提供負載均衡服務的內部服務器,這組內部服務器再進行負載均衡,將請求發(fā)送到真實的web服務器上。

11. 使用三角傳輸模式的鏈路層負載均衡是目前大型網站使用最多的負載均衡手段。例如Linux上的LVS。

12. 常用的負載均衡算法有輪詢、加權輪詢、隨機、最少連接、源地址散列。

13. Memcached的伸縮性算法有余數Hash算法、一致性Hash環(huán)、帶虛擬節(jié)點的一致性Hash環(huán)。余數Hash算法在增加一臺服務器的情況下緩存命中失敗的概率為N/(N+1)。一致性Hash算法具有較高的緩存命中率,增加一臺服務器緩存命中失敗的概率約為1/(N+1),但存在負載壓力不均衡的問題,為了解決這個不均衡問題誕生了帶虛擬節(jié)點的一致性Hash環(huán)。

14. 關系數據庫的伸縮性設計中,主服務器將數據同步到從服務器,寫操作主要在主服務器進行,讀操作、數據分析操作主要在從服務器進行??梢越柚鶦obar進行數據庫服務器的伸縮設計。

15. Nosql數據庫的伸縮性設計,以HBase為例,主要借助于Hbase自身的HMaster、HRegionServer、HRegion等概念。通過Key查詢HRegionServer地址以及HRegion,并最終獲得數據。

16. 在大型網站中,各種模塊通過分布式部署的方式,獨立的模塊部署在獨立的服務器集群上,從物理上分離模塊之間的耦合關系,進一步降低耦合性提高復用性。模塊分布式部署以后具體的聚合方式有分布式消息隊列和分布式服務。

17. 目前國內應用比較多的分布式服務框架是阿里巴巴的Dubbo。

18. 傳統(tǒng)的關系數據庫在創(chuàng)建表的時候需要指定字段名和類型,這種僵硬的數據結構難以面對需求變更帶來的挑戰(zhàn)。Nosql數據庫在創(chuàng)建表的時候只需要指定ColumnFamily,可以在插入數據的時候再指定具體的字段名,通過這種方式數據表可以擁有數百萬的字段,使得應用程序的數據結構可以隨意擴展,很好的解決了數據結構的擴展性問題。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容