"

1、高併發和高負載的約束條件

硬件:
部署操作系統 CentOS6.5-7.2、Windows Server 2003 Ent(企業版)Windows Server 2008 企業版 R2

Web 服務器(Apache2.4.4、Nginx1.10.1)服務器的 80 端口發佈一個 HTTP 協議的服務

PHP(5.4-5.6)

MySQL(5.6)
測試:
負載均衡設備-硬件(硬負載)(F5、梭子魚)

負載均衡軟件(軟負載)


2、解決之道——硬件篇

處理能力的提升:部署多顆 CPU,選擇多核心、具備更高運算頻率、更大高速緩存的 CPU;

處理能力的提升最直接的反應在於 Web 請求的處理效率和 PHP 程序的執行效率。

內存帶寬與容量:更大的內存帶寬和容量;

內存帶寬與容量的提升最直接的反應在於應對數據庫大量的數據交換。

磁盤搜索與 I/O 能力:選擇更高的轉速、更大的硬盤緩存、組件磁盤陣列(RAID);

磁盤搜索與 I/O 能力的提升最直接反應在於數據庫大量的查詢和讀寫以及文件的讀寫。

網絡帶寬的提升可考慮的因素包括: 更大帶寬、多線路接入、獨享帶寬;

服務器在大負載的情況下,對網絡帶寬的佔用是十分可觀的。

策略:硬件設施是應對大負載的基礎,硬件設施的投入可根據實際壓力和預算量力而行。


3、解決之道——部署篇

3.1、服務器分離

3.2、數據庫集群和庫表散列

3.3、鏡像

3.4、負載均衡

分類:

1)、DNS 輪循

2)代理服務器負載均衡

3)地址轉換網關負載均衡

4)NAT 負載均衡

5)反向代理負載均衡

6)混合型負載均衡

策略:根據硬件投入和業務需求,選擇合理的部署方案。

部署方案 1:

適用範圍:靜態內容為主體的網站和應用系統;對系統安全要求較高的網站和應用系統。

Main Server:主服務器

承載程序的主體運行壓力,處理網站或應用系統中的動態請求;

將靜態頁面推送至多個發佈服務器;

將附件文件推送至文件服務器;

安全要求較高,以靜態為主的網站,可將服務器置於內網屏蔽外網的訪問。

DB Server:數據庫服務器

承載數據庫讀寫壓力;

只與主服務器進行數據量交換,屏蔽外網訪問。

File/Video Server:文件/視頻服務器

承載系統中佔用系統資源和帶寬資源較大的數據流;

作為大附件的存儲和讀寫倉庫;

作為視頻服務器將具備視頻自動處理能力。

發佈服務器組:

只負責靜態頁面的發佈,承載絕大多數的 Web 請求;

通過 Nginx 進行負載均衡部署。

部署方案 2:

適用範圍:以動態交互內容為主體的網站或應用系統;負載壓力較大,且預算比較充足的網站或應用系統;

Web 服務器組:

Web 服務無主從關係,屬平行冗餘設計;

通過前端負載均衡設備或 Nginx 反向代理實現負載均衡;

劃分專用文件服務器/視頻服務器有效分離輕/重總線;

每臺 Web 服務器可通過 DEC 可實現連接所有數據庫,同時劃分主從。

數據庫服務器組:

相對均衡的承載數據庫讀寫壓力;

通過數據庫物理文件的映射實現多數據庫的數據同步。

共享磁盤/磁盤陣列

將用於數據物理文件的統一讀寫

用於大型附件的存儲倉庫

通過自身物理磁盤的均衡和冗餘,確保整體系統的 IO 效率和數據安全;

方案特性:

通過前端負載均衡,合理分配 Web 壓力;

通過文件/視頻服務器與常規 Web 服務器的分離,合理分配輕重數據流;

通過數據庫服務器組,合理分配數據庫 IO 壓力;

