肤浅的内容,将要用 <分布式计算和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 / 4G 的 pc server .
作为图像服务器 ,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 / 4G 的 pc server . 6台 2 dual core cpu / 4G 的 pc server 作为db server 。
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 足够。西津渡