【系統架構】 大型網站架構技術一覽

来源:http://www.cnblogs.com/aiweixiao/archive/2016/11/26/6103777.html
-Advertisement-
Play Games

本文地址 原文地址 對於大型網站技術的理解,可以從架構技術原理的組織方式以架構要素作為維度,從系統性能、可用性、伸縮性、擴展性、安全性幾個角度闡述網站架構的技術要點。還有另一種較為直觀的組織方式,是從不同架構層次所使用的網站架構技術這個維度進行描述的。 網站系統架構層次如下圖所示: 這個網站架構層次 ...


 

本文地址

原文地址

  對於大型網站技術的理解,可以從架構技術原理的組織方式以架構要素作為維度,從系統性能、可用性、伸縮性、擴展性、安全性幾個角度闡述網站架構的技術要點。還有另一種較為直觀的組織方式,是從不同架構層次所使用的網站架構技術這個維度進行描述的。

        網站系統架構層次如下圖所示:


        這個網站架構層次,共分為8個層次,其中資料庫中心機房架構是上面所有架構的物理基礎;安全架構和資料庫採集監控架構是貫穿在各個層次的重要保障,這兩個架構主要解決五個業務相關層次的安全問題和數據採集監控問題,是一直都需要關註的地方;
        對於目前的大型網路來看,可以分為前端、應用層、服務層、存儲層、後臺等5個方面,簡單來說,前端存放的是靜態網頁,不涉及業務,就是為了客戶端能夠及時響應,並展現一些靜態內容;應用層是處理業務邏輯的地方,前端開發的代碼,主要就是發佈在這個地方,實際用戶的各種業務處理,也主要在這個地方進行;服務層介於應用層和存儲層之間,主要為兩者提供各種分散式服務,比如分散式緩存,能減少存儲層的壓力,並儘快響應應用層的請求,提高性能;存儲層是存放各種業務數據的地方,包括關係型、非關係型資料庫、文件已經它們之間的數據同步;上面4個層次可以說是實時的業務功能,有一個層次出現問題,就會直接影響用戶體驗,在這4個層次後面,還有一個後臺,它是不直接與用戶溝通,但從上面的業務中通過搜索引擎、數據倉庫、推薦系統等,創造更加有價值的信息,在後臺為業務提供支撐。


1.前端架構



        (包括:瀏覽器優化技術、CDN、動靜分離,靜態資源獨立部署、圖片服務、反向代理、DNS等7種技術)
        前端指用戶請求到達網站應用伺服器之前經歷的環節,通常不包含網站業務邏輯,不處理動態內容。一般打開網頁或界面時,一輸入URL就可以看到的信息,就屬於這部分,然後再慢慢載入的,就是後面業務層的內容了,因為內容都是靜態的,不會發生改變,所有可以在各個地方準備好,放在CDN中,達到瞬時響應的效果。為了實現這樣的效果,有下麵幾種架構技術:


瀏覽器優化技術
        並不是優化瀏覽器,而是通過優化響應頁面,加快瀏覽器頁面的載入和顯示,常用的有頁面緩存、合併HTTP減少請求次數、使用頁面壓縮等。


CDN
        內容分髮網絡,部署在網路運營商機房,通過將靜態頁面內容分發到離用戶最近最近的CDN伺服器,使用戶可以通過最短路徑獲取內容。


動靜分離,靜態資源獨立部署
        靜態資源,如JS、CSS等文件部署在專門的伺服器集群上,和Web應用動態內容服務分離,並使用專門的(二級)功能變數名稱。


圖片服務
        圖片不是指網站Logo、按鈕圖標等,這些文件屬於上面提到的靜態資源,應該和JS、CSS部署在一起。這裡的圖片指用戶上傳的圖片,如產品圖片、用戶頭像等,圖片服務同樣適用獨立部署的圖片伺服器集群,並使用獨立(二級)功能變數名稱。


反向代理
        部署在網站機房,在應用伺服器、靜態資源伺服器、圖片伺服器之前,提供頁面緩存服務。


