大型網站技術架構01 大型網站架構的演化、大型網站架構模式

大型網站架構演化html

1. 大型網站軟件系統的特色:前端

    1). 高併發,大流量 (集羣)數據庫

    2). 高可用:7*24  (集羣)後端

    3). 海量數據          (集羣,分佈式)瀏覽器

    4). 用戶分佈普遍,網絡狀況複雜     (緩存)緩存

    5). 安全環境惡劣                         (安全)安全

    6). 需求快速變動,發佈頻繁           (可擴展)服務器

    7). 漸進式發展                            (可擴展,可伸縮)網絡

2. 大型網站架構演化發展歷程數據結構

    1). 初始階段的網站架構:聚集各類免費開源軟件及一臺廉價服務器

    2). 應用服務和數據服務分離:

         a. 應用服務器須要處理大量的業務邏輯,所以須要更快更強大的CPU

         b. 數據庫服務器須要更快速磁盤檢索和數據緩存,所以須要更快的磁盤和更大的內存

         c. 文件服務器須要存儲大量的用戶上傳的文件,所以須要更大硬盤

    3). 使用緩存改善網站性能:二八定律,本地緩存與遠程分佈式緩存

    4). 使用應用服務器集羣改善網站的併發處理能力

    5). 數據庫讀寫分離

    6). 使用反向代理和CDN加速網站相應:CDN和反向代理的基本原理都是緩存,區別在於CDN部署在網絡提供商的機房,使用戶在請求網站服務時,能夠從距離本身最近的網絡提供商機房獲取數據;而反向代理則

          部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的服務器是反向代理服務器,若是反向代理服務器中緩存着用戶請求的資源,就將其直接返回給用戶。

          使用CDN和反向代理的目的,一方面加快用戶訪問速度,另外一方面也減輕後端服務器的負載壓力

    7). 使用分佈式文件系統和分佈式數據庫系統:分佈式數據庫是網站數據庫拆分的最後手段,只有在單表數據規模很是龐大時才使用。不到不得已,網站更經常使用的數據庫拆分手段是業務分庫,將不一樣業務的數據庫部

          署在不一樣的物理服務器上。

    8). 使用NoSQL和搜索引擎:應用服務器則經過一個統一數據訪問模塊訪問各類數據,減輕應用程序管理諸多數據源的麻煩。

    9). 業務拆分

    10). 分佈式服務

3. 大型網站架構演化的價值觀

    1). 大型網站架構技術的核心價值是隨網站所需靈活應對:大型網站架構技術的核心價值不是從無到有搭建一個大型網站,而是可以伴隨小型網站業務的逐步發展,慢慢地演化成一個大型網站。在這個漫長的技術

          演化過程當中,不須要放棄什麼,不須要推翻什麼,不須要劇烈的革命,就那麼潤物細無聲地把一個只有一臺服務器,幾百個用戶的小網站演化成一個幾十萬臺服務器,數十億用戶的大網站。

    2). 驅動大型網站技術發展的主要力量是網站的業務發展

4. 網站架構設計的誤區

    1). 一味追隨大公司的解決方案

    2). 爲了技術而技術

    3). 企圖用技術解決全部問題:技術是用來解決業務問題的,而業務問題,也能夠經過業務的手段去解決。

 

