图解电商系统的架构演进

具体以商城为例, 展示web端应用的架构演变过程。

特点:
1、所有的功能集成在一个项目工程中。
2、所有的功能打在一个war包部署到服务器。
3、通过部署应用集群和数据库集群来提高系统的性能。

优点
1、项目架构简单,前期开发成本低,周期短,小型项目的首选。
2、开发效率高,模块之间交互采用本地方法调用。
3、容易部署,运维成本小,直接打包为一个完整的包,拷贝到web容器的某个目录下即可运行。
4、容易测试:IDE都是为开发单个应用设计的、容易测试——在本地就可以启动完整的系统。

缺点:
1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
2、版本迭代速度逐渐变慢,修改一个地方就要将整个应用全部编译、部署、启动,开发及测试周期过长。
3、无法按需伸缩,通过集群的方式来实现水平扩展,无法针对某业务按需伸缩。

总结:一个web项目里包含了所有的模块,一个数据库里包含了所需要的所有表,当网站访问量增加时,首先遇到瓶颈的是应用服务器连接数,比如tomcat连接数不能无限增加,2.线程数上限受进程内存大小、3.CPU内核数等因素影响,当线程数到达一定数时候,线程上下文的切换对性能的损耗会越来越严重,响应会变慢,通过增加web应用服务器方式的横向扩展对架构影响最小,这时候架构会变成下面这样:

2、分布式架构

针对单体架构的不足,为了适应大型项目的开发需求,许多公司将一个单体系统按业务垂直拆分为若干系统系统之间通过网络交互来完成用户的业务处理每个系统可分布式部署,这种架构称为分布式架构。

如下图所示:

特点:
1、按业务垂直拆分成一个一个的单体系统,此架构也称为垂直架构。
2、系统与系统之间的存在数据冗余,耦合性较大,如上图中三个项目都存在客户信息。
3、系统之间的接口多为实现数据同步,如上图中三个项目要同步客户信息。

优点:
1、通过垂直拆分,每个子系统变成小型系统,功能简单,前期开发成本低,周期短。
2、每个子系统可按需伸缩。
3、每个子系统可采用不同的技术。

缺点:
1、子系统之间存在数据冗余、功能冗余,耦合性高。
2、按需伸缩粒度不够,对同一个子系统中的不同的业务无法实现,比如订单管理和用户管理。

这时候随着网站访问量继续增加,继续增加应用服务器数量后发现数据库成了瓶颈,而数据库的最主要的瓶颈体现在两方面:

  • 数据库的最大连接数是有限的,比如当前数据库的连接数设置10000,如果每个应用服务器与数据库的初始连接数设置50,那么200台web服务器是极限, 并且连接数太多后,数据库的读写压力增大,耗时增加

  • 当单表数量过大时,对该表的操作耗时会增加,索引优化也是缓兵之计

总结:这时,根据业务特点,如果读写比差距不大,并且对数据一致性要求不是很高的情况下,数据库可以采用主从方式进行读写分离的方案,并且引入缓存机制来抗读流量。

如果读写比差距很大或者对数据一致性要求高时,就不适合用读写分离方案,需要考虑业务的垂直拆分,这时期的系统架构图如下

3、SOA架构

SOA是一种面向服务的架构,基于分布式架构它将不同业务功能按服务进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。

特点:
1、基于SOA的架构思想,将重复公用的功能抽取为组件,以服务的方式向各各系统提供服务。
2、各个系统与服务之间采用webservice、rpc等方式进行通信。
3、ESB企业服务总线作为系统与服务之间通信的桥梁。

优点:
1、将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性。
2、可以针对不同服务的特点按需伸缩。
3、采用ESB减少系统中的接口耦合。

缺点:
1、系统与服务的界限模糊,会导致抽取的服务的粒度过大,系统与服务之间耦合性高。
2、虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。

总结:这时候仍然是垂直架构,所有业务集中在一个项目里。项目维护、快速迭代问题会越来越严重,单个模块的开发都需要发布整个项目,项目稳定性也受到很大挑战,这是需要考虑业务的垂直拆分,需要将一些大的模块单独拆出来,这时候的架构图如下:

这时候为了进一步提升用户体验,加速用户的网站访问速度,会使用CDN来缓存信息,用户会访问最近的CDN节点来提升访问速度。

4、微服务架构

基于SOA架构的思想,为了满足移动互联网对大型项目及多客户端的需求,对服务层进行细粒度的拆分,所拆分的每个服务只完成某个特定的业务功能比如订单服务只实现订单相关的业务,用户服务实现用户管理相关的业务等
等,服务的粒度很小,所以称为微服务架构

特点:
1、服务层按业务拆分为一个一个的微服务。
2、微服务的职责单一。
3、微服务之间采用RESTful、RPC等轻量级协议传输。
4、有利于采用前后端分离架构。

优点:
1、服务拆分粒度更细,有利于资源重复利用,提高开发效率。
2、可以更加精准的制定每个服务的优化方案,按需伸缩。
3、适用于互联网时代,产品迭代周期更短。

缺点:
1、开发的复杂性增加,因为一个业务流程需要多个微服务通过网络交互来完成。
2、微服务过多,服务治理成本高,不利于系统维护。

总结:随着业务量增大,一些核心系统数据库单表数量达到几千万甚至亿级,这时候对该表的数据操作效率会大大降低,并且虽然有缓存来抗读的压力,但是对于大量的写操作和一些缓存miss的流量到达一定量时,单库的负荷也会到达极限,这时候需要将表拆分,一般直接采用分库分表,因为只做分表的话,单个库的连接瓶颈仍然无法解决。分库分表后的架构如下:

随着流量的进一步增大,这时候系统仍然会有瓶颈出现,以订单系统为例:单个机房的机器是有限的,不能一直新增下去,并且基于容灾的考虑,一般采用同城双机房的方式,机房之间用专线链接,同城跨机房质检的延时在几毫秒,此时的架构图如下:

由于数据库主库只能是在一个机房,所以仍然会有一半的数据库访问是跨机房的,虽然延时只有几毫秒,但是一个调用链里的数据库访问太多后,这个延时也会积少成多。其次这个架构还是没能解决数据库连接数瓶颈问题

  • 随着应用服务器的增加,虽然是分库分表,但每增加一台应用服务器,都会与每个分库建立连接,比如数据库连接池默认连接数是50,而如果mysql数据库的最大连接数是10000的话,那么200台应用服务器就是极限。

  • 当应用的量级太大后,单个的机器、电、带宽等资源无法满足业务的持续增长。这时就需要考虑SET化架构,也就是单元化架构,大体思路就是将一些核心系统拆成多个中心,每个中心成为一个单元,流量会按照一定的规则分配给每个单元,这样每个单元只负责处理自己的流量就可以了。每个单元要尽量自包含、高内聚。这是从整体层面将流量分而治之的思路。

  • 综合这些架构模式的特点和优点我们会发现,微服务架构的这些特点非常符合一种开发模式:敏捷开发,下面介绍一些开发模型:

  • 上面的架构图,流量从接入层按照路由规则(比如以用户ID来路由)路由到不同单元,每个单元内都是高内聚,包含了核心系统,数据层面的分片逻辑是与接入层路有逻辑一致,也解决了数据库连接的瓶颈问题,但是一些跨单元的调用是无法避免的,同时也有些无法拆分的业务需要放在中心单元,供所有其他单元调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/126465.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试了8位00后,我是真的有被震惊到~

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

深度学习(生成式模型)——Classifier Guidance Diffusion

文章目录 前言问题建模条件扩散模型的前向过程条件扩散模型的反向过程条件扩散模型的训练目标 前言 几乎所有的生成式模型,发展到后期都需要引入"控制"的概念,可控制的生成式模型才能更好应用于实际场景。本文将总结《Diffusion Models Beat …

OAuth2.0双令牌

OAuth 2.0是一种基于令牌的身份验证和授权协议,它允许用户授权第三方应用程序访问他们的资源,而不必共享他们的凭据。 在OAuth 2.0中,通常会使用两种类型的令牌:访问令牌和刷新令牌。访问令牌是用于访问资源的令牌,可…

STM32笔记—DMA

目录 一、DMA简介 二、DMA主要特性 三、DMA框图 3.1 DMA处理 3.2 仲裁器 3.3 DMA通道 扩展: 断言: 枚举: 3.4 可编程的数据传输宽度、对齐方式和数据大小端 3.5 DMA请求映像 四、DMA基本结构 4.1 DMA_Init配置 4.2 实现DMAADC扫描模式 实现要求…

从黑白电视到《孤注一掷》,聊聊冰山下的高清技术

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 联合制作 / RTE开发者社区 电影《孤注一掷》的制作,为什么需要借助 AI 实现高清化?高清与实时高清&#…

程序员35岁之后如何规划?建议收藏!

文章目录 一、年纪大能不能进大厂?二、为什么说35是危机? 1.精力衰退2.脑力衰退3.知识/技术迭代 三、年龄大的程序员有哪些出路? 1.技术管理2.创业3.技术外包4.做老师5.做自媒体6.写书 四、结语 我自己今年已有44了,从2021年开始…

Unity Mirror学习(一) SyncVars特性使用

