膚淺的內容,將要用 <分布式計算和data sharding> 替代。
最近覺得一個網站架構師,應該把高性能問題搞得很好。
本文的圖形,沒有上來。需要看完整的,請下載 :西津渡如何設計軟件
小網站 , 兩臺機器 : Apache + Tomcat . 配置 load balancer ,session stick.
Apache +mod_cache 服務靜態內容。
Apache 的 worker ,250 ,重新編譯一下就好了。
在適當的優化下,支持 2000 個并發應該沒有問題。
一、
靜態內容
1.2.1 同構系統
l balancer 前端。 Haproxy (f5)
l cache , balancer 最好帶 cache
l http server : Apache / lightHttpd .
l cluster 內的http server 數量 : 1 –7
f5 可以帶多些。
l 文件系統
n 硬盤就放在各個 http server 。
方案1:自己 寫一個基于 hash 的虛擬文件系統 。
方案 2: 找一個
l 綜合性能估計
8臺2 dual core cpu /
作為圖像服務器 ,image average size 100k. http server 的response time 100ms. 足夠的網絡帶寬。
支持的concurrent session = 20000 ? 。
可以支持的小時峰值page view : 20000* 3600 =72000000. 7千萬。
二、 動態內容
1. 同構系統
a) Load balance
Haproxy (也可以貴的硬件 f5之類).
b) Cluster 內web container 的數量 ,
方案一: session replication , Tomcat + terracotta , 6 臺 。
方案二: 不用 web container session , 用 cache + db 方式實現。建一個 session 表, 自己管理狀態。
c) Tomcat 調優
Apr ,Jvm ,connector ,
d) db balance ,mysql
方案1:BalanceNg http://www.inlab.de/balance.html
方案2: 根據業務自己寫一個
e) db connection pool tunning
在生產環境,用hibernate 用 c3p0 好一點。
f) Object cache
Hibernate +Ehcache
g) 分布式cache
如果有辦法,經過適當調適,應該不錯。
h) Last-modified and eTag 一定要設
i) 綜合性能估計
Tomcat + terracotta , 13 臺機器.
6臺2 dual core cpu /
IM 歷史消息查詢,最大的表 message 100萬/日, 保存12個月數據3.6億, 足夠的網絡帶寬。 查詢的 response average time 3s.
支持的concurrent session = 6000 。
2. 硬件 failover
I don’t know.
3. 備份策略
l 文件系統
l 數據庫
4. 討論問題
n 區域鏡像 (cdn) ,(據說實際效果不一定好。)
鏡像的技術可以解決不同網絡接入商和地域帶來的用戶訪問速度差異,比如ChinaNet和EduNet之間的差異。http://www.toplee.com/blog/?p=71
n 靜態化 或者頁面cache
對于動態內容,除非內存特別少,否則沒必要。用對象cache 足夠。西津渡