我们的网站压力究竟在哪里

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
目前网站架构一般分成网页缓存层、负载均衡层、 WEB层和数据库层,我其实一般还会多加一层,即文件服务器层,这样我们在后面的讨论过程中,我们可以依次用这五层对网站架构来进行讨论;这里为了更具有说服力,我将用三个并发较大的生产环境来说明下,一个是我现在维护的电子商务网站(并发最大峰值2900,日PV500万左右)、我目前维护的电子广告网站(并发最大峰值1500,日PV150万左右)、以前维护的大型CDN门户广告网站(并发最大峰值5000,日PV5000万左右)。

网页缓存层
首先说下这个网页缓存层,比如CDN租赁(效果比公司自己部署Squid/Varnish要好,他们专业,价格低廉,比如快网/CC等(价格80元/M/月不到)而且覆盖的城市更多),自己架设squid/Varnish是次选。另外,很多朋友喜欢尝试自建CDN,这个是一个比较吃力不讨好的活儿,未必能达到预期目标,这块系统架构师在架设网站初期就有规划好,不要等到网站流量及压力巨大时才去规划。事实上,这一层有很多优
秀的开源软件都能胜利,比如传统的Squid Cache,另外,后起之秀Nginx和Varnish因为性能优异,越来越多的朋友尝试在自己的网站使用他们作为自己的网页缓存,事实上,Nginx已经具备Squid所拥有的Web缓存加速功能,此外,Nginx对多核CPU的利用,胜过Squid不少,现在越来越来的架构师都喜欢将Nginx同时作为“负载均衡服务器”与“Web缓存服务器”来使用,大家可以根据自己网站的情况,来决定究竟使用哪种软件来作为自己网站的网页缓存。

负载均衡层
首先说下负载均衡层,我们熟悉的硬件/软件技术有F5,LVS/HAProxy,还有Nginx,它们的性能都是非常优异的,F5/LVS现在在全世界范围内的应用,而且淘宝现在升级架构,也将LVS取代了F5,HAProxy可能大家不是特别熟悉,但HAproxy+Keepalived确实在生产环境下表现优异,强大的吞吐能力,稳定性比之
硬件过尤不及,并用淘宝也在大规模的推广使用HAProxy,有兴趣的朋友也可以关注。再说下Nginx,我是将Nginx+Keepalived架构用于了各种生产环境中的,经过长时间的线上观察,发现Nginx作为负载均衡器/反向代理也很稳定,如果并发压力过大,我们前面可以用F5/LVS作为最前端的负载均衡,而将Nginx作为七层代理,这样的效果其实也不差,所以负载均衡层的压力不能算是特别大。

WEB层
WEB层这块压力比较大的网站现在都换成了Nginx作为WEB应用服务器,事实上,它的抗并发能力确实超过了预期;我现在维护的一家门户网站,高峰期时某台Nginx应用服务器的并发达到了一万以上,但Nginx也很负责和稳定的提供服务,在实际的生产环境中,如果我们考虑到后端的数据库服务时,一万并发应该也算是一个比较大的数值了。另外,Linux集群有一个优势,就是它的高扩展性,就算我们的网站的并发有一万以上,我们后端的WEB服务是Apache,我们多加几台 Apache服务器即可,在实际的线上维护时,我们发现,高峰期间,实际上每台WEB的并发并不算是特别大,所以网站的压力在这一层我们也能通过技术手段加以克服。

文件服务器层
现在大家的生产服务器一般是使用如下四种来作为自己的文件服务器层:
1)单NFS+备份NFS作为文件服务器,这样的好处是维护方便,但存在着单点故障,需要人为手动干预;
2)DRBD+Heartbeat+NFS高可用文件服务器,维护方便,也不存在着单点故障,但随着访问量的增大,后期一样存在着压力过大的情况;
3)分布式文件系统MFS、Gluster,,MFS易用,稳定,对海量小文件很高效,而且新版的MFS解决了
Master Server存在着单点故障的问题, 国内越来越多的公司在使用MFS。事实上,分布式文件系统是解决文件服务器压力过大的最终途径,但这个同时也有隐患,网站功能越多,摊子越大,机器越多,维护起来越复杂。
4)如果大家的公司是淘宝和腾记这种巨量级的公司,可以尝试开发自己的分布式文件系统了,大家可以尝试根据自己网站的情况,来决定究竟选择哪一种软件来作为自己的文件服务器。