官网中所说的网络对象,指的是挂了 NetworkIdentity组件的对象 官网中所说的玩家对象,指的是NetworkManager脚本上的PlayerPrefab预制体 这个概念对阅读官网文档很重要,我刚开始并不理解,走了歪路 SyncVars(同步变量&a…

使用Plsql+oracle client 连接 Oracle数据库

2011年入职老东家X煤集团的时候,在csnd上写了一篇blog,题目叫“什么是ERP”,从此跳入DBA了这个烂坑,目前公司的数据库一部分是Oracle,另一部分是MySQL的,少量MSSQL,还需要捡起来一部分&#xff…

2023.11.7: OpenAI DevDay总结

New Model:ChatGPT4.0 turbo 更长的context:支持长达128000个tokens的context 更好的控制方案: 更有利于API调用JSON Mode Function calling Reproducible outputs 通过一个seed使得模型的回答总是保持一致 Better Knowledge 支持知识检索…

vue-cal 使用教程

目录 0. 介绍及效果展示 1.vue2环境安装 2.页面引入 3.使用 4.效果图 0. 介绍及效果展示 vue-cal 组件比较灵活,可以随意切换年、月、周、日、时间历图,放几张截图看下效果 1.vue2环境安装 vue3直接可以看本文最下方的API,有详解 npm …

【Unity ShaderGraph】| 物体靠近时局部溶解,根据坐标控制溶解的位置【文末送书】

前言 【Unity ShaderGraph】| 物体靠近时局部溶解,根据坐标控制溶解的位置一、效果展示二、根据坐标控制溶解的位置,物体靠近局部溶解三、应用实例👑评论区抽奖送书 前言 本文将使用ShaderGraph制作一个根据坐标控制溶解的位置,物…

scitb包1.5版本发布—增加了统计值的结果和自动判断数据是否正态分布的功能

目前,本人写的scitb包1.5版本已经正式在R语言官方CRAN上线,scitb包是一个为生成专业化统计表格而生的R包。目前只能绘制基线表一。 可以使用以下代码安装 install.packages("scitb")安装过旧版本的从新安装一次就可以升级了 scitb包1.5版本修…

虚幻C++基础 day3

常见的游戏机制 Actor机关门 创建一个Actor类,添加两个静态网格与一个触发器 UBoxComponentUStaticMeshComponent 头文件: #include “Components/BoxComponent.h”#include “Components/StaticMeshComponent.h” TriggerDoor.h // Fill out your …

建造者模式(Builder Pattern)

建造者模式(Builder Pattern) 1、类型2、定义3、UML图4、四个角色5、代码6、应用场景 1、类型 创建型 解释:设计模式的创建性类型是一种软件设计模式,它专注于对象的创建机制,帮助我们更加灵活地创建对象实例。创建性…

小程序如何部署SSL证书

微信小程序开发前提必须拥有一本SSL证书,办理SSL证书之前确保好指定的微信小程序开发接口使用的域名,如果没有域名的提前申请好,并且到国内服务器提供商去办理备案。 了解微信小程序使用SSL证书的作用,包括以下三个方面&#xff1…

了解web框架

Web框架前戏 Web框架本质 web框架本质上可以看成是一个功能强大的socket服务端,用户的浏览器可以看成是拥有可视化界面的socket客户端。两者通过网络请求实现数据交互,学者们也可以从架构层面上先简单的将Web框架看做是对前端、数据库的全方位整合 纯手撸web框架 …

【k8s-1】基于docker Desktop一键式搭建k8s环境

在docker desktop中一键启动k8s环境很简单。 下面介绍如何启动dashboard,dashboard仪表盘是新手学习k8s至关重要的一个工具。 1、配置控制台 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml 2、开…

阿里云服务器u1和e实例有什么区别?哪个比较好?

阿里云服务器u1和e实例有什么区别?哪个比较好?通用算力型u1比较好,因为u1服务器是独享型云服务器,e实例是共享型。 阿里云服务器ECS经济型e实例和通用算力型u1实例有什么区别?如何选择?ECS经济型e实例是共…

解决 win11 vmware 中centos 网络不能访问外网

解决 win11 vmware 中centos 网络不能访问外网 1、进入win11 高级设置,找到centos 虚拟机使用的网卡 2、看网卡的其他属性 3、按照红圈部分,配置成一样的就行 4、进入到虚拟机配置中,配置成如图一样的NAT模式 5、再进入编辑 -》虚拟网络编辑…

U盘插在电脑上显示要格式化磁盘怎么办

U盘是一种便携式存储设备,广泛应用于各种场合。然而,有时候我们可能会遇到一些问题,比如将U盘插入电脑后显示要格式化磁盘,这通常意味着U盘的分区出现了问题或者U盘的文件系统已经损坏。这种情况下,我们应该如何解决呢…