话题七:高并发架构

回复 收藏
在讲高并发架构之前,我先来提问几个小问题,看你是否了解,如果不了解的话先搜一下。
1. 网站日访问量多少,通常单位是pv,uv,ip等
2. 什么是并发?如何查看并发数?
3. 网站架构当中必不可少的元素:web(apache,nginx,tomcat等),db(mysql,oracle,mongodb,redis),中间件(php,jdk等),缓存(memcached,squid,varnish等),cdn
4. 集群(lvs,keepalived,haproxy,heartbeat,ldirectord等)

大家可以看一下我的网站(www.aminglinux.com/bbs/)日ip在600左右,pv在5000左右,uv800左右。不同的网站,ip,uv以及pv的比例是不同的,通常衡量一个网站的负载情况的时候,pv是最合适的,pv越高说明访问量越大,并发也会越高。我的服务器是1核1G2M带宽,跑这么多pv无压力,根据这个硬件配置,跑discuz论坛,再增加两倍也是没有问题的,但是带宽会出现瓶颈。尤其是大家晚上签到时,并发很高时带宽就不够用了。

我再来拿一个朋友的站点做个比较: 阿里云主机,4核4G5M带宽,日pv 5w,uv6k,ip6k,无压力,偶尔并发高时,带宽成为瓶颈,服务器配置够用。那这个并发到底如何衡量?

并发,就是在某一时刻的请求数,通常大家习惯按1s来算。在linux机器上,查看并发数的命令是,netstat -an |grep -ci establish,但有时候这个命令反应很慢,还可以使用 ss -an |grep -ic estab 。 真正衡量一个网站架构承载能力的并不是日pv,而是访问高峰期的并发数。国内的淘宝、12306都是典型的高并发网站,平时访问量不大,但淘宝在双11的时候,并发数可是平时的好多倍,包括12306也是一样。

那如何去衡量某个配置的机器支持多大的并发数?我们拿lnmp架构的网站来举例,当网站很小的时候,我们会把mysql和php以及nginx安装在一个机器上,默认nginx并耗费不了多少资源,大部分资源都被php和mysql占用了,而内存又大部分被php占用。拿我的论坛来说,mysql占用100M内存,单个php占用20M内存,nginx占用10M内存。而并发越大,那么php的进程数就越大,假如php并发(动态请求)为20,那么耗费内存量为: 100M+20M*20+10M=510M,高并发的时候,其实并不是只有动态请求,也有大部分的静态请求(图片、js、css等)这些请求其实耗费内存并不高,但是当并发量非常高时,他们耗费的网络资源也是不可小觑的。正常都是静态请求量高于动态,我们可以利用28原则划分。

我们来思考一个问题: 假如1核1g(不考虑带宽)支持并发100(假如我们设定静态80,动态20),而静态请求的消耗主要在nginx上,而nginx消耗内存10M也是足够的。这样算下来并发100时,消耗500多M内存,另外我们应该为系统预留200M内存出来,所以1G内存是可以支持大约160的并发的。在这里,大家一定要掌握一个原则,并发数是某个时刻内的同时请求量,在这些并发里面,其中较消耗资源的动态请求只占其中的20%(这个并不一定,不同的业务,也是不一样的,如果前端增加了cdn,那么这个比率会发生变化,静态请求会大大减少。)

mysql架构演变  http://www.aminglinux.com/bbs/thread-8025-1-1.html|
网站架构  http://www.apelearn.com/bbs/thread-8644-1-1.html

2015-04-09 11:53 举报
已邀请:
0

zjw1997

赞同来自:

沙发~~~
0

小怪兽

赞同来自:

讲的很棒 ~~
0

等不到天黑

赞同来自:

就喜欢这种怎么处理高并发的东东~~ {:4_91:}
0

君君

赞同来自:

好深奥的样子
0

渐行渐远

赞同来自:

学习,
0

jinm

赞同来自:

学习
0

zhangzihao

赞同来自:

很好
0

faith

赞同来自:

顶下
0

学习求生存 - openstack运维工程师

赞同来自:

先学习,今后肯定会用到
0

alvinnull

赞同来自:

讲的很不错
0

zhangzihao

赞同来自:

看看
0

online189

赞同来自:

学习了
0

Linuxpp

赞同来自:

good
0

GaryHuang0113 - 世上无难事,只怕有心人

赞同来自:

get

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: