瑞安市優博科技有限公司

         設為首頁 | 加入收藏

         

        全國統一服務熱線:400 666 1789

        WEBSITE KNOWLEDGE      網站知識  
         
        這幾個問題解決了,怎么設計大型網站架構不再是困難
        來源:本站  編輯:admin  時間:2020/12/29  點擊數:12827  
        在大型網站技術架構設計時如何避免走彎路,避開在具體業務應用中的那些坑?對于正處于互聯網轉型初期的技術團隊來說是必須考慮的問題。本文將從“什么是架構”和“軟件架構的五要素”兩部分講述大型網站架構方法。
          作者介紹
        李智慧,曾擔任宅米 CTO, NEC 項目主管,阿里巴巴技術專家,IBM 咨詢經理,Intel 大數據工程師;開發過 ERP,寫過防火墻,做過網站架構,搞過數據庫,帶過團隊,創過業,申請過幾個分布式系統專利,為 Apache Spark 貢獻過一點代碼;曾在浙江大學為碩士研究生講授面向對象高級編程課程;寫過一本書《大型網站技術架構:核心原理與案例分析》,被若干高校選為計算機類專業教材。
          什么是架構
        關于什么是架構,一種比較通俗的說法是 “最高層次的規劃,難以改變的決定”,這些規劃和決定奠定了事物未來發展的方向和最終的藍圖。
        從這個意義上說,人生規劃也是一種架構。選什么學校、學什么專業、進什么公司、找什么對象,過什么樣的生活,都是自己人生的架構。
        具體到軟件架構,維基百科是這樣定義的:“有關軟件整體結構與組件的抽象描述,用于指導大型軟件系統各個方面的設計”。系統的各個重要組成部分及其關系構成了系統的架構,這些組成部分可以是具體的功能模塊,也可以是非功能的設計與決策,他們相互關系組成一個整體,共同構成了軟件系統的架構。
          軟件架構的五要素
        一般說來,除了當前的系統功能需求外,軟件架構還需要關注性能、可用性、伸縮性、擴展性和安全性這 5 個架構要素,架構設計過程中需要平衡這 5 個要素之間的關系以實現需求和架構目標,也可以通過考察這些架構要素來衡量一個軟件架構設計的優劣,判斷其是否滿足期望。
          性能
        性能是網站的一個重要指標,除非是沒得選擇(比如只能到 www.12306.cn 這一個網站上買火車票),否則用戶無法忍受一個響應緩慢的網站。一個打開緩慢的網站會導致嚴重的用戶流失,很多時候網站性能問題是網站架構升級優化的觸發器。可以說性能是網站架構設計的一個重要方面,任何軟件架構設計方案都必須考慮可能會帶來的性能問題。
        也正是因為性能問題幾乎無處不在,所以優化網站性能的手段也非常多,從用戶瀏覽器到數據庫,影響用戶請求的所有環節都可以進行性能優化。在瀏覽器端,可以通過瀏覽器緩存、使用頁面壓縮、合理布局頁面、減少 Cookie 傳輸等手段改善性能。
        還可以使用 CDN,將網站靜態內容分發至離用戶最近的網絡服務商機房,使用戶通過最短訪問路徑獲取數據。可以在網站機房部署反向代理服務器,緩存熱點文件,加快請求響應速度,減輕應用服務器負載壓力。
        在應用服務器端,可以使用服務器本地緩存和分布式緩存,通過緩存在內存中的熱點數據處理用戶請求,加快請求處理過程,減輕數據庫負載壓力。也可以通過異步操作將用戶請求發送至消息隊列等待后續任務處理,而當前請求直接返回響應給用戶。
        在網站有很多用戶高并發請求的情況下,可以將多臺應用服務器組成一個集群共同對外服務,提高整體處理能力,改善性能。在代碼層面,也可以通過使用多線程、改善內存管理等手段優化性能。
        在數據庫服務器端,索引、緩存、SQL 優化等性能優化手段都已經比較成熟。而方興未艾的 NoSQL 數據庫通過優化數據模型、存儲結構、伸縮特性等手段在性能方面的優勢也日趨明顯。
        衡量網站性能有一系列指標,重要的有響應時間、TPS、系統性能計數器等,通過測試這些指標以確定系統設計是否達到目標。這些指標也是網站監控的重要參數,通過監控這些指標可以分析系統瓶頸,預測網站容量,并對異常指標進行報警,保障系統可用性。
        對于網站而言,性能符合預期僅僅是必要條件,因為無法預知網站可能會面臨的訪問壓力,所以必須要考察系統在高并發訪問情況下,超出負載設計能力的情況下可能會出現的性能問題。網站需要長時間持續運行,還必須保證系統在持續運行且訪問壓力不均勻的情況下保持穩定的性能特性。
          可用性
        對于大型網站而言,特別是知名網站,網站宕掉、服務不可用是一個重大的事故,輕則影響網站聲譽,重則可能會攤上官司。對于電子商務類網站,網站不可用還意味著損失金錢和用戶。因此幾乎所有網站都承諾 7×24 可用,但事實上任何網站都不可能達到完全的 7×24 可用,總會有一些故障時間,扣除這些故障時間,就是網站的總可用時間,這個時間可以換算成網站的可用性指標,以此衡量網站的可用性,一些知名大型網站可以做到 4 個 9 以上的可用性,也就是可用性超過 99.99%。
        因為網站使用的服務器硬件通常是普通的商用服務器,這些服務器的設計目標本身并不保證高可用,也就是說,很有可能會出現服務器硬件故障,也就是俗稱的服務器宕機。大型網站通常都會有上萬臺服務器,每天都必定會有一些服務器宕機,因此網站高可用架構設計的前提是必然會出現服務器宕機,而高可用設計的目標就是當服務器宕機的時候,服務或者應用依然可用。
        網站高可用的主要手段是冗余,應用部署在多臺服務器上同時提供訪問,數據存儲在多臺服務器上互相備份,任何一臺服務器宕機都不會影響應用的整體可用,也不會導致數據丟失。
        對于應用服務器而言,多臺應用服務器通過負載均衡設備組成一個集群共同對外提供服務,任何一臺服務器宕機,只需把請求切換到其他服務器就可實現應用的高可用,但是一個前提條件是應用服務器上不能保存請求的會話信息。否則服務器宕機,會話丟失,即使將用戶請求轉發到其他服務器上也無法完成業務處理。對于存儲服務器,由于其上存儲著數據,需要對數據進行實時備份,當服務器宕機時需要將數據訪問轉移到可用的服務器上,并進行數據恢復以保證繼續有服務器宕機的時候數據依然可用。
        除了運行環境,網站的高可用還需要軟件開發過程的質量保證。通過預發布驗證、自動化測試、自動化發布、灰度發布等手段,減少將故障引入線上環境的可能,避免故障范圍擴大。
        衡量一個系統架構設計是否滿足高可用的目標,就是假設系統中任何一臺或者多臺服務器宕機時,以及出現各種不可預期的問題時,系統整體是否依然可用。
          伸縮性
        大型網站需要面對大量用戶的高并發訪問和存儲海量數據,不可能只用一臺服務器就處理全部用戶請求,存儲全部數據。網站通過集群的方式將多臺服務器組成一個整體共同提供服務。所謂伸縮性是指通過不斷向集群中加入服務器的手段來緩解不斷上升的用戶并發訪問壓力和不斷增長的數據存儲需求。
        衡量架構伸縮性的主要標準就是是否可以用多臺服務器構建集群,是否容易向集群中添加新的服務器。加入新的服務器后是否可以提供和原來的服務器無差別的服務。集群中可容納的總的服務器數量是否有限制。
        對于應用服務器集群,只要服務器上不保存數據,所有服務器都是對等的,通過使用合適的負載均衡設備就可以向集群中不斷加入服務器。
        對于緩存服務器集群,加入新的服務器可能會導致緩存路由失效,進而導致集群中大部分緩存數據都無法訪問。雖然緩存的數據可以通過數據庫重新加載,但是如果應用已經嚴重依賴緩存,可能會導致整個網站崩潰。需要改進緩存路由算法保證緩存數據的可訪問性。
        關系數據庫雖然支持數據復制,主從熱備等機制,但是很難做到大規模集群的可伸縮性,因此關系數據庫的集群伸縮性方案必須在數據庫之外實現,通過路由分區等手段將部署有多個數據庫的服務器組成一個集群。
        至于大部分 NoSQL 數據庫產品,由于其先天就是為海量數據而生,因此其對伸縮性的支持通常都非常好,可以做到在較少運維參與的情況下實現集群規模的線性伸縮。
          擴展性
        不同于其他架構要素主要關注非功能性需求,網站的擴展性架構直接關注網站的功能需求。網站快速發展,功能不斷擴展,如何設計網站的架構使其能夠快速響應需求變化,是網站可擴展架構主要的目的。
        衡量網站架構擴展性好壞的主要標準就是在網站增加新的業務產品時,是否可以實現對現有產品透明無影響,不需要任何改動或者很少改動既有業務功能就可以上線新產品。不同產品之間是否很少耦合,一個產品改動對其他產品無影響,其他產品和功能不需要受牽連進行改動。
        網站可伸縮架構的主要手段是事件驅動架構和分布式服務。
        事件驅動架構在網站通常利用消息隊列實現,將用戶請求和其他業務事件構造成消息發布到消息隊列,消息的處理者作為消費者從消息隊列中獲取消息進行處理。通過這種方式將消息產生和消息處理分離開來,可以透明地增加新的消息生產者任務或者新的消息消費者任務。
        分布式服務則是將業務和可復用服務分離開來,通過分布式服務框架調用。新增產品可以通過調用可復用的服務實現自身的業務邏輯,而對現有產品沒有任何影響。可復用服務升級變更的時候,也可以通過提供多版本服務對應用實現透明升級,不需要強制應用同步變更。
        大型網站為了保持市場地位,還會吸引第三方開發者,調用網站服務,使用網站數據開發周邊產品,擴展網站業務。第三方開發者使用網站服務的主要途徑是大型網站提供的開放平臺接口。
          安全性
        互聯網是開放的,任何人在任何地方都可以訪問網站。網站的安全架構就是保護網站不受惡意訪問和攻擊,保護網站的重要數據不被竊取。衡量網站安全架構的標準就是針對現存和潛在的各種攻擊與竊密手,是否有可靠的應對策略。
          經驗小結
        性能、可用性、伸縮性、擴展性和安全性是網站架構最核心的幾個要素,這幾個問題解決了,大型網站架構設計的大部分挑戰也就克服了。
        本文節選自李智慧老師《大型網站技術架構:核心原理與架構分析》一書。
         
        CONTACT / 聯系方式
        瑞安市優博科技有限公司
        RUIAN YOUBO TECHUOLOGY CO.,LTD.
        地址:中國·浙江省瑞安市塘下鎮鮑田建城南路114號
        電話:0577-65382333   25652222
        傳真:0577-65388088   25885200
        網址:www.youboy.net
        中文網址:www.優博科技.com
        E-mail:info#youboy.net (請把#改成@)
        您可以直接撥打我們的全國統一服務熱線
        或者掃描右邊的二維碼添加優博科技的微信號。
        400 666 1789
        ? 2008-2024 Ruian Youbo Technology Co., Ltd.  All Rights Reserved.