【转载】架构师谈五层网站架构

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
传统型负载均衡 CLB,每月750个小时 15LCU
简介:

原文地址: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_ios

目前网站架构一般分为网页缓存层、负载均衡层、Web层、数据库层、文件服务器层。我们可以依次用这五层对网站架构进行讨论,为了增强说服力,我将用如下三个并发较大的生产环境来说明。

  • 电子商务网站(并发最大峰值2900,日PV500万左右)

  • 电子广告网站(并发最大峰值1500,日PV150万左右)

  • 大型CDN门户广告网站(并发最大峰值5000,日PV5000万左右)

1.网页缓存层

首先说网页缓存层,比如CDN租凭,其效果比公司自己部署Squid/Varnish要好,它们专业、价格低廉(比如:快网、蓝讯、阿里、腾讯)而且覆盖的城市更多,自己架设Squid/Varnish是次选。

很多朋友喜欢尝试自建CDN,这是一项吃力不讨好的工作,未必能达到预期的目标,系统架构师应该在架设网站初期就规划好,不要等到网站流量及压力巨大时才去规划。事实上,这一层有很多优秀的开源软件都能胜任,比如传统的Squid Cache。另外,越来越多的朋友喜欢尝试在自己的网站是用Nginx和Varnish作为自己的网页缓存。事实上,Nginx已经具备Squid所拥有的Web缓存加速功能。此外,Nginx对多核CPU的利用胜过Squid,现在越来越多的架构师都喜欢将Nginx同时作为”负载均衡服务器”与”Web缓存服务器”来使用,大家可以根据自己的情况,来决定究竟使用那种软件作为网站的网页缓存。

2.负载均衡层

我们熟悉的硬件/软件技术有F5、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.文件服务器层

现在大家生产服务器一般是使用如下四种作为自己的文件服务器层:

1、单NFS+备份NFS作为文件服务器,这样做的好处是维护方便,但存在单点故障,需要人手动干预。

2、DRBD+HeartBeat+NFS高可用文件服务器,维护方便,也不存在单点故障,单随着访问量的增大,后期一样存在压力过大的情况。

3、分布式文件系统MFS、Glustr。MFS易用、稳定、对海量小文件很高效,而且新版的MFS解决了MasterServer存在单点故障的问题,国内越来越多的公司在使用MFS。事实上,分布式文件系统是解决文件服务器压力过大的最终途径,但也存在隐患,网站功能越多,摊子越大,机器越多,维护起来越复杂。

4、如果是淘宝和腾讯这种巨量级的公司,可以尝试开发自己的分布式文件系统了。大家可以尝试根据自己网站的情况,来决定究竟选择哪一种如那件作为自己的文件服务器。

5.数据库层

数据库层的压力,我觉得网站的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高可用的扩展。

网站架构关注方向小结

1、我们的网站放在IDC机房内,首选考虑的就应该是如何防止DDOS/CC攻击。DDOS攻击虽然没什么技术含量,但真正攻击过来还是很让人烦躁的。在搭建网站或系统时,我们应该尽可能地了解和熟悉各种防火墙的技术指标参数,为客户提供性价比最好的防火墙方案也是保证整套系统或网站成功的因素之一。

2、业务逻辑设计要合理,尤其是程序代码层的相关设计,如果程序应用架构和业务实现不够优化,一个本来很简单的实现却绕了很多弯路才实现,那么多强的硬件也没有用。

3、也许是受张宴先生的影响,现在越来越多的朋友把注意力放在Nginx上了。其实Apache的抗并发能力并不弱。在生产环境下,如果我们的网站不是广告型网站、门户型网站或游戏型网站,2000并发已经是一个很惊人的数字。另外这个仅仅是一台Apache的并发,一个中等规模的网站,后端至少会有3~4台Apache的Web应用程序,所以,全部加起来我们的网站差不多可以顶住上万的并发,上万的并发量对网站根本没有什么大的影响。当然,如果换作Nginx作为Web应用服务器更没问题了。另外,就算并发量非常大,我们最前端的F5/LVS还是顶得住的,无非是在后端多加几台Web应用服务器。所以说,并发量大不可能成为Web应用服务器的瓶颈。

4、DRBD+HeartBeat+NFS文件服务器在初期没什么压力,但随着网站的用户数和流量越来越大,它可能会感觉有些顶不住了,特别是用户频繁访问图片文件时。我们在公司内部也测试郭Google的分布式文件系统,但是一直没敢用于生产环境中,最后还是决定采用Nginx作为中层代理,增加Squid反向代理服务器集群的方法来解决文件服务器的压力问题。另外,如果资金充裕,最前端也应该租售CDN用于网站加速。

5、将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反向代理群组。

6、上线的项目在后期无论怎么优化或架构,最后其压力最大的肯定是MySQL数据库,尤其是那些动态网站。我们在维护时也发现,MySQL数据库在频繁地读写,如何优化MySQL数据库及设计高性能高可用的MySQL数据库架构一致是我们关注和研究的方向,我也希望大家在工作中注意这个问题。

7、系统或网站的构建、运维和调试并不只是一个人的事情,它是整个团队合作努力的结果,需要整个团队的开发人员、系统工程师和DBA及测试人员共同努力,要写出安全、效率高、优美的代码,需要花费开发人员大量的心血。

作者:徐亮伟

原文:http://www.xuliangwei.com/xubusi/188.html


    本文转自深蓝医生博客园博客,原文链接:http://www.cnblogs.com/bluedoctor/p/5084616.html,如需转载请自行联系原作者



相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
6月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
76 0
|
存储 人工智能 架构师
ChatGPT 与软件架构 (4) - 架构师提示工程指南
ChatGPT 与软件架构 (4) - 架构师提示工程指南
138 0
|
3月前
|
存储 架构师 测试技术
架构之道——人人都是架构师
本文的探讨和编写主要围绕三个方面:架构是什么?架构师要解决的问题有哪些?解决这些问题的方法论是什么?最后作者希望人人都能具备架构师思维。
|
6月前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
132 5
|
24天前
|
缓存 NoSQL Java
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
高并发下的秒杀系统设计是一个复杂的挑战,涉及多个关键技术点。40岁老架构师尼恩在其读者交流群中分享了16个关键架构要点,帮助解决高并发下的秒杀问题,如每秒上万次下单请求的处理、超卖问题的解决等。这些要点包括业务架构设计、流量控制、异步处理、缓存策略、限流熔断、分布式锁、消息队列、数据一致性、存储架构等多个方面。尼恩还提供了详细的实战案例和代码示例,帮助读者全面理解和掌握秒杀系统的架构设计。此外,他还分享了《尼恩Java面试宝典》等资源,帮助读者在面试中脱颖而出。如果你对高并发秒杀系统感兴趣,可以关注尼恩的技术自由圈,获取更多详细资料。
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
|
24天前
|
缓存 NoSQL Java
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
6月前
|
Dubbo Java 应用服务中间件
阿里巴巴资深架构师深度解析微服务架构设计之SpringCloud+Dubbo
软件架构是一个包含各种组织的系统组织,这些组件包括Web服务器,应用服务器,数据库,存储,通讯层),它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。
|
4月前
|
存储 架构师 测试技术
架构之道:人人都是架构师(2)
每个业务系统的开发者都应该具备一定的架构师素养,架构师的重要职责不仅仅是做决策,更重要的是提升团队的整体能力。一个好的架构师应该聚焦于业务和系统,定义问题和结果,设计系统、模块和代码,同时也需要解决跨域问题,确定团队间的边界,制定规范,统一语言,并创建一个让每个人都能成长为架构师的环境,以促进团队的敏捷性。本文旨在探讨如何培养架构思维,并阐述了架构师的职责、能力模型、方法论,以及如何成为架构师。
140 10
|
4月前
|
存储 运维 架构师
架构之道:人人都是架构师(1)
架构之道:人人都是架构师
173 8
|
6月前
|
运维 架构师 安全
架构师养成手册:架构师职责
小米是一名热情的技术爱好者和架构师,他探讨了架构师的角色和职责。主要涉及六个方面:顶层设计,需与企业战略目标对齐,制定架构原则;规划可适应未来变化的企业架构,分析需求并关注技术趋势;全局视角制定可落地的架构方案,兼顾全局与局部优化;技术选型与难题解决,选择合适技术并解决实际问题;关注方案与代码的广度与深度,确保宏观设计与微观实现的统一;同时,架构师还需具备管理能力,包括团队协作、资源调配和风险管理。
190 11
下一篇
无影云桌面