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

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

时间:2023-03-12 22:33:04浏览次数:27  
标签: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/6116287

相关文章

  • 架构EBI、DDD、端口适配、洋葱、整洁
    领域驱动架构及其演变史(EBI、DDD、端口适配、洋葱、整洁)一、引子聊架构总离不开“领域驱动架构”,大多能聊到DDD(Domain-DrivenDesign),实际上早期思想EBI架构1992年就诞......
  • 分层测试以获得对代码的信心
    令我震惊的是,很少有开发人员了解综合测试。我经常收到开发人员发来的电子邮件,担心他们缺乏测试经验。说实话,他们应该担心!测试是没有商量余地的。顶级公司——以及我工作......
  • mvc架构
    dao层dao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此dao层的设计设计dao层的接口在Spring的配置文件中定义此接口的实现类在模块中调用此接口来进......
  • AI编译器及TVM整体架构
    虽然之前也依据tvm官方文档写过一篇关于TVM架构的博客,但总感觉属于一种身在此山中的感觉(偏向于TVM实现的各个模块),并没有一览众山小的即视感(对框架的整体理解)。因此,今......
  • 网站架构总结图
     网站的高性能架构        ......
  • 大型网站核心架构要素
     0、网站架构五要素当前互联网架构设计主要包括五要素:性能、高可用、伸缩性、拓展性、安全性,以下篇幅将对这五要素做具体或者简略的介绍。一、性能篇性能主......
  • 【云计算】阿里云云计算架构师ACE成长路线v2
    1、缘起ACA好几个月前看到了架构师就想考,一直没机会。暑假放假后,本来想从ACA学起的,结果意外的机会开始乱搞,一星期就拿到了ACP的证书。ACE架构师似乎就没那么简单了,可能要......
  • 系统架构设计师考试知识点整理-4:死锁问题、银行家算法、管程与线程
    死锁问题1.死锁是指多个进程之间相互等待对方的资源,而在得到对方资源之前又不释放自己的资源所造成的循环等待的现象。2.死锁产生的根本原因在于系统提供的资源少于并发进程......
  • 软件体系架构安全性战术论文
    软件体系架构安全性战术刘柏(石家庄铁道大学 河北省石家庄市 050000;)摘 要:随着软件体系结构在软件工程中的研究与应用越来越广泛,以及学术界和产业界对软件安全性认识的......
  • java三层架构
    (68条消息)三层架构、面向接口编程_一个很懒的人的博客-CSDN博客......