DNS
        功能變數名稱服務,將功能變數名稱解析成IP地址,利用DNS可以實現DNS負載均衡,配置CDN也需要修改DNS,使功能變數名稱解析後指向CDN伺服器。


2.應用層架構



        (包括:開發框架、頁面渲染、負載均衡、Session管理、動態頁面靜態化、業務拆分、虛擬化伺服器等7種技術)
        應用層是處理網站主要業務邏輯的地方。一般說的使用PHP或則Java等技術實現的網路邏輯和前端框架,就是指這部分的內容,該部分是互動式業務實現的主要層次,相應的架構技術有:

開發框架
        網站業務是多變的,網站的大部分軟體工程師都是在加班加點開髮網站業務,一個好的開發框架至關重要。一個號的開發框架應該能夠分離關註面,使美工、開發工程師可以各司其事,易於協作。同時還應該內置一些安全策略,防護Web用攻擊。


頁面渲染
        將分別開發維護的動態內容和靜態頁面模板集成起來,組合成最終顯示給用戶的完整頁面。


負載均衡
        將多台應用伺服器組成一個集群,通過負載均衡技術將用戶請求分發到不同的伺服器上,以應對大量用戶同時訪問時產生的高併發負載壓力。


Session管理
        為了實現高可用的應用伺服器集群,應用伺服器通常設計為無狀態,不保存用戶請求上下文信息,但是網站業務通常需要保持用戶會話信息,需要專門的機制管理Session,使集群內甚至跨集群的應用伺服器可以共用Session。


動態頁面靜態化
        對於訪問量特別大而更新又不很頻繁的動態頁面,可以將其靜態化,即生成一個靜態頁面,利用靜態頁面的優化手段加速用戶訪問,如反向代理、CDN、瀏覽器緩存等。


業務拆分
        將複雜而龐大的業務拆分開來,形成多個規模較小的產品,獨立開發、部署、維護,除了降低系統耦合度,也便於資料庫業務分庫。按業務對關係資料庫進行拆分,技術難度相對較小,而效果又相對較好。


虛擬化伺服器
        將一臺物理伺服器虛擬化成多態虛擬伺服器,對於併發訪問較低的業務,更容易用較少的資源構架高可用的應用伺服器集群。


3.服務層架構



        (包括:分散式消息、分散式服務、分散式緩存、分散式配置等4種技術)
        提供基礎服務,供應用層調用,完成網站業務。服務層介於應用層和存儲層之間,顧名思義就是為應用層提供各種服務的,而服務層本身內容的來源,又可能與存儲層有關,比如緩存就是將存儲層中的一部分數據做以加工和展現,供應用層快速調用的。服務層的架構技術主要是幾種分散式的服務功能:

分散式消息
        利用消息隊列機制,實現業務和業務、業務和服務之間的非同步消息發送及低耦合的業務關係。


分散式服務
        提供高性能、低耦合、易復用、易管理的分散式服務,在網站實現面向服務架構(SOA)。


分散式緩存
        通過可伸縮的伺服器集群提供大規模熱點數據的緩存服務,是網站性能優化的重要手段。


分散式配置
        系統運行需要配置許多參數,如果這些參數需要修改,比如分散式緩存集群加入新的緩存伺服器,需要修改應用程式客戶端的緩存伺服器列表配置,並重啟應用程式伺服器。分散式配置在系統運行期提供配置動態推送服務,將配置修改實時推送到應用系統,無需重啟伺服器。


4.存儲層架構



        (包括:分散式文件、關係資料庫、NoSQL資料庫、數據同步等4種技術)
        提供數據、文件的持久化存儲訪問與管理服務。該層次也是一般意義上的資料庫層,主要用來存放各種數據的,當然在大型網站中數據層的概念,不僅包括傳統關係型資料庫,還包括分散式文件數據,nosql資料庫以及數據同步技術。存儲層的架構技術主要有:

分散式文件
        網站線上業務需要存儲的文件大部分都是圖片、網頁、視頻等比較小的文件,但是這些文件的數量非常龐大,而且通常都在持續增加,需要伸縮性設計比較好的分散式文件系統。



關係資料庫
        大部分萬丈的主要業務是基於關係資料庫開發的,但是關係資料庫對集群伸縮性的支持表較差。通過在應用程式的數據訪問層增加資料庫訪問的路由功能,根據業務配置將資料庫訪問路由到不同的物理資料庫上,可實現關係資料庫的分散式訪問。


NoSQL資料庫
        目前各種NoSQL資料庫層出不窮,在記憶體管理、數據模型、集群分散式管理等方面各有優勢,不過從社區活動性角度看,Hbase無疑是目前最好的。


數據同步
        在支持全球範圍內數據共用的分散式資料庫技術成熟之前,擁有多個數據中心的網站必須在多個數據中心之間進行數據同步,以保證每個數據中心都擁有完整的數據。在實踐中,為了減輕資料庫壓力,將資料庫的事物日誌(或者NoSQL的寫操作Log)同步到其他數據中心,根據Log進行數據重演,實現數據同步。


5.後臺架構



        (包括:搜索引擎、數據倉庫、推薦系統等3種技術)
        網站應用中,除了要處理用戶的實時訪問請求外,還有一些後臺非實時數據分析要處理。後臺架構主要是進行一些非實時操作,對前端業務處理提供支撐,主要的架構技術有:

搜索引擎
        即使是網站內部的搜索引擎,也需要進行數據增量更新及全量更新、構建索引等。這些操作通過後臺系統定時執行。


數據倉庫
        根據離線數據,提供數據分析與數據挖掘服務。


推薦系統
        社交網站及購物網站通過挖掘人與人之間的關係,人和商品之間的關係,發展潛在的人際關係和購物興趣,為用戶提供個性化推薦服務。


6.數據採集與監控



        (包括:瀏覽器數據採集、伺服器業務數據採集、伺服器性能數據採集、系統監控、系統報警等5種技術)
        監控網站訪問情況與系統運行情況,為網站運營決策和運維管理提供支持保障。數據採集與監控存在於整個業務架構的生命周期,在業務上線後,業務運行狀態是否正常,運維人員日常做的主要工作,就是數據採集與監控,在業務系統發生故障或者性能問題時,也需要改系統進行支持和問題定位,進而解決問題。該層次的主要架構技術有:

瀏覽器數據採集
        通過在網站頁面中嵌入JS腳本採集用戶瀏覽器環境與操作記錄,分析用戶行為。


伺服器業務數據採集
        伺服器業務數據包括兩種,一種是採集在伺服器端記錄的用戶請求操作日誌;一種是採集應用程式運行期業務數據,比如待處理消息數目等。


伺服器性能數據採集
        採集伺服器性能數據,如系統負載、記憶體使用率、網卡流量等。


系統監控
        將前述採集的數據以圖表的方式展示,以便運營和運維人員監控網站運行狀況,做到這一步僅僅是系統監視。更先進的做法是根據採集的數據進行自動化運維,自動處理系統異常狀況,是吸納自動化控制。


系統報警
        如果採集來的數據超過預設的正常情況的閥值,比如系統負載過高,就通過郵件、簡訊、語音電話等方式發出警報信號,等待工程師干預。


7.安全架構



        (包括:Web攻擊、數據保護等2種技術)
        保護網站免遭攻擊及敏感信息泄露。安全也業務能夠正常運行的一個非常重要的問題,安全主要有兩方面,一是來自外邊的攻擊與防護,會影響到網站業務的可用性和性能;二是網站內部的數據安裝和保護,會影響到數據層總的敏感信息。安全架構技術主要有:

Web攻擊
        以HTTP請求的方式發起的攻擊,危害最大的就是XSS和SQL註入攻擊。但是只要措施得當,這兩種攻擊都是比較容易防範的。


數據保護
        敏感信息加密傳輸與存儲,保護網站和用戶資產。


