1. 程式人生 > >【網站架構學習】大型網站核心架構要素

【網站架構學習】大型網站核心架構要素

大型網站核心架構要素


      關於什麼是架構,一種比較通俗的說法是“最高層次的規劃,難以改變的決定”,這些規劃和決定奠定了事物未來發展的方向和最終的藍圖。

      從這個意義上說,人生規劃也是一種架構。選什麼學校、學什麼專業、進什麼公司、找什麼物件,過什麼樣的生活,都是自己人生的架構。

      具體到軟體架構,維基百科是這樣定義的:“有關軟體整體結構與元件的抽象描述,用於指導大型軟體系統各個方面的設計

”。系統的各個重要組成部分及其關係構成了系統的架構,這些組成部分可以是具體的功能模組,也可以是非功能的設計與決策,他們相互關係組成一個整體,共同構成了軟體系統的架構。

      一般說來,除了當前的系統功能需求外,軟體架構還需要關注效能、可用性、伸縮性、擴充套件性和安全性這5個架構要素,架構設計過程中需要平衡這5個要素之間的關係 以實現需求和架構目標,也可以通過考察這些架構要素來衡量一個軟體架構設計的優劣, 判斷其是否滿足期望。

1.1、效能


      效能是網站的一個重要指標,除非是沒得選擇(比如只能到www.12306.cn

這一個網 站上買火車票),否則使用者無法忍受一個響應緩慢的網站。一個開啟緩慢的網站會導致嚴 重的使用者流失,很多時候網站效能問題是網站架構升級優化的觸發器。可以說效能是網站架構設計的一個重要方面,任何軟體架構設計方案都必須考慮可能會帶來的效能問題。

      也正是因為效能問題幾乎無處不在,所以優化網站效能的手段也非常多,從使用者瀏覽器到資料庫,影響使用者請求的所有環節都可以進行效能優化。

      在瀏覽器端,可以通過瀏覽器快取、使用頁面壓縮、合理佈局頁面、減少Cookie傳輸

等手段改善效能。

      還可以使用CDN,將網站靜態內容分發至離使用者最近的網路服務商機房,使使用者通 過最短訪問路徑獲取資料。可以在網站機房部署反向代理伺服器,快取熱點檔案,加快 請求響應速度,減輕應用伺服器負載壓力。

      在應用伺服器端,可以使用伺服器本地快取和分散式快取,通過快取在記憶體中的熱點資料處理使用者請求,加快請求處理過程,減輕資料庫負載壓力。

      也可以通過非同步操作將使用者請求傳送至訊息佇列等待後續任務處理,而當前請求直接返回響應給使用者。

      在網站有很多使用者高併發請求的情況下,可以將多臺應用伺服器組成一個叢集共同對外服務,提高整體處理能力,改善效能。

      在程式碼層面,也可以通過使用多執行緒、改善記憶體管理等手段優化效能。

      在資料庫伺服器端,索引、快取、SQL優化等效能優化手段都已經比較成熟。而方興未艾的NoSQL資料庫通過優化資料模型、儲存結構、伸縮特性等手段在效能方面的優勢也日趨明顯。

      衡量網站效能有一系列指標,重要的有響應時間、TPS、系統性能計數器等,通過測試這些指標以確定系統設計是否達到目標。這些指標也是網站監控的重要引數,通過監 控這些指標可以分析系統瓶頸,預測網站容量,並對異常指標進行報警,保障系統可用

      對於網站而言,效能符合預期僅僅是必要條件,因為無法預知網站可能會面臨的訪問壓力,所以必須要考察系統在高併發訪問情況下,超出負載設計能力的情況下可能會出現的效能問題。網站需要長時間持續執行,還必須保證系統在持續執行且訪問壓力不均勻的情況下保持穩定的效能特性。

1.2、可用性


      對於大型網站而言,特別是知名網站,網站宕掉、服務不可用是一個重大的事故, 輕則影響網站聲譽,重則可能會攤上官司。對於電子商務類網站,網站不可用還意味著 損失金錢和使用者。因此幾乎所有網站都承諾7x24可用,但事實上任何網站都不可能達到 完全的7x24可用,總會有一些故障時間,扣除這些故障時間,就是網站的總可用時間, 這個時間可以換算成網站的可用性指標,以此衡量網站的可用性,一些知名大型網站可 以做到4個9以上的可用性,也京尤是可用性超過99.99%。

      因為網站使用的伺服器硬體通常是普通的商用伺服器,這些伺服器的設計目標本身並不保證高可用,也就是說,很有可能會出現伺服器硬體故障,也就是俗稱的伺服器宕機。大型網站通常都會有上萬臺伺服器,每天都必定會有一些伺服器宕機,因此網站高 可用架構設計的前提是必然會出現伺服器宕機,而高可用設計的目標就是當伺服器宕機的時候,服務或者應用依然可用。

      網站高可用的主要手段是冗餘,應用部署在多臺伺服器上同時提供訪問,資料儲存 在多臺伺服器上互相備份,任何一臺伺服器宕機都不會影響應用的整體可用,也不會導致資料丟失。

      對於應用伺服器而言,多臺應用伺服器通過負載均衡裝置組成一個叢集共同對外提供服務,任何一臺伺服器宕機,只需把請求切換到其他伺服器就可實現應用的高可用, 但是一個前提條件是應用伺服器上不能儲存請求的會話資訊。否則伺服器宕機,會話丟 失,即使將使用者請求轉發到其他伺服器上也無法完成業務處理。

      對於儲存伺服器,由於其上儲存著資料,需要對資料進行實時備份,當伺服器宕機 時需要將資料訪問轉移到可用的伺服器上,並進行資料恢復以保證繼續有伺服器宕機的時候資料依然可用。

      除了執行環境,網站的高可用還需要軟體開發過程的質量保證。通過預釋出驗證、 自動化測試、自動化釋出、灰度釋出等手段,減少將故障引入線上環境的可能,避免故 障範圍擴大。

      衡量一個系統架構設計是否滿足高可用的目標,就是假設系統中任何一臺或者多臺 伺服器宕機時,以及出現各種不可預期的問題時,系統整體是否依然可用。

