首页 > 其他分享 >解析大型电商网站系统架构分层设计

解析大型电商网站系统架构分层设计

时间:2023-02-17 22:01:40浏览次数:35  
标签:Web 负载 缓存 架构 网站 Nginx 分层 服务器 电商

DevOps人员需要了解公司的网站架构设计,如果牵涉了具体的高流量高并发的场景,那么,此时也需要提供实际的解决方案,所以了解网站的分层系统架构设计是非常有必要的。网站架构一般分成网页缓存层、负载均衡层、Web服务器层、文件服务器层及数据库层这五层。

1、网页缓存层

网页缓存层,比如CDN的租赁,专业CDN公司的Cache缓存服务都是自研的(底层开发一般是C语言),还需要区分磁盘缓存或内存缓存,另外还有针对小文件所做的优化,其效果比公司自行部署Squid、Varnish更好、更专业,Bind View也需要精准细分,而且价格相当低廉,所覆盖的边缘节点也比较多,所以这里推荐采用CDN租赁的方式。

很多企业喜欢尝试自建CDN,这是一个比较吃力不讨好的活儿,未必能够达到预期目标,关于这点,架构师在架设网站初期就应该规划好,而不要等到网站流量及压力巨大时才去规划。

2、负载均衡层

建议将负载均衡分成两级来处理,一级是流量四层分发,二级是应用层面七层转发(即业务层面)。首先我们可以通过LVS或HAProxy将流量转发给二层负载均衡(一般为Nginx),即实现了流量的负载均衡,此处可以使用如轮询、权重等调度算法来实现负载的转发;然后二层负载均衡会根据请求特征再将请求分发出去。此处为什么要将负载均衡分为两层呢?

1)第一层负载均衡应该是无状态的,方便水平扩容。我们可以在这一层实现流量分组(内网和外网隔离、爬虫和非爬虫流量隔离)、内容缓存、请求头过滤、故障切换(机房故障切换到其他机房)、限流、防火墙等一些通用型功能,无状态设计,可以水平扩容。

2)二层Nginx负载均衡可以实现业务逻辑,或者反向代理到如Tomcat,这一层的Nginx与业务相关联,可以实现业务的一些通用逻辑。如果可能的话,这一层也应尽量设计成无状态,以方便水平扩容。

3、Web服务器层

Web服务器层压力比较大,大的网站现在都选择将Nginx作为Web主要应用服务器,事实上,Nginx在抗并发能力和稳定性方面确实超过了预期。另外,Linux集群还有一个优势,那就是它的高扩展性,特别是水平(横向)扩展。就算网站的并发连接数有10万以上,也无非是多加Web机器(廉价的PC Server也是可行的),或者通过Nginx+lua这种高性能的Web应用服务器来承担压力。在进行实际的线上维护时发现在高峰期间,实际上每台Web的并发并不算特别大,所以网站的压力在这一层也能通过技术手段加以克服。

4、文件服务器层

现在生产服务器使用的一般是如下的方案。

  • 单NFS作为文件服务器,这样做的好处是维护方便,但存在单点故障的问题,NFS机器出现故障时需要人为手动干预。
  • NFS分组,虽然这样可以分摊压力,但这样做也会存在单点故障的问题,NFS机器出现故障时需要人为手动干预。
  • DRBD+Heartbeat+NFS高可用文件服务器,维护方便,也不存在单点故障的问题,但随着访问量的增大,后期一样也会存在压力过大的情况。
  • 采用分布式文件系统。

对于静态内容,如CSS、JS、HTML还有图片文件,可以通过租赁CDN的方式来进行处理,将图片服务器独立出来,并分配独立域名。

5、数据库层

数据库的压力,网站的PV、UV、QPS和并发连接数增加以后,数据库这块的压力就是最大的,归根结底还是磁盘的I/O压力大。

首先应在业务逻辑上将数据分离。很多读写频繁的业务数据,比如ip list和频繁读取的配置等信息都没有必要使用MySQL数据库来保存,我们完全可以利用redis分布式缓存来保存这些数据,这样读取速度也能得到保证,后端MySQL数据库的压力也可以得到缓解。

电子商务网站一般的场景包括签到、商品的订单系统等,这些在技术层面很容易实现;另外还有一种常见的场景—秒抢红包,像这种用户在瞬间涌入产生高并发请求的场景,这个时候我们需要引入消息中间件,例如RabbitMQ,此时RabbitMQ机器数量将视实际的应用而定。

场景中的红包定时领取是一个高并发的业务,活动用户会在到点的时间大量涌入,DB(即后端的MySQL层,这次简写为DB)瞬间就会受到一记暴击,支撑不住就会宕机,然后影响整个业务。

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

标签:Web,负载,缓存,架构,网站,Nginx,分层,服务器,电商
From: https://blog.51cto.com/key3feng/6064536

相关文章

  • 5分钟了解系统架构设计(7)
    最近梳理了之前学习的架构设计相关的一些课程学习总结,将其整理成了一个大纲脑图,以每篇5分钟系列展现出来,希望对你有所帮助。高可用,是近年来IT应用系统的常见需求。本篇,我......
  • 架构漫谈阅读笔记
    这周,我读了资深架构师王概凯执笔的《架构漫谈》,让对架构一无所知的我对架构初步有了一些认识。首先,在开篇王先生就阐述什么是架构。其实每个人心中的架构都是不同理解的,没......
  • 架构漫谈读后感
    读架构漫谈有感今天,在老师的推荐下,读了架构漫谈,《架构漫谈》是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构、怎样做好......
  • 组合数学课程笔记(一):框架构建
    组合数学的严格定义是非常困难的,其设计的内容广泛,分类困难,体系性较弱。不过,我们可以把组合数学按照问题、工具、对象三种方法进行分类,例如图论,就是按照研究对象分出的内容......
  • 【大数据架构之旅】1 深入理解 CDC
    CDC=ChangeDataCapture,是一种用以掌控数据变化的软件架构(或者再通俗一点:技术思路)。具体架构/思想背后会有不同的工程实现思路,本文我们就来深入理解一下。更新历史2......
  • 计数系统架构设计(转)
    本文主要节选和总结自沈剑大佬的计数系统架构实践一次搞定|架构师之路和文章的评论,略有删改一、问题描述很多业务都有“计数”需求,以微博为例:微博首页的个人中心部分......
  • 软件架构师“从入门到入土”
    什么是架构?软件总体的结构,软件的设计图。为什么要出现架构?一个软件太大了,一个人的心力很难完全构建出来,以至于需要很长时间或者多人合作开发。一个人的话,一开始自己对......
  • 多模态学习有哪些架构?MBZUAI最新《多模态表示学习》综述,29页详述多模态表示学习的演化
    前言本文回顾了深度多模态学习方法的演变,并讨论了使主干对各种下游任务具有鲁棒性所需的预训练的类型和目标。本文转载自专知 欢迎关注公众号CV技术指南,专注于计......
  • 架构师成长之路之Linux Bridge+VLAN == 虚拟交换机
    总结:(1)物理交换机存在多个VLAN,每个VLAN拥有多个端口。同一VLAN端口之间可以交换转发,不同VLAN端口之间隔离。所以交换机包含两层功能:交换与隔离。(2)Linux的VLAN设备......
  • 【开源需求】C++多线程消息分发架构
    项目【gi_messager】开源项目:https://girakoo.com/联系方式:[email protected]需求简述在多线程环境中,为每个线程提供独立的消息队列MessageLoop。注:主线程默认自动......