首页 > 其他分享 >电商系统架构演进

电商系统架构演进

时间:2023-10-14 09:11:40浏览次数:39  
标签:应用服务器 架构 演进 数据库 连接数 架构图 电商 单元

具体以电子商务网站为例, 展示web应用的架构演变过程。

1.0时代

图片

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

2.0时代

图片

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

  • 数据库的最大连接数是有限的,比如当前数据库的连接数设置8000,如果每个应用服务器与数据库的初始连接数设置40,那么200台web服务器是极限, 并且连接数太多后,数据库的读写压力增大,耗时增加
  • 当单表数量过大时,对该表的操作耗时会增加,索引优化也是缓兵之计

这时,根据业务特点,如果读写比差距不大,并且对数据一致性要求不是很高的情况下,数据库可以采用主从方式进行读写分离的方案,并且引入缓存机制来抗读流量。如果读写比差距很大或者对数据一致性要求高时,就不适合用读写分离方案,需要考虑业务的垂直拆分,这时期的系统架构图如下:

3.0时代

3.1 读写分离

图片

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

4.0 业务垂直拆分

图片

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

4.1 使用CDN来缓存信息

图片

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

4.2分库分表架构

图片

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

4.3 同城双机房

图片

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

  • 随着应用服务器的增加,虽然是分库分表,但每增加一台应用服务器,都会与每个分库建立连接,比如数据库连接池默认连接数是40,而如果mysql数据库的最大连接数是8000的话,那么200台应用服务器就是极限。
  • 当应用的量级太大后,单个城市的机器、电、带宽等资源无法满足业务的持续增长。这时就需要考虑SET化架构,也就是单元化架构,大体思路就是将一些核心系统拆成多个中心,每个中心成为一个单元,流量会按照一定的规则分配给每个单元,这样每个单元只负责处理自己的流量就可以了。每个单元要尽量自包含、高内聚。这是从整体层面将流量分而治之的思路。这是单元化后的机构简图如下:

5.0 单元化

图片

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

参考文章

  • 文章主要参考自 李智慧的 《大型网站技术架构》
  • https://blog.csdn.net/caoyuanyenang/article/details/86943397
  • https://www.cnblogs.com/lfs2640666960/p/9021205.html
  • http://www.hollischuang.com/archives/728

 

作者|顶尖架构师栈

标签:应用服务器,架构,演进,数据库,连接数,架构图,电商,单元
From: https://www.cnblogs.com/88223100/p/Evolution-of-E-commerce-System-Architecture.html

相关文章

  • 软件开发架构
    软件开发架构网络编程:我们要编写一款基于网络传输的软件,你现在写的项目都不是基于网络的,比如ATM#举个案例:""" 我们现在以ATM为例,你现在写的ATM别人是不能够访问的,只能你自己用,但是,这不是目的,目的是我们要写一款ATM,然后让所有人都能够访问. 如果想让别人下载使用我们的软......
  • C#软件架构设计原则
    软件架构设计原则学习设计原则是学习设计模式的基础。在实际的开发过程中,并不是一定要求所有的代码都遵循设计原则,而是要综合考虑人力、成本、时间、质量,不刻意追求完美,要在适当的场景遵循设计原则。这体现的是一种平衡取舍,可以帮助我们设计出更加优雅的代码结构。分别用一句话......
  • Openstack架构介绍
    一、Openstack介绍OpenStack是一系列开源工具(或开源项目)的组合,主要使用池化虚拟资源来构建和管理私有云及公共云。其中的六个项目主要负责处理核心云计算服务,包括计算、网络、存储、身份和镜像服务。还有另外十多个可选项目,用户可把它们捆绑打包,用来创建独特、可部署的云架构。二......
  • 第八章、web前端架构师
    目录十六、编辑器服务端基础API开发1、技术方案设计和基本功能开发2、技术方案设计3、接口设计4、RestfulAPIvsGraphQL5、数据库设计6、server架构设计7、技术方案设计8、基本功能开发9、登录功能10、用户信息接口11、作品管理接口12、模板接口十七、编辑器服务端调用第三方服......
  • 最近在对接电商供应链,说说开放平台API接口
    B2B电商开放平台的设计需要从以下几面去思考:开放平台API接口的设计,主要是从功能需求的角度,设计满足业务需求的接口及对应的字段;平台与商家之间信息的对接,对接的方法有哪些?对接过程中需要可能会遇到什么问题;同步开关及权限的设计,处理信息自动同步和手动设置之间的矛盾。一、开放平台......
  • 如何基于three.js(webgl)引擎架构,研发一套通过配置就能自动生成的3D机房系统
    序:这几年观察下来,大部分做物联网三维可视化解决方案的企业或个人,基本都绕不开3D机房。包括前面也讲过这样的案例《使用webgl(three.js)创建自动化抽象化3D机房,3D机房模块详细介绍(抽象版一)》 《 使用webgl(three.js)创建科技版3D机房,3D机房微模块详细介绍(升级版三)——......
  • 聊聊企业级消息推送的架构设计(001)
    最近有小伙伴拿到了一线互联网企业如阿里、网易、有赞、希音、百度、网易、滴滴的面试资格,遇到一几个很重要的面试题:企业级消息通知系统有哪些需求?如何满足?企业级消息通知系统,该如何做架构设计?所以,这里今天给大家做一下系统化、体系化的梳理,使得大家可以充分展示一下大家雄厚......
  • cerbos 参考部署架构
    cerbos官方提供了几种部署模式,很值得学习参考,这样才能保证我们业务系统的可靠稳定参考部署模式集中式模式此模式结合负载均衡器,可以部署多cerbos示例,然后共享策略定义,应用通过lb提供的地址进行连接 sidecar模式比较适合容器运行的场景,每个业务pod会有一个独立运行......
  • 直播带货系统源码解析:搭建你自己的电商直播APP
    通过电商直播,企业和个体经营者能够与潜在客户实时互动,展示产品,提供实时解答,以及鼓励销售。正因如此,一个强大的直播带货系统源码是必不可少的。本文将深入探讨如何使用直播带货系统源码来搭建你自己的电商直播APP。第一部分:理解直播带货系统电商直播是一种创新的销售策略,它结合了传......
  • 前台端分离 技术架构
    1、技术架构  2、前后端分离   ......