8.數據中心機房架構



        (包括:機房架構、機櫃架構、伺服器架構等3種技術)
        大型網站需要的伺服器規模數以十萬計,機房物理架構也需要關註。對於大型網路系統來說,物理伺服器數量必然是非常巨大的,這樣在機房、機櫃、伺服器等層次都要有相應的規劃,這樣才能比較好的支撐上面的各個層次。

機房架構
        對於一個擁有十萬台伺服器的大型網站,每台伺服器耗電(包括伺服器本身耗電及空調耗電)每年大約需要人民幣2000元,那麼網站每年機房電費就需要兩億人民幣。數據中心能耗問題日趨嚴重,Google、Facebook選擇數據中心地理位置的時候趨向選擇散熱良好,供電充裕的地方。


機櫃架構
        包括機櫃大小,網線佈局、指示燈規格、不間斷電源、電壓規格(是48V直流電還是220V民用交流電)等一系列問題。


伺服器架構

          大型網站由於伺服器採購規模龐大,大都採用定製伺服器的方式代替購買伺服器整機。根據網站應用需求,定製硬碟、記憶體、甚至CPU,同時去除不必要的外設介面(顯示器輸出介面,滑鼠、鍵盤輸入介面),並使空間結構利於散熱。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言: "軟體模式的偉大之處, 就在於他們傳達了許多有用的設計思想. 所以, 在學習了大量模式之後, 就理應成為非常優秀的軟體設計人員, 不是嗎? 當學習、使用了幾十個設計模式之後, 我也曾這樣認為. 模式幫助我開發靈活的框架, 幫助我構建堅固、可擴展的軟體系統. 但是幾年之後, 我卻發現自己在模式 ...
  • 每天一個設計模式-7 生成器模式(Builder) 一、實際問題 在討論工廠方法模式的時候,提到了一個導出數據的應用框架,但是並沒有涉及到導出數據的具體實現,這次通過生成器模式來簡單實現導出成文本,Xml等具體的格式。 導出成文本或Xml等格式的數據時,一般都會有各自的格式,比如:導出的文件都有3個 ...
  • 內容摘要從架構的本質,軟體工程,架構師職責,成長路徑等方面,介紹什麼是架構,架構流程以及架構師職責和成長規劃。 本篇主題一、什麼是架構二、項目中的角色三、架構師職責和工作內容四、架構工作流五、架構師成長路徑六、架構能力模型七、擴展知識八、本章總結 一、什麼是架構架構是系統的藍圖,描述了系統的結構和關 ...
  • 1.json 2.HotFragment ...
  • 1.json 2.按照指定比例展示寬高的自定義控制項實現 為了讓圖片按照完美比例進行展現, 不被壓縮, 需要自定義控制項,該控制項可以根據預設的比例來確定寬高 自定義屬性 ...
  • 感謝您的閱讀。喜歡的、有用的就請大哥大嫂們高抬貴手“推薦一下”吧!你的精神支持是博主強大的寫作動力以及轉載收藏動力。歡迎轉載! 版權聲明:本文原創發表於 【請點擊連接前往】 ,未經作者同意必須保留此段聲明!如有問題請聯繫我,侵立刪,謝謝! 我的博客:http://www.cnblogs.com/GJ ...
  • 感謝您的閱讀。喜歡的、有用的就請大哥大嫂們高抬貴手“推薦一下”吧!你的精神支持是博主強大的寫作動力以及轉載收藏動力。歡迎轉載! 版權聲明:本文原創發表於 【請點擊連接前往】 ,未經作者同意必須保留此段聲明!如有問題請聯繫我,侵立刪,謝謝! 我的博客:http://www.cnblogs.com/GJ ...
  • 單例模式: 分析: 1、單例模式,從字面意思上理解,“單例”,即只有唯一一個實例,通常情況下,定義一個類,然後通過new ClassName()方式來產生具體對象,然而這樣,破壞了一個類只有一個實例,怎麼處理該問題呢?將類的具體化放在類的構造函數來完成。 2、如上方式解決了單例問題,然而,外界如何才 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...