每臺 Web 服務器通常只連接一臺數據庫服務器,通過 DEC 的心跳檢測,可在極短時間內自動切換至冗餘數
據庫服務器;

磁盤陣列的引入,大幅提升系統 IO 效率的同時,極大增強了數據安全性。


4、解決之道——環境篇

4.1、操作系統

操作系統的選擇,關注點在於

•是否適應於搭建 SiteEngine 所需要的環境程序?

•系統本身佔用的資源比;

•系統安全性;

•系統是否易於操作?

策略:我們選擇 FreeBSD,而且是最小化安裝以後的 FreeBSD。

4.2、Web 服務器

Web 服務器很大一部分資源佔用來自於處理 Web 請求,通常情況下這也就是 Apache 產生的壓力,Apache
是世界使用排名第一的 Web 服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上。

在高併發連接的情況下,Nginx 是 Apache 服務器不錯的替代品。Nginx (“engine x”) 是俄羅斯人編寫的
一款高性能的 HTTP 和反向代理服務器。在國內,已經有新浪、搜狐通行證、網易新聞、網易博客、金山
逍遙網、金山愛詞霸、校內網、YUPOO 相冊、豆瓣、迅雷看看等多家網站、 頻道使用 Nginx 服務器。

Nginx 的優勢:

高併發連接:官方測試能夠支撐 5 萬併發連接,在實際生產環境中跑到 2~3 萬併發連接數。

內存消耗少:在 3 萬併發連接下,開啟的 10 個 Nginx 進程才消耗 150M 內存(15M*10=150M)。

內置的健康檢查功能:如果 Nginx Proxy 後端的某臺 Web 服務器宕機了,不會影響前端訪問。

策略:相對於老牌的 Apache,我們選擇 Lighttpd 和 Nginx 這些具有更小的資源佔用率和更高的負載能力的
web 服務器。

4.3、MySQL

MySQL 本身具備了很強的負載能力,MySQL 優化是一項很複雜的工作,因為這最終需要對系統優化的很好
理解。數據庫工作就是大量的、短時的查詢 和讀寫,除了程序開發時需要注意建立索引、提高查詢效率等
軟件開發技巧之外,從硬件設施的角度影響 MySQL 執行效率最主要來自於磁盤搜索、磁盤 IO 水 平、CPU
週期、內存帶寬。

根據服務器上的硬件和軟件條件進行 MySQl 優化。MySQL 優化的核心在於系統資源的分配,這不等於無限
制的給 MySQL 分配更多的資源。

在 MySQL 配置文件中最值得關注的參數:

l 改變索引緩衝區長度(key_buffer)

l 改變表長(read_buffer_size)

l 設定打開表的數目的最大值(table_cache)

l 對緩長查詢設定一個時間限制(long_query_time)

如果條件允許 ,一般 MySQL 服務器安裝在 Linux 操作系統中,而不是安裝在 FreeBSD 中。

策略: MySQL 優化需要根據業務系統的數據庫讀寫特性和服務器硬件配置,制定不同的優化方案,並且可
以根據需要部署 MySQL 的主從結構。

4.4、PHP

1、加載儘可能少的模塊;

2、安裝加速器(都是通過緩存 php 代碼預編譯的結果和數據庫結果來提高 php 代碼的執行速度)

eAccelerator

eAccelerator 是一個自由開放源碼 php 加速器,優化和動態內容緩存,提高了性能 php 腳本的緩存性能,
使得 PHP 腳本在編譯的狀態下,對服務器的開銷幾乎完全消除。

Apc

Alternative PHP Cache(APC)是 PHP 的一個免費公開的優化代碼緩存。它用來提供免費,公開並且強健
的架構來緩存和優化 PHP 的中間代碼。

memcache

memcache 是由 Danga Interactive 開發的,高性能的,分佈式的內存對象緩存系統,用於在動態應用中減少
數據庫負載,提升訪問速度。主要機制是通過在內存裡維護一個統 一的巨大的 hash 表,Memcache 能夠用
來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等

