高并发电子商务(WEB)项目方案

最近在思考,如何开发一个高并发的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*fromflight,citywhereflight.startcityid=city.cityidandcity.name='beijing';

m+n

select*fromflightwherestartcityid=(selectcityidfromcitywherecityname='beijing');

e索引

f数据库系统参数设置

g表中字段适当冗余

6)操作系统优化

调整linux内核参数,定制操作系统以适应特殊的高并发需求。

7)建立分布式应用或者云体系

3.集群优化

从web,service,数据库,缓存4个角度做各种集群。

相关推荐