「大型網站的架構設計,涉及到的面非常多,並不像大家想像的那樣,就是一個網站這麼簡單,今天拋磚引玉,希望能給想從事網際網路行業的同學一點初步的概念。架構設計,其實就要清楚整個大型網站技術架構的演變歷程,知道每個階段的瓶頸在哪裡,以及對應的解決方案。很多公司都是小做到大,特別是創業公司,如果一步步發展起來,網站架構演變都會經歷這些步驟,請重點注意順序。
大型網站架構演變過程
架構演變第一步:物理分離webserver和資料庫
架構演變第二步:增加頁面緩存
架構演變第三步:增加頁面片段緩存
架構演變第四步:數據緩存
架構演變第五步: 增加webserver(集群)
架構演變第六步:分庫(首先考慮)
架構演變第七步:分表、DAL和分布式緩存
架構演變第八步:增加更多的webserver
架構演變第九步:數據讀寫分離和廉價存儲方案
架構演變第十步:進入大型分布式應用時代和廉價伺服器群夢想時代
由於篇幅的關係,今天不重點講如何一步步演變的歷程,我們倒序來查看,先看森林,再看樹木。
大型分布式應用架構
隨著網際網路技術迅速發展和演變,不斷改變的商業化應用系統越來越複雜,由單一的應用架構到垂直的應用架構,但還是面臨的擴容的問題。流量分散在各個系統中,雖然體積可控,但對開發人員和維護人員帶來極麻煩。此時,將核心的業務單獨提煉出來作為單獨的系統對外提供服務。達成業務之間復用,系統也將演變成分布式系統架構。
分布式架構是各組件分布在網絡計算機上、組件之間僅僅通過消息傳遞來通信並協調行動,與上面提到的SOA服務架構一脈相承。
大型網站最終都會走向大型分布式業務場景
分布式緩存
高並發環境下,大量的讀寫請求湧向資料庫,磁碟的處理速度與內存顯然不在一個量級,從減輕資料庫的壓力和提高系統響應速度兩個角度來考慮,一般都會在資料庫之前加一層緩存。由於單臺機器的內存資源以及承載能力有限,並且,如果大量使用本地緩存,也會使相同的數據被不同的節點存儲多份,對內存資源造成較大的浪費,因此,才催生出了分布式緩存。
分布式緩存系統
memcached ,redis,動態、靜態數據的緩存,這裡會涉及到:一致性hash算法、分布式session、數據複製多份、單臺緩存失效、集群間能夠自動複製和備份等知識點。
CDN
全稱:Content Delivery Network或Content Ddistribute Network,即內容分發網絡基本。通過在網絡各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智能虛擬網絡,CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。
現在大型網際網路公司都建立由屬於自己的CDN基站,也有第三方專注於CDN的基站等。
主要特點:
1、本地Cache加速,提高了企業站點(尤其含有大量圖片和靜態頁面站點)的訪問速度,並大大提高以上性質站點的穩定性
2、鏡像服務消除了不同運營商之間互聯的瓶頸造成的影響,實現了跨運營商的網絡加速,保證不同網絡中的用戶都能得到良好的訪問質量。
3、遠程加速 遠程訪問用戶根據DNS負載均衡技術 智能自動選擇Cache伺服器,選擇最快的Cache伺服器,加快遠程訪問的速度
4、帶寬優化 自動生成伺服器的遠程Mirror(鏡像)cache伺服器,遠程用戶訪問時從cache伺服器上讀取數據,減少遠程訪問的帶寬、分擔網絡流量、減輕原站點WEB伺服器負載等功能。
5、集群抗攻擊 廣泛分布的CDN節點加上節點之間的智能冗餘機制,可以有效地預防黑客入侵以及降低各種D.D.o.S攻擊對網站的影響,同時保證較好的服務質量 。
說了這麼多,你也可以理解為自動分發的緩存系統,把圖片等消耗資源優先從CDN進行訪問。
持久化儲存
具體說就是以IBM為代表的主機、以ORACLE為代表的關係型資料庫,以及以EMC為代表的高端存儲設備,被新型的雲計算技術所替換,也就是我們常說的「雲化」,也就是廉價存儲方案。
IBM的產品,在我國的金融行業中佔據著絕對的優勢,Oracle的資料庫,在電信、證券行業佔著相當大的份額,EMC的存儲,在銀行、電信、證券等壟斷行業,都佔據著較大的份額,要知道,EMC是全球最大的存儲公司。
由於網際網路技術發展日新月異,擴展速度十分迅速,這是傳統的電信、金融、證券、保險、電力等行業所不能比的。因此網際網路企業的後臺架構,需要具備很強的可擴展性。比如,假設一個網站,今年的活躍用戶數量只有10萬,明天就有可能上升到1000多萬,這就需要後臺架構具有很強的擴展性,可以根據用戶的數量進行靈活的擴展。
所以才有了阿里從2008年開始的轟轟烈烈的去IOE事件。
資料庫拆分
一般先分庫,如果分庫後查詢仍然慢,於是按照分庫的思想開始做分表的工作資料庫採用分布式資料庫(所有節點的數據加起來才算是整體數據),文件系統採用分布式文件系統任何強大的單一伺服器都滿足不了大型系統持續增長的業務需求,資料庫讀寫分離隨著業務的發展最終也將無法滿足需求,需要使用分布式資料庫及分布式文件系統來支撐。
分布式資料庫是系統資料庫拆分的最後方法,只有在單表數據規模非常龐大的時候才使用,更常用的資料庫拆分手段是業務分庫,將不同的業務資料庫部署在不同的物理伺服器上。
比如淘寶中期開始的資料庫端按照業務垂直拆分:按照業務交易資料庫、用戶資料庫、商品資料庫、店鋪資料庫等進行拆分。
還有就是水平擴展,分庫分表,再結合讀寫分離一起。當然,分庫分表需要涉及到對應的SQL路由規則主庫備庫等,淘寶設計了一套TDDL來解決這些問題,應用端只需配置對應的規則即可,對應用端的沒有任何侵入的設計。
消息系統
消息隊列中間件是分布式系統中重要的組件,主要解決應用耦合,異步消息,流量削鋒等問題。實現高性能,高可用,可伸縮和最終一致性架構。是大型分布式系統不可缺少的中間件。
目前使用較多的消息隊列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。
消息系統使用場景
典型的異步處理,應用解耦,流量削鋒和消息通訊四個場景。
除了以上還要設計運維(掌握分布式並行計算、報表、監控技術以及規則策略),安全、運營、服務、存儲、業務拆分、機房容災等等,要做好一個大型的網站真的很不容易。
優知學院(youzhixueyuan),專注網際網路人核心能力進階,如果你想職場進階,管理進階,架構進階,終極目標CTO進階,這一站您不容錯過!
作者:陳睿|mikechen,前攜程定製旅遊CTO,現優知學院(專注網際網路人核心能力進階)創始人,在網際網路擁有13年產品技術&運營經驗,曾先後就職於淘寶、百度、攜程。你一同分享13年產品技術&運營經驗以及心得!
本文由 @mikechen 原創發布於頭條號,未經許可,禁止轉載。