最近在思考,如何开发一个高并发的web应用。主要是个人总结的经验和方法论,欢迎大家扔石头砸我并积极的讨论。
1.性能分析
分析高并发的瓶颈在哪里,根据笔者的经验瓶颈主要出现在CPU和数据库上。其次是网卡和网络的负载。在cpu负载100%的情况下,会拒绝受理请求。数据库的瓶颈在写入的情况下居多。
2.架构
1)作业调度
目前笔者了解的方案是quartz的集群方案,采用数据库作为锁来控制定时任务执行的唯一性,避免集群里定时任务被执行2次。
2)session
在web项目中,做集群比较难的地方就是session复制。所以我们一般情况下禁用session,采用cookie来取代。
3)web服务器优化
一般静态资源和请求的分发,我们通常采用apache和nginx来处理。目前尤其推荐ngnix。他的性能比apache高级个数量级。后端的jsp/servlet容器,一般会改变他的运行模式。比如tomcat有bio,nio,apr三种模式。最理想的情况下,是采用apr模式才增加吞吐量。
4)缓存
单机缓存ecache
分布式缓存memcache
5)数据库
a 分表:表名区分(tab1,tab2,tab3),逻辑分区(根据算法)
b 读写分离
c 不能有外键
d 语句优化,例子如下:
m*n
select * from flight,city where flight.startcityid=city.cityid and city.name='beijing';
m + n
select * from flight where startcityid = (select cityid from city where cityname='beijing');
e 索引
f 数据库系统参数设置
g 表中字段适当冗余
6)操作系统优化
调整linux内核参数,定制操作系统以适应特殊的高并发需求。
7)建立分布式应用或者云体系
3.集群优化
从web,service,数据库,缓存4个角度做各种集群。
1 楼
zsg6221827
2011-08-01
学习中,借鉴借鉴、 新手还是很多东西需要摸透啊、
2 楼
85977328
2011-08-01
zsg6221827 写道
学习中,借鉴借鉴、 新手还是很多东西需要摸透啊、
恩,欢迎积极讨论,能给出点建议就更好了。这样互相都可以提高
3 楼
grandboy
2011-08-01
架构设计要考虑到具体业务特点,所谓的“技巧”有时是良药,有时却成了毒药了。
4 楼
pujia12345
2011-08-01
想知道有多高?百度这样高?数据有电信这样大?
5 楼
85977328
2011-08-02
grandboy 写道
架构设计要考虑到具体业务特点,所谓的“技巧”有时是良药,有时却成了毒药了。
对,只是讨论基本的方法论。不涉及具体的业务
6 楼
85977328
2011-08-02
pujia12345 写道
想知道有多高?百度这样高?数据有电信这样大?
就是如何分析一个高并发WEB应用的思路和步骤。想归纳一下
7 楼
WAMING5
2011-08-24
引用
在web项目中,做集群比较难的地方就是session复制。所以我们一般情况下禁用session,采用cookie来取代
,如果客户端禁用了cookie怎么处理呢
8 楼
jeffsang
2011-09-24
非结构化数据的集群/分布式方案补充:
1. 文件系统(user upload):NAS存储/NFS,读写分离,分发(rsync)
2. lucene/compass等索引文件的分布式支持
1. 文件系统(user upload):NAS存储/NFS,读写分离,分发(rsync)
2. lucene/compass等索引文件的分布式支持
9 楼
85977328
2011-09-26
WAMING5 写道
引用
在web项目中,做集群比较难的地方就是session复制。所以我们一般情况下禁用session,采用cookie来取代
,如果客户端禁用了cookie怎么处理呢我们可以进行URL重写
现在 REST架构,建议我们使用无状态的会话,即:任何一台服务器,都可以相应客户端的请求。