大型網站架構圖(來源:http://www.cnblogs.com/GmrBrian/p/3777076.html):

 

大型網站架構模式

1. 網站架構:分層 、分割、分佈式、集羣、緩存、異步、冗餘、自動化、安全 

2. 網站架構模式:

    1). 分層 : 三層結構(應用層,服務層,數據層)能夠部署在同一臺物理機器上,但隨着網站業務的發展,必然須要對已經分層的模塊分離部署,即三層機構分別部署在不一樣的服務器上,使網站擁有更多的計算資源

                  以應對愈來愈多的用戶訪問。因此雖然分層架構模式最初的目的是規劃軟件清晰的邏輯結構便於開發維護,但在網站的發展過程當中,分層結構對網站支持高併發向分佈式方向發展相當重要。所以,在網

                  站規模還很小的時候就應該採用分層的架構,這樣未來網站作大才可以更好地應對。

    2). 分割:若是說分層是將軟件在橫向方面進行切分,那麼分割就是在縱向方面對軟件進行切分。網站越大,功能越複雜,服務和數據處理的種類也越多,將這些不一樣的功能和服務分割開來,包裝成高內聚低耦合

                  的模塊單元,一方面有助於軟件的開發和維護;另外一方面,便於不一樣模塊的分佈式部署,提升網站的併發處理能力和功能擴展能力。

    3). 分佈式 :對於大型網站,分層和分割的一個主要目的是爲了切分後的模塊便於分佈式部署,即將不一樣模塊部署在不一樣的服務器上,經過遠程調用協同工做。分佈式意味着可使用更多的計算機完成一樣的功能,

                     計算機越多,CPU、內存、存儲資源也就越多,可以處理的併發訪問和數據量就越大,進而可以爲更多的用戶提供服務。

                     分佈式解決網站高併發問題帶來的問題:

                     a. 分佈式意味着服務調用必須經過網絡,這可能會對性能形成比較嚴重的影響

                     b. 服務器越多,服務器宕機的機率也就越大,一臺服務器宕機形成的服務器不可用會致使不少應用不可訪問,使網站可用性下降

                     c. 數據在分佈式的環境中保持數據一致性也很是困難,分佈式事務也難以保證,這對網站業務正確性和業務流程有可能形成很大影響

                     d. 分佈式致使網站依賴錯綜複雜,開發管理維護困難

                     在網站應用中,經常使用的分佈式方案有如下幾種:

                     a. 分佈式應用和服務器:將分層和分割後的應用和服務模塊分佈式部署,除了能夠改善網站性能和併發性加快開發和發佈速度、減小數據庫鏈接資源消耗外;還可使用不一樣應用複用共同的服務,便

                                                     於業務功能擴展。

                     b. 分佈式靜態資源:網站靜態資源如JS,CSS,Logo圖片等資源能獨立分佈式部署,並採用獨立的域名,即人們常說的動靜分離。靜態資源分佈式部署能夠減輕應用服務器的負載壓力;經過獨立域名加

                                               快瀏覽器併發加載的速度;由負責用戶體驗的團隊進行開發維護有利於網站分工合做,便於不一樣技術工種術業有專攻。

                     c. 分佈式數據和存儲:

                     d. 分佈式計算:嚴格來講,應用、服務、實時數據處理都是計算,網站除了要處理這些在線業務,還有很大一部分用戶沒有直觀感覺的後臺業務要處理,包括搜索引擎的索引構建、數據倉庫的數據分析統計等。

                                          這些業務的計算規模很是龐大,目前網站廣泛使用Hadoop及其MapReduce分佈式計算框架進行此類批處理計算,其特色是移動計算而不是移動數據,將計算程序分發到數據所在的位置以加速

                                          和分佈式計算。

                     e. 分佈式配置:支持網站線上服務器配置實時更新

                     f. 分佈式鎖:分佈式環境下實現併發和協同

                     g. 分佈式文件:支持雲存儲

    4). 集羣 :多臺服務器部署相同應用構成一個集羣,經過負載均衡設備共同對外提供服務。

    5). 緩存:緩存是改善軟件性能的第一手段,現代CPU愈來愈快的一個重要因素就是使用了更多的緩存,在複雜的軟件設計中,緩存幾乎無處不在。

                 CDN:即內容分發網絡,部署在距離終端用戶最近的網絡服務商,用戶的網絡請求老是先到達他的網絡服務器商那裏,在這裏緩存網站的一些靜態資源(較少變化的數據)。能夠就近已最快的速度返回給用戶,如視頻

                          網站和門戶網站會將用戶訪問量最大的熱點內容緩存在CDN。

                 反向代理:反向帶來屬於網站前端架構的一部分,部署在網站的前端,當用戶請求到達網站的數據中心時,最早訪問到的就是反向代理服務器,這裏緩存網站的靜態資源。無需將請求繼續轉發給應用服務器就能返回

                               給用戶。

                 本地緩存:在應用服務器自己緩存着熱點數據,應用程序能夠在本機內存中直接訪問數據,而無需訪問數據庫。

                 分佈式緩存:將數據緩存在一個專門的分佈式緩存集羣中,應用程序經過網絡通訊訪問緩存數據。

                 使用緩存有兩個前提條件,

             一是數據訪問熱點不均衡,某些數據會被更頻繁的訪問,這些數據應該放在緩存中;

                 二是數據在某個時間段內有效,不會很快過時,不然緩存的數據就會因已失效而產生髒讀,影響結果的正確性。網站應用中,緩存除了能夠加快數據訪問速度,還能夠減輕後端應用和數據存儲

                 的負載壓力,這一點對網站數據庫架構的相當重要,網站數據庫幾乎都是按照有緩存的前提進行負載能力設計的。

    6). 異步:業務之間的消息傳遞不是同步調用的,而是將一個業務操做分紅多個階段,每一個階段經過共享數據的方式異步執行進行協做。在單一服務器內部能夠經過多線程共享內存隊列的方式實現異步,處理業務操做前面的線程

                 將輸出寫入到隊列,後面的線程從隊列中讀取數據進行處理;在分佈式系統中,多個服務器集羣經過分佈式消息隊列實現異步,分佈式消息隊列能夠看作內存隊列的分佈式部署。

                 異步架構師典型的生產者消費者模式,二者不存在直接調用,只要保持數據結構不變,彼此功能實現能夠隨意變換而不互相影響,這對網站擴展新功能很是便利。除此以外,使用一部消息隊列還有如下特性:

                 a. 提升系統可用性

                 b. 加快網站相應速度:處在業務處理前端的生產者服務器在處理完業務請求後,將數據寫入消息隊列,不須要等待消費者服務器處理就能夠返回,響應延遲減小。

                 c. 消除併發訪問高峯:使用消息隊列將忽然增長的訪問請求數據放入消息隊列中,等待消費者服務器一次處理,就不會對整個網站負載形成太大壓力。

                 須要注意,使用異步方式處理業務可能會對用戶體驗、業務流程形成影響,須要網站產品設計方面的支持。

    7). 冗餘:網站須要7*24小時連續運行。想要保證在服務器宕機的狀況下網站依然能夠繼續服務,不丟失數據,就須要必定程序的服務器冗餘運行,數據冗餘備份,這樣某臺服務器宕機時,能夠將其上的數據和

                  數據訪問遷移到其他機器上。

                  訪問和負載很小的服務也必須部署至少兩臺服務器構成的一個集羣,其目的就是經過冗餘實現服務高可用。數據庫除了按期備份,存檔保存,實現冷備份外,爲了保證在線業務高可用,還須要對數據庫主從分離,實時同

                  步實現熱備份。有些時候 ,還須要部署災備數據中心

    8). 自動化:發佈過程自動化,自動化代碼管理,自動化測試,自動化安全檢測,自動化部署,自動化監控,自動化報警,自動化失效轉移,自動化失效恢復,自動化降級,自動化分配資源

    9). 安全:

                 a. 經過密碼和手機驗證碼進行身份認證

                 b. 登錄、交易等操做須要對網絡通訊進行加密,網站服務器上存儲的敏感數據如用戶信息等也進行加密處理

                 c. 爲了防止機器人程序濫用網路資源攻擊網站,網站使用驗證碼進行識別

                 d. 對於常見的用於供給網站的XSS攻擊、SQL注入,進行編碼轉換等響應的處理

                 e. 對於垃圾信息、敏感信息進行顧慮

                 f. 對交易轉帳等重要操做根據交易模式和交易信息進行風險控制。

相關文章
相關標籤/搜索