1.3、伸縮性


      大型網站需要面對大量使用者的高併發訪問和儲存海量資料,不可能只用一臺伺服器 就處理全部使用者請求,儲存全部資料。網站通過叢集的方式將多臺伺服器組成一個整體 共同提供服務。所謂伸縮性是指通過不斷向叢集中加入伺服器的手段來緩解不斷上升的使用者併發訪問壓力和不斷增長的資料儲存需求。

      衡量架構伸縮性的主要標準就是是否可以用多臺伺服器構建叢集,是否容易向叢集 中新增新的伺服器。加入新的伺服器後是否可以提供和原來的伺服器無差別的服務。叢集中可容納的總的伺服器數量是否有限制。

      對於應用伺服器叢集,只要伺服器上不儲存資料,所有伺服器都是對等的,通過使用合適的負載均衡裝置就可以向叢集中不斷加入伺服器。

      對於快取伺服器叢集,加入新的伺服器可能會導致快取路由失效,進而導致叢集中 大部分快取資料都無法訪問。雖然快取的資料可以通過資料庫重新載入,但是如果應用已經嚴重依賴快取,可能會導致整個網站崩潰。需要改進快取路由演算法保證快取資料的可訪問性。

      關係資料庫雖然支援資料複製,主從熱備等機制,但是很難做到大規模叢集的可伸縮性,因此關係資料庫的叢集伸縮性方案必須在資料庫之外實現,通過路由分割槽等手段 將部署有多個數據庫的伺服器組成一個叢集。

      至於大部分NoSQL資料庫產品,由於其先天就是為海量資料而生,因此其對伸縮性 的支援通常都非常好,可以做到在較少運維參與的情況下實現叢集規模的線性伸縮。

1.4、擴充套件性


      不同於其他架構要素主要關注非功能性需求,網站的擴充套件性架構直接關注網站的功能需求。網站快速發展,功能不斷擴充套件,如何設計網站的架構使其能夠快速響應需求變化,是網站可擴充套件架構主要的目的。

      衡量網站架構擴充套件性好壞的主要標準就是在網站增加新的業務產品時,是否可以實現對現有產品透明無影響,不需要任何改動或者很少改動既有業務功能就可以上線新產品。不同產品之間是否很少耦合,一個產品改動對其他產品無影響,其他產品和功能不 需要受牽連進行改動。

      網站可伸縮架構的主要手段是事件驅動架構和分散式服務。

      事件驅動架構在網站通常利用訊息佇列實現,將使用者請求和其他業務事件構造成訊息釋出到訊息佇列,訊息的處理者作為消費者從訊息佇列中獲取訊息進行處理。通過這 種方式將訊息產生和訊息處理分離開來,可以透明地增加新的訊息生產者任務或者新的訊息消費者任務。

      分散式服務則是將業務和可複用服務分離開來,通過分散式服務框架呼叫。新增產品可以通過呼叫可複用的服務實現自身的業務邏輯,而對現有產品沒有任何影響。可複用服務升級變更的時候,也可以通過提供多版本服務對應用實現透明升級,不需要強制應用同步變更。

      大型網站為了保持市場地位,還會吸引第三方開發者,呼叫網站服務,使用網站資料開發周邊產品,擴充套件網站業務。第三方開發者使用網站服務的主要途徑是大型網站提供的開放平臺介面。

1.5、安全性


      網際網路是開放的,任何人在任何地方都可以訪問網站。網站的安全架構就是保護網站不受惡意訪問和攻擊,保護網站的重要資料不被竊取。

      衡量網站安全架構的標準就是針對現存和潛在的各種攻擊與竊密手段,是否有可靠的應對策略。

小結:


      效能、可用性、伸縮性、擴充套件性和安全性是網站架構最核心的幾個要素,這幾個問 題解決了,大型網站架構設計的大部分挑戰。

宣告:以上內容來自:《大型網站技術架構:核心原理與案例分析書籍》