数据库层
数据库层的压力,我觉得网站的PV和并发上去以后,数据库这块的压力是最大的,CDN大型广告网站我们用的是Oacle RAC方案,它保证了数据的高可用性,当然了价格也是非常昂贵的(如果使用高配置的PC服务器,Oracle一般按照CPU个数收费);那么免费的 MySQL数据库,面对这种并发压力大的情况,这个时候我们应该怎么办呢?首先,我们可以在数据库加入memcached数据缓存,在实际线上使用时,我们也发现memcached功能强大,性能稳定,在数据库频繁读写,压力过大的情况下,增加一台memcached数据缓存服务器的效果能超过我们的预期。数据库的硬件方面可以考虑投入,磁盘阵列做成RAID10,如果资金充裕,磁盘可以用固定硬盘来代替SAS硬盘,毕竟数据库的压力主要来自于磁盘I/O方面。合理的设计MySQL数据库的架构,事实上,在生产环境下,一主多从、读写分离是靠谱的设计方案,从
MySQL的负载均衡我这里推荐大家使用LVS,这是因为当后面的MySQL机器超过十台时,HAProxy在这方面的性能不如LVS。如果网站的业务量过大,我们可以采用分库的方法,比如将网站的业务量分成Web、BBS、Blog等几组,每一组均采用主从架构,这样设计的话就避免了单组数据库压力过大的情况。 另外,我们还应该配合公司的MySQL DBA和开发人员,在数据库参数优化、SQL语句优化、数据切分上多做功夫,避免数据库成为我们网站的瓶颈。

希望大家能够通过以上网站的五层分解,结合自己网站的情况,了解每一层在网站设计中的作用和重要性,找出网站瓶颈加以优化,将自己的网站打造成高可用高可扩展性的网站。





本文转自 抚琴煮酒 51CTO博客,原文链接:http://blog.51cto.com/yuhongchun/612032,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
前端开发 搜索推荐 JavaScript
前端性能优化:让网站速度飙升的关键策略
在今天的数字化世界中,用户对网站速度和性能提出了越来越高的要求。前端性能优化是一项关键的任务,旨在确保您的网站在各种设备和网络条件下都能提供卓越的用户体验。本博客将深入探讨前端性能优化的概念、重要性以及一些有效的性能优化策略。
47 0
|
9月前
|
算法 前端开发 应用服务中间件
高并发环境如何有效缓解带宽压力
高并发环境如何有效缓解带宽压力
|
9月前
|
存储 开发框架 负载均衡
限流的非常规用途 - 缓解抢购压力
限流的非常规用途 - 缓解抢购压力
71 0
|
9月前
|
搜索推荐 PHP
typecho引入五秒盾,缓解服务器压力
typecho引入五秒盾,缓解服务器压力
70 0
|
运维 CDN
疫情期间,业务线上化需求突增,怎么样可以避免网络拥塞,提高资源访问速度?
因受到新型冠状病毒疫情的影响,如您需要解决业务线上化需求突增,怎么样可以避免网络拥塞,提高资源访问速度等相关问题,可参考以下解决方案进行处理
1255 0
疫情期间,业务线上化需求突增,怎么样可以避免网络拥塞,提高资源访问速度?
移动网页速度慢会导致网站流量下降
移动网页速度分数较低可能会导致流量中断 如果您的分数很低,您可以做一些事情,而无需重新设计您的网站。 您一直在做正确的事:保持您的内容新鲜,并增加您的反向链接。然而,你仍然看到自然流量的稳步下降。如果这听起来很熟悉,那么就该检查你的移动页面速度了。
935 0
|
Web App开发 安全 索引
网站流量下降的6个原因
网站流量下降的6个原因 有时网络流量会发生变化。有时是最好的。有时候不是那么好。诊断流量变化的原因并不困难。以下是如何控制网络流量以帮助其保持增长。 1.移动范式影响流量 移动正在改变搜索习惯。越来越多的企业注意到搜索模式正在发生变化。
2018 0
|
消息中间件 缓存 应用服务中间件
高并发下怎么优化能避免服务器压力过大?
用户多,不代表你服务器访问量大,访问量大不一定你服务器压力大!我们换成专业点的问题,高并发下怎么优化能避免服务器压力过大? 1,整个架构:可采用分布式架构,利用微服务架构拆分服务部署在不同的服务节点,避免单节点宕机引...
1275 0