原文地址:http://toutiao.com/news/6232654162220286465/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=3167618386&utm_medium=toutiao_ioscss
目前网站架构通常分为网页缓存层、负载均衡层、Web层、数据库层、文件服务器层。咱们能够依次用这五层对网站架构进行讨论,为了加强说服力,我将用以下三个并发较大的生产环境来讲明。html
电子商务网站(并发最大峰值2900,日PV500万左右)前端
电子广告网站(并发最大峰值1500,日PV150万左右)ios
大型CDN门户广告网站(并发最大峰值5000,日PV5000万左右)数据库
1.网页缓存层后端
首先说网页缓存层,好比CDN租凭,其效果比公司本身部署Squid/Varnish要好,它们专业、价格低廉(好比:快网、蓝讯、阿里、腾讯)并且覆盖的城市更多,本身架设Squid/Varnish是次选。缓存
不少朋友喜欢尝试自建CDN,这是一项吃力不讨好的工做,未必能达到预期的目标,系统架构师应该在架设网站初期就规划好,不要等到网站流量及压力巨大时才去规划。事实上,这一层有不少优秀的开源软件都能胜任,好比传统的Squid Cache。另外,愈来愈多的朋友喜欢尝试在本身的网站是用Nginx和Varnish做为本身的网页缓存。事实上,Nginx已经具有Squid所拥有的Web缓存加速功能。此外,Nginx对多核CPU的利用赛过Squid,如今愈来愈多的架构师都喜欢将Nginx同时做为”负载均衡服务器”与”Web缓存服务器”来使用,你们能够根据本身的状况,来决定究竟使用那种软件做为网站的网页缓存。安全
2.负载均衡层服务器
咱们熟悉的硬件/软件技术有F五、LVS/HAProxy,还有Nginx,它们的性能都是很是优异的,如今F5/LVS在全世界范围内应用,并且淘宝如今升级架构,也用了LVS取代了F5。架构
HAProxy可能你们不是特别熟悉,单HAProxy+Keepalived确实在生产环境下表现优异,强大的吞吐能力,稳定性能比之硬件过犹不及,而且淘宝也在大规模地推广使用HAProxy,有兴趣的朋友也能够关注。
再来聊聊Nginx,我已经将Nginx+Keepalived架构用于各类生产环境,通过长期的线上观察,发现Nginx做为负载均衡器/反向代理也很稳定,若是兵发压力过大,咱们前面能够用F5/LVS做为最前端的负载均衡,而将Nginx做为七层代理,这样的效果其实也不差,因此说负载层压力不算特别大。
3.Web层
Web层压力比较大的网站如今都换成了Nginx做为Web应用服务器,事实上,它的抗并发能力确实超过了预期。我如今维护的一家门户网站,高峰期时某台Nginx应用服务器的并发达到了一万以上,可是Nginx也很稳定地提供服务。在实际的生产环境中,若是咱们考虑到后端的数据库服务时,一万兵法应该也算是一个比较大的数值了。
另外,Linux集群有一个优点,就是它的高扩展性,就算网站的并发有一万以上,后端的Web服务是Nginx,咱们多加几台Nginx服务器便可。在实际的线上维护时发现,高峰期间,实际上每台Web的并发不算是特别大,因此咱们也能经过技术手段对这一层的网站的压力加以克服。
4.文件服务器层
如今你们生产服务器通常是使用以下四种做为本身的文件服务器层:
一、单NFS+备份NFS做为文件服务器,这样作的好处是维护方便,但存在单点故障,须要人手动干预。
二、DRBD+HeartBeat+NFS高可用文件服务器,维护方便,也不存在单点故障,单随着访问量的增大,后期同样存在压力过大的状况。
三、分布式文件系统MFS、Glustr。MFS易用、稳定、对海量小文件很高效,并且新版的MFS解决了MasterServer存在单点故障的问题,国内愈来愈多的公司在使用MFS。事实上,分布式文件系统是解决文件服务器压力过大的最终途径,但也存在隐患,网站功能越多,摊子越大,机器越多,维护起来越复杂。
四、若是是淘宝和腾讯这种巨量级的公司,能够尝试开发本身的分布式文件系统了。你们能够尝试根据本身网站的状况,来决定究竟选择哪种如那件做为本身的文件服务器。
数据库层的压力,我以为网站的PV和并发上去之后,数据库这块的压力是最大的,CND大型广告网站用的是Oracle RAC方案,它保证了数据的搞可用性,固然了价格也是很是昂贵的(若是使用高配置的PC服务器,Oracle通常按照CPU个数收费);那么字啊使用免费的MySQL数据时,面对这种并发压力打的状况,咱们应该怎么办?
首先,能够在数据库中加入memcached数据缓存,在实际线上使用时,发现memcached功能强大、性能稳定,在数据流频繁读写,压力过大的状况下,增长一台memcached数据库缓存服务器的效果能超过咱们的预期。
数据库的硬件方面能够考虑投入磁盘队列作成RAID10,若是资金充裕,磁盘能够用固定硬盘来代替SAS硬盘,毕竟数据库的压力主要来自磁盘I/O方面。
合理的设计MySQL数据库的架构,事实上,在生产环境下,一主多从、读写分离是靠谱的设计方案,从MySQL的负载均衡推荐你们使用LVS,这是由于当后面的MySQL机器超过十台时,HAProxy在这方面的性能不如LVS。
若是网站的业务量过大,能够采用分库的方法,好比将网站的业务量分红Web、BBS、Blog等几组,每一组均采用主从还够,这样的设计避免了单组数据库压力过大的状况。
另外咱们应该还配合公司的MySQL、DBA和开发人员,在数据库参数优化、SQL语句优化、数据切分上多下功夫,避免数据库成为网站的瓶颈。
后续我会发布如何优化MySQL,从硬件–安装方式–配置文件优化-SQL优化-status状态优化–慢查询优化–表优化-MySQL高可用的扩展。
网站架构关注方向小结
一、咱们的网站放在IDC机房内,首选考虑的就应该是如何防止DDOS/CC攻击。DDOS攻击虽然没什么技术含量,但真正攻击过来仍是很让人烦躁的。在搭建网站或系统时,咱们应该尽量地了解和熟悉各类防火墙的技术指标参数,为客户提供性价比最好的防火墙方案也是保证整套系统或网站成功的因素之一。
二、业务逻辑设计要合理,尤为是程序代码层的相关设计,若是程序应用架构和业务实现不够优化,一个原本很简单的实现却绕了不少弯路才实现,那么多强的硬件也没有用。
三、也许是受张宴先生的影响,如今愈来愈多的朋友把注意力放在Nginx上了。其实Apache的抗并发能力并不弱。在生产环境下,若是咱们的网站不是广告型网站、门户型网站或游戏型网站,2000并发已是一个很惊人的数字。另外这个仅仅是一台Apache的并发,一个中等规模的网站,后端至少会有3~4台Apache的Web应用程序,因此,所有加起来咱们的网站差很少能够顶住上万的并发,上万的并发量对网站根本没有什么大的影响。固然,若是换做Nginx做为Web应用服务器更没问题了。另外,就算并发量很是大,咱们最前端的F5/LVS仍是顶得住的,无非是在后端多加几台Web应用服务器。因此说,并发量大不可能成为Web应用服务器的瓶颈。
四、DRBD+HeartBeat+NFS文件服务器在初期没什么压力,但随着网站的用户数和流量愈来愈大,它可能会感受有些顶不住了,特别是用户频繁访问图片文件时。咱们在公司内部也测试郭Google的分布式文件系统,可是一直没敢用于生产环境中,最后仍是决定采用Nginx做为中层代理,增长Squid反向代理服务器集群的方法来解决文件服务器的压力问题。另外,若是资金充裕,最前端也应该租售CDN用于网站加速。
五、将Nginx做为中层代理使用是一件性价比很是高的事情。若是担忧单点Nginx故障,咱们能够设置3台以上的Nginx负载均衡器,而它们的load balance可让F5/LVS来作。Nginx在这层能够利用其强大的正则处理能力很完美地处理客户端对静态文件的访问,好比将html、jpg、png、css等交给后端的Squid/varnish集群处理,冬天的PHP/JSP访问请求交给后端的PHP/Tomcat集群服务器处理,动静分离,最大化地发挥Nginx做为负载均衡器/反向代理的优点。
若是没有硬件的F5 Big-Ip设备,咱们也能够用软件LVS来实现,这样成本会至关低。Nginx则利用其强大的正则功能,并根据URL或客户请求文件的后缀名来作动静分离,或者轮训不一样的Squid/Varnish反向代理群组。
六、上线的项目在后期不管怎么优化或架构,最后其压力最大的确定是MySQL数据库,尤为是那些动态网站。咱们在维护时也发现,MySQL数据库在频繁地读写,如何优化MySQL数据库及设计高性能高可用的MySQL数据库架构一致是咱们关注和研究的方向,我也但愿你们在工做中注意这个问题。
七、系统或网站的构建、运维和调试并不仅是一我的的事情,它是整个团队合做努力的结果,须要整个团队的开发人员、系统工程师和DBA及测试人员共同努力,要写出安全、效率高、优美的代码,须要花费开发人员大量的心血。
做者:徐亮伟
原文:http://www.xuliangwei.com/xubusi/188.html
快来测测你的身价,点击阅读原文开始测试↓