網站性能是客觀的指標,可以具體體現到響應時間、吞吐量、并發數、性能計數器等技術指標。
### 1、性能測試指標
### 1.1 響應時間
???? 指應用執行一個操作需要的時間,指從發出請求到最后收到響應數據所需要的時間。如下列出了系統常用的操作響應時間表.
<table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"><p><span style="font-size:14px">操作</span></p></td><td valign="top"><p><span style="font-size:14px">響應時間</span></p></td></tr><tr><td valign="top"><p><span style="font-size:14px">打開一個網站</span></p></td><td valign="top"><p><span style="font-size:14px">幾秒</span></p></td></tr><tr><td valign="top"><p><span style="font-size:14px">數據庫查詢一條記錄(有索引)</span></p></td><td valign="top"><p><span style="font-size:14px">十幾毫秒</span></p></td></tr><tr><td valign="top"><p><span style="font-size:14px">機械磁盤一次尋址定位</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">4</span>毫秒</p></td></tr><tr><td valign="top"><p><span style="font-size:14px">從機械磁盤順序讀取<span style="font-family:Calibri">1M</span>數據</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">2</span>毫秒</p></td></tr><tr><td valign="top"><p><span style="font-size:14px">從<span style="font-family:Calibri">SSD</span>磁盤順序讀取<span style="font-family:Calibri">1M</span>數據</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">0.3</span>毫秒</p></td></tr><tr><td valign="top"><p><span style="font-size:14px">從遠程分布式換成<span style="font-family:Calibri">Redis</span>讀取一個數據</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">0.5</span>毫秒</p></td></tr><tr><td valign="top"><p><span style="font-size:14px">從內存讀取<span style="font-family:Calibri">1M</span>數據</span></p></td><td valign="top"><p><span style="font-size:14px">十幾微妙</span></p></td></tr><tr><td valign="top"><p><span style="font-family:Calibri; font-size:14px">Java</span>程序本地方法調用</p></td><td valign="top"><p><span style="font-size:14px">幾微妙</span></p></td></tr><tr><td valign="top"><p><span style="font-size:14px">網絡傳輸<span style="font-family:Calibri">2Kb</span>數據</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">1</span>微妙</p></td></tr></tbody></table>
實踐中計算響應時間通常是通過平均時間計算的平均值。
### 1.2并發數
?? 指系統能夠同時處理的請求的數目,這個數字也反映了系統的負載性能。對于網站而言,并發數指網站用戶同時提交請求的用戶數目。
?**網站系統用戶數>網站在線用戶數>網站并發用戶數**
### 1.3吞吐量
指單位時間內系統處理的請求數量,體現系統的整體處理能力。對于網站,可用“請求數/秒”或“頁面數/秒”或“訪問人數/天”或“處理業務數/小時”等來衡量。
TPS(每秒事物數)是吞吐量的一個常用量化指標。刺猬還有HPS(每秒HTTP請求數)、QPS(每秒查詢數)。
### 1.4性能計數器
指操作系統的一些數據指標如System load(系統負載),CPU使用率、內存使用率、磁盤等使用情況。
### 2、性能優化策略
根據網站分層架構,可分為Web前端性能優化、應用服務器性能優化、存儲服務器性能優化。
### 2.1 Web前端優化
#### 2.1.1 瀏覽器訪問優化
- 減少HTTP請求數,主要可通過合并CSS,JavaScript、圖片。
- 使用瀏覽器端緩存。在某些時候,靜態資源文件編寫需要及時應用到客戶端瀏覽器,這種情況下,可通過改變文件名來實現。
- 啟用頁面壓縮,文本文件的壓縮效率可達80%以上。
- CSS放在頁面最上面,JavaScript放在頁面最下面
- 減少Cookie傳輸。可以考慮使用獨立域名來發送Cookie等。
#### 2.1.2 CDN加速
CDN的本質仍然是一個緩存,只是部署在離用戶最近的服務器上,一般緩存的都是靜態資源。
#### 2.1.3 反向代理
除了能夠保護網站安全的作用以及負載均衡的作用外,反向代理還能夠提供緩存作用(動態資源)。

### 2.2 應用服務器性能優化
應用服務器就是處理網站業務的服務器,網站的業務代碼都部署在這里,主要優化手段有緩存、集群、異步等。
#### 2.2.1 分布式緩存
緩存主要用來存放哪些讀寫比很高、很少變化的數據。
分布式緩存指緩存部署在多個服務器組成的集群中,以集群方式提供緩存服務,其具體架構有兩種,一種是以JBoss Cache偽代碼的**需要更新同步的分布式緩存**,?一種是以Memcached為代表的**不互相通信的分布式緩存**。
Jboss Cache 的分布式緩存在集群中的所有服務器中保存相同的緩存數據,當某臺服務器有緩存更新的時候,會通知集群中其他機器跟新緩存數據。優點是應用程序可以?從本地快速的獲取緩存數據,但當集群規模較大的時候,緩存更新信息需要通過到集群所有機器,其代價可想而知。

大型網站需要的緩存數據一般都很大,可能會有TB的內存占用,這時候就的使用Memcached,是一中互不通信的架構,每臺存儲的緩存數據可以不一樣。

#### 2.2.2 異步操作
為了改善網站的擴展性,可以使用消息隊列將調用異步化。
#### 2.2.3 使用集群
在網站高并發訪問的情況下,使用負載均衡技術為一個應用構建一個由多臺服務器組成的集群,將并發訪問請求分發到多臺服務器上處理。?

#### 2.2.4 代碼優化
代碼優化主要涉及多線程、資源復用(對象池或單例)、數據結構和垃圾回收。
### 2.3 存儲性能優化
可以考慮使用分布式存儲、openfiler、磁盤陣列、HDFS(Hadoop)。