策略: 為 PHP 安裝加速器。

4.5、代理服務器(緩存服務器)
Squid Cache(簡稱為 Squid)是一個流行的自由軟件(GNU 通用公共許可證)的代理服務器和 Web 緩存服
務器。Squid 有廣泛的用途,從作為網頁服務 器的前置 cache 服務器緩存相關請求來提高 Web 服務器的速
度,到為一組人共享網絡資源而緩存萬維網,域名系統和其他網絡搜索,到通過過濾流量幫助網絡 安全,
到局域網通過代理上網。Squid 主要設計用於在 Unix 一類系統運行。

策略:安裝 Squid 反向代理服務器,能夠大幅度提高服務器效率。


5、解決之道——SiteEngine 篇

SiteEngine(網站引擎)是指針對應用系統程序的架構設計的一套程序化語言框架。目前最主流的是基於多
層架構,分級處理,模塊化設計的框架,支持 mvc 動態頁面展示,核心程序分層處理,增加靜態化引擎,

藉助 ajax 異步高效處理請求。


6、解決之道——測試篇

6.1、測試方法

6.2、測試用例

6.3、壓力測試

壓力測試是一種基本的質量保證行為,它是每個重要軟件測試工作的一部分。壓力測試的基本思路很簡單:

不是在常規條件下運行手動或自動測試,而是在計 算機數量較少或系統資源匱乏的條件下運行測試。通常
要進行壓力測試的資源包括內部內存、CPU 可用性、磁盤空間和網絡帶寬等。一般用併發來做壓力測試。
壓力測試工具:webbench,ApacheBench 等。

6.4、漏洞測試

在我們的系統中漏洞主要包括:sql 注入漏洞,xss 跨站腳本攻擊等。安全方面還包括系統軟件,如操作系統
漏洞,mysql、apache 等的漏洞,一般可以通過升級來解決。


"

1、高併發和高負載的約束條件

硬件:
部署操作系統 CentOS6.5-7.2、Windows Server 2003 Ent(企業版)Windows Server 2008 企業版 R2

Web 服務器(Apache2.4.4、Nginx1.10.1)服務器的 80 端口發佈一個 HTTP 協議的服務

PHP(5.4-5.6)

MySQL(5.6)
測試:
負載均衡設備-硬件(硬負載)(F5、梭子魚)

負載均衡軟件(軟負載)


2、解決之道——硬件篇

處理能力的提升:部署多顆 CPU,選擇多核心、具備更高運算頻率、更大高速緩存的 CPU;

處理能力的提升最直接的反應在於 Web 請求的處理效率和 PHP 程序的執行效率。

內存帶寬與容量:更大的內存帶寬和容量;

內存帶寬與容量的提升最直接的反應在於應對數據庫大量的數據交換。

磁盤搜索與 I/O 能力:選擇更高的轉速、更大的硬盤緩存、組件磁盤陣列(RAID);

磁盤搜索與 I/O 能力的提升最直接反應在於數據庫大量的查詢和讀寫以及文件的讀寫。

網絡帶寬的提升可考慮的因素包括: 更大帶寬、多線路接入、獨享帶寬;

服務器在大負載的情況下,對網絡帶寬的佔用是十分可觀的。

策略:硬件設施是應對大負載的基礎,硬件設施的投入可根據實際壓力和預算量力而行。


3、解決之道——部署篇

3.1、服務器分離

3.2、數據庫集群和庫表散列

3.3、鏡像

3.4、負載均衡

分類:

1)、DNS 輪循

2)代理服務器負載均衡

3)地址轉換網關負載均衡

4)NAT 負載均衡

5)反向代理負載均衡

6)混合型負載均衡

策略:根據硬件投入和業務需求,選擇合理的部署方案。

部署方案 1:

適用範圍:靜態內容為主體的網站和應用系統;對系統安全要求較高的網站和應用系統。

Main Server:主服務器

承載程序的主體運行壓力,處理網站或應用系統中的動態請求;

將靜態頁面推送至多個發佈服務器;

將附件文件推送至文件服務器;

安全要求較高,以靜態為主的網站,可將服務器置於內網屏蔽外網的訪問。

DB Server:數據庫服務器

承載數據庫讀寫壓力;

只與主服務器進行數據量交換,屏蔽外網訪問。

File/Video Server:文件/視頻服務器

承載系統中佔用系統資源和帶寬資源較大的數據流;

作為大附件的存儲和讀寫倉庫;

作為視頻服務器將具備視頻自動處理能力。

發佈服務器組:

只負責靜態頁面的發佈,承載絕大多數的 Web 請求;

通過 Nginx 進行負載均衡部署。

部署方案 2:

適用範圍:以動態交互內容為主體的網站或應用系統;負載壓力較大,且預算比較充足的網站或應用系統;

Web 服務器組:

Web 服務無主從關係,屬平行冗餘設計;

通過前端負載均衡設備或 Nginx 反向代理實現負載均衡;

劃分專用文件服務器/視頻服務器有效分離輕/重總線;

每臺 Web 服務器可通過 DEC 可實現連接所有數據庫,同時劃分主從。

數據庫服務器組:

相對均衡的承載數據庫讀寫壓力;

通過數據庫物理文件的映射實現多數據庫的數據同步。

共享磁盤/磁盤陣列

將用於數據物理文件的統一讀寫

用於大型附件的存儲倉庫

通過自身物理磁盤的均衡和冗餘,確保整體系統的 IO 效率和數據安全;

方案特性:

通過前端負載均衡,合理分配 Web 壓力;

通過文件/視頻服務器與常規 Web 服務器的分離,合理分配輕重數據流;

通過數據庫服務器組,合理分配數據庫 IO 壓力;

每臺 Web 服務器通常只連接一臺數據庫服務器,通過 DEC 的心跳檢測,可在極短時間內自動切換至冗餘數
據庫服務器;

磁盤陣列的引入,大幅提升系統 IO 效率的同時,極大增強了數據安全性。


4、解決之道——環境篇

4.1、操作系統

操作系統的選擇,關注點在於

•是否適應於搭建 SiteEngine 所需要的環境程序?

•系統本身佔用的資源比;

•系統安全性;

•系統是否易於操作?

策略:我們選擇 FreeBSD,而且是最小化安裝以後的 FreeBSD。

4.2、Web 服務器

Web 服務器很大一部分資源佔用來自於處理 Web 請求,通常情況下這也就是 Apache 產生的壓力,Apache
是世界使用排名第一的 Web 服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上。

在高併發連接的情況下,Nginx 是 Apache 服務器不錯的替代品。Nginx (“engine x”) 是俄羅斯人編寫的
一款高性能的 HTTP 和反向代理服務器。在國內,已經有新浪、搜狐通行證、網易新聞、網易博客、金山
逍遙網、金山愛詞霸、校內網、YUPOO 相冊、豆瓣、迅雷看看等多家網站、 頻道使用 Nginx 服務器。

Nginx 的優勢:

高併發連接:官方測試能夠支撐 5 萬併發連接,在實際生產環境中跑到 2~3 萬併發連接數。

內存消耗少:在 3 萬併發連接下,開啟的 10 個 Nginx 進程才消耗 150M 內存(15M*10=150M)。

內置的健康檢查功能:如果 Nginx Proxy 後端的某臺 Web 服務器宕機了,不會影響前端訪問。

策略:相對於老牌的 Apache,我們選擇 Lighttpd 和 Nginx 這些具有更小的資源佔用率和更高的負載能力的
web 服務器。

4.3、MySQL

MySQL 本身具備了很強的負載能力,MySQL 優化是一項很複雜的工作,因為這最終需要對系統優化的很好
理解。數據庫工作就是大量的、短時的查詢 和讀寫,除了程序開發時需要注意建立索引、提高查詢效率等
軟件開發技巧之外,從硬件設施的角度影響 MySQL 執行效率最主要來自於磁盤搜索、磁盤 IO 水 平、CPU
週期、內存帶寬。

根據服務器上的硬件和軟件條件進行 MySQl 優化。MySQL 優化的核心在於系統資源的分配,這不等於無限
制的給 MySQL 分配更多的資源。

在 MySQL 配置文件中最值得關注的參數:

l 改變索引緩衝區長度(key_buffer)

l 改變表長(read_buffer_size)

l 設定打開表的數目的最大值(table_cache)

l 對緩長查詢設定一個時間限制(long_query_time)

如果條件允許 ,一般 MySQL 服務器安裝在 Linux 操作系統中,而不是安裝在 FreeBSD 中。

策略: MySQL 優化需要根據業務系統的數據庫讀寫特性和服務器硬件配置,制定不同的優化方案,並且可
以根據需要部署 MySQL 的主從結構。

4.4、PHP

1、加載儘可能少的模塊;

2、安裝加速器(都是通過緩存 php 代碼預編譯的結果和數據庫結果來提高 php 代碼的執行速度)

eAccelerator

eAccelerator 是一個自由開放源碼 php 加速器,優化和動態內容緩存,提高了性能 php 腳本的緩存性能,
使得 PHP 腳本在編譯的狀態下,對服務器的開銷幾乎完全消除。

Apc

Alternative PHP Cache(APC)是 PHP 的一個免費公開的優化代碼緩存。它用來提供免費,公開並且強健
的架構來緩存和優化 PHP 的中間代碼。

memcache

memcache 是由 Danga Interactive 開發的,高性能的,分佈式的內存對象緩存系統,用於在動態應用中減少
數據庫負載,提升訪問速度。主要機制是通過在內存裡維護一個統 一的巨大的 hash 表,Memcache 能夠用
來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等

策略: 為 PHP 安裝加速器。

4.5、代理服務器(緩存服務器)
Squid Cache(簡稱為 Squid)是一個流行的自由軟件(GNU 通用公共許可證)的代理服務器和 Web 緩存服
務器。Squid 有廣泛的用途,從作為網頁服務 器的前置 cache 服務器緩存相關請求來提高 Web 服務器的速
度,到為一組人共享網絡資源而緩存萬維網,域名系統和其他網絡搜索,到通過過濾流量幫助網絡 安全,
到局域網通過代理上網。Squid 主要設計用於在 Unix 一類系統運行。

策略:安裝 Squid 反向代理服務器,能夠大幅度提高服務器效率。


5、解決之道——SiteEngine 篇

SiteEngine(網站引擎)是指針對應用系統程序的架構設計的一套程序化語言框架。目前最主流的是基於多
層架構,分級處理,模塊化設計的框架,支持 mvc 動態頁面展示,核心程序分層處理,增加靜態化引擎,

藉助 ajax 異步高效處理請求。


6、解決之道——測試篇

6.1、測試方法

6.2、測試用例

6.3、壓力測試

壓力測試是一種基本的質量保證行為,它是每個重要軟件測試工作的一部分。壓力測試的基本思路很簡單:

不是在常規條件下運行手動或自動測試,而是在計 算機數量較少或系統資源匱乏的條件下運行測試。通常
要進行壓力測試的資源包括內部內存、CPU 可用性、磁盤空間和網絡帶寬等。一般用併發來做壓力測試。
壓力測試工具:webbench,ApacheBench 等。

6.4、漏洞測試

在我們的系統中漏洞主要包括:sql 注入漏洞,xss 跨站腳本攻擊等。安全方面還包括系統軟件,如操作系統
漏洞,mysql、apache 等的漏洞,一般可以通過升級來解決。


卓象程序員:PHP高併發高負載系統架構

"

相關推薦

推薦中...