电商项目_秒杀_架构升级

1. 秒杀当前架构设计

  • nginx节点和订单服务都可以方便的扩容(增加机器)
  • redis扩容需则需要考虑架构设计

当前架构面临的痛点:

        秒杀系统redis是单节点(主从)部署,读redis时并发量会成为瓶颈。

        所以考虑将增加redis从节点个数。秒杀系统为提交读库存的性能,将redis从节点和nginx节点部署在一起的, 如果升级成redis集群, nginx读哪个从节点呢?-》考虑将nginx也水平扩展。

(nginx可以扩容原因:商品详情页的静态页面发布到OpenResty上, 那么就可以考虑将不同商品的页面发布到不同的openResty上)

2. redis增加从节点 + nginx水平扩展

  • 1个redis主节点n个redis从节点
  • 不同的商品详情页发布到不同的nginx

        当前架构面临的痛点:

        秒杀商品比较多时, 单个主redis节点更新库存、主redis节点同步从节点数据,会成为性能瓶颈。所以考虑将Redis升级成集群。

3. Redis垂直拆分

  • nginx读取的redis从节点,就可能不在一个机器了。
  • Redis 的集群化部署,多个 SKU 的数据,会分散到各个 Redis 节点当中,就可以解决 Redis 数据量太⼤的问题。并且,基于 Redis 集群的⽅式,Redis 服务的可⽤性也得到了提⾼。我们可以通过再加⼊哨兵机制等⽅式,保证少量 Redis 节点挂了后,整个 Redis 集群不会出现问题。        

当前架构面临痛点:

  • 采⽤集群部署 Redis 后,因为⼤部分的 Redis 客户端都是通过连接池实现的,此时Redis 的连接数就会逐渐成为瓶颈。
  • 无法确定Redis中的数据分布,也就⽆法保证每个Nginx只读取本地的 Redis

       Redis连接池:取决于具体的客户端实现,客户端可以配置针对单节点的连接池,也可以配置集群的连接池。

通过中间件减少连接数

  1. 使⽤TwemProxy于 Redis 之间建⽴单链接交互,并通过Twemproxy实现分⽚逻辑。这样我们就可以⽔平扩展出更多的Twemproxy来增加连接数。
  2. Twemproxy实例众多,应⽤维护、配置困难,需要在这之上做负载均衡。⽐如,通过LVA/HaProxy 实现VIP(虚拟 IP),就可以做到节点切换对应⽤透明、故障⾃动转移。还可以通过实现内⽹ DNS 来做其负载均衡。

4. 库存预分配方案

        解决 无法保证Nginx只读本地 Redis的问题。同时也解决了集群redis线程池的问题。

        在很多互联⽹企业中,不会直接使⽤ Redis 的集群架构,⽽是搭建多个 Redis 节点。并通过库存预分配的⽅式,⾃⾏控制 Redis 中的数据分布。

优点:

  • 每个应用都有独立的库存数据,大大降低了并发度,另外,各个应用扣减库存的速度不一样,一定程度防止了羊毛党
  • 不同商品详情页配置到不同的OpenResty上,前端引导用户进入不同的静态页面 
  • 一定程度解决热点商品问题,因为每个二级redis中可以配置多个SKU的活动信息

缺点:

  • 前端引导用户进入不同的静态页面 ,但是如果想要多个服务承担同一个商品的秒杀服务, 前端如何进行合理的引导,需要将引导与库存进行沟通
  • 服务出现问题,库存很难回收:二级redis是单点部署(主从),如果redis在活动过程崩溃,基于这个redis的库存数据无法回滚,从而影响整体库存管理。(纯粹单节点,活动数据可以通过日志恢复,后续的返厂活动进行补救)
  • 各个服务之间无法沟通,导致有库存,但是用户秒杀不到的问题。 APP1有库存,APP2无库存,但是APP2进来的秒杀请求却无法下单。抢购多个商品也是类似问题。

5. 动态库存方案

解决不同二级redis服务之间不沟通的问题。

  1. 独立出库存分配服务
  2. 每个二级redis缓存配置个阈值,当库存低于域阈值时,通知库存分配服务,库存分配服务再访问各个Redis, 对库存进行统一分配
    • 优先从一级redis分配,这样速度更快
    • 一级redis扣减完成后,再协调二级redis进行动态库存分配
  3. 当秒杀活动快结束时或者库存快全部售完时,所以二级redis的库存都低于一个临界值,可以将所有库存回收,统一分配给某一个二级Redis。

存在问题:

  • 前端引导用户进入不同的静态页面 ,但是如果想要多个服务承担同一个商品的秒杀服务, 前端如何进行合理的引导,需要将引导与库存进行沟通
  • 服务出现问题,库存很难回收:二级redis是单点部署(主从),如果redis在活动过程崩溃,基于这个redis的库存数据无法回滚,从而影响整体库存管理。(纯粹单节点,活动数据可以通过日志恢复,后续的返厂活动进行补救)

6. 秒杀与直播带货

相同点:

  • 流量来的非常突然, 瞬间巨大流量
  • 热点数据
  • 都要处理三高问题

不同点:

  • 直播带货允许超卖
  • 直播带货持续时间更长

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CodeBuddy IDE发布:编程新时代的颠覆者?

开场:编程界的 “新风暴” 来袭 你能想象,不用敲一行代码就能开发软件吗?这个曾经只存在于科幻电影里的场景,如今已经成为现实!就在最近,编程界迎来了一场 “新风暴”——CodeBuddy IDE 重磅发布&#xff…

深度分析Java类加载机制

Java 的类加载机制是其实现平台无关性、安全性和动态性的核心基石。它不仅仅是简单地将 .class 文件加载到内存中,而是一个精巧、可扩展、遵循特定规则的生命周期管理过程。以下是对其深度分析: 一、核心概念与生命周期 一个类型(Class 或 In…

神经网络实战案例:用户情感分析模型

在当今数字化时代,用户评论和反馈成为企业了解产品满意度的重要渠道。本项目将通过神经网络构建一个情感分析模型,自动识别用户评论中的情感倾向。我们将使用真实的产品评论数据,从数据预处理到模型部署,完整展示神经网络在NLP领域…

now能减少mysql的压力吗

是否用数据库的 NOW() 能减少 MySQL 的压力?​答案是否定的——使用 NOW() 不仅不会降低压力,反而可能略微增加 MySQL 的负载。以下是详细分析:🔍 性能对比:NOW() vs. Java 传参​指标​​Java 传参 (e.g., new Date()…

数据结构01:链表

数据结构 链表 链表和数组的区别 1. 存储方式 数组: 元素在内存中连续存储,占用一块连续的内存空间元素的地址可以通过索引计算(基地址 索引 元素大小)大小固定,在创建时需要指定容量 链表: 元素&#xf…

【Java学习|黑马笔记|Day21】IO流|缓冲流,转换流,序列化流,反序列化流,打印流,解压缩流,常用工具包相关用法及练习

标题【Java学习|黑马笔记|Day20】 今天看的是黑马程序员的《Java从入门到起飞》下部的95-118节,笔记包含IO流中的字节、字符缓冲流,转换流,序列化流反序列化流,打印流,解压缩流,常用工具包相关用法及练习 …

API网关原理与使用场景详解

一、API网关核心原理 1. 架构定位 #mermaid-svg-hpDCWfqoiLcVvTzq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hpDCWfqoiLcVvTzq .error-icon{fill:#552222;}#mermaid-svg-hpDCWfqoiLcVvTzq .error-text{fill:#5…

OSPF路由协议——上

OSPF路由协议 RIP的不足 以跳数评估的路由并非最优路径如果RTA选择s0/0传输,传输需时会大大缩短为3s 最大跳数为16跳,导致网络尺度小RIP协议限制网络直径不能超过16跳,并且16跳为不可达。 收敛速度慢 RIP 定期路由更新 更新计时器&#xff1a…

(LeetCode 面试经典 150 题) 219. 存在重复元素 II (哈希表)

题目&#xff1a;219. 存在重复元素 II 思路&#xff1a;哈希表&#xff0c;时间复杂度0(n)。 哈希表记录每个数最新的下标&#xff0c;遇到符合要求的返回true即可。 C版本&#xff1a; class Solution { public:bool containsNearbyDuplicate(vector<int>& nums,…

Cookies 详解及其与 Session 的协同工作

Cookies 详解及其与 Session 的协同工作 一、Cookies 的本质与作用 1. 什么是 Cookies&#xff1f; Cookies 是由服务器发送到用户浏览器并存储在本地的小型文本文件。核心特性&#xff1a; 存储位置&#xff1a;客户端浏览器数据形式&#xff1a;键值对字符串&#xff08;最大…

DeepSeek Janus Pro本地部署与调用

step1、Janus模型下载与项目部署 创建文件夹autodl-tmp https://github.com/deepseek-ai/Janus?tabreadme-ov-file# janusflow 查看是否安装了git&#xff0c;没有安装的话安装一下&#xff0c;或者是直接github上下载&#xff0c;上传到服务器&#xff0c;然后解压 git --v…

【Elasticsearch】BM25的discount_overlaps参数

discount_overlaps 是 Elasticsearch/Lucene 相似度模型&#xff08;Similarity&#xff09;里的一个布尔参数&#xff0c;用来决定&#xff1a;> 在计算文档长度归一化因子&#xff08;norm&#xff09;时&#xff0c;是否忽略“重叠 token”&#xff08;即位置增量 positi…

Linux | LVS--Linux虚拟服务器知识点(上)

一. 集群与分布式1.1 系统性能扩展方式当系统面临性能瓶颈时&#xff0c;通常有以下两种主流扩展思路&#xff1a;Scale Up&#xff08;向上扩展&#xff09;&#xff1a;通过增强单台服务器的硬件配置来提升性能&#xff0c;这种方式简单直接&#xff0c;但受限于硬件物理极限…

【Linux-云原生-笔记】keepalived相关

一、概念Keepalived 是一个用 C 语言编写的、轻量级的高可用性和负载均衡解决方案软件。 它的主要目标是在基于 Linux 的系统上提供简单而强大的故障转移功能&#xff0c;并可以结合 Linux Virtual Server 提供负载均衡。1、Keepalived 主要提供两大功能&#xff1a;高可用性&a…

计算机网络:概述层---计算机网络的组成和功能

&#x1f310; 计算机网络基础全景梳理&#xff1a;组成、功能与核心机制 &#x1f4c5; 更新时间&#xff1a;2025年7月21日 &#x1f3f7;️ 标签&#xff1a;计算机网络 | 网络组成 | 分布式 | 负载均衡 | 资源共享 | 网络可靠性 | 计网基础 文章目录前言一、组成1.从组成部…

Linux中scp命令传输文件到服务器报错

上传本地文件到Linux服务器使用scp命令报错解决办法使用scp命令报错 Could not resolve hostname e: Name or service not known 解决办法 不使用登录服务器的工具传输&#xff0c;打开本地cmd&#xff0c;使用scp命令传输即可。 scp E:\dcm-admin.jar root127.0.0.1:/

历史数据分析——国药现代

医药板块走势分析: 从月线级别来看 2008年11月到2021年2月,月线上走出了两个震荡中枢的月线级别2085-20349的上涨段; 2021年2月到2024年9月,月线上走出了20349-6702的下跌段; 目前月线级别放巨量,总体还在震荡区间内,后续还有震荡和上涨的概率。 从周线级别来看 从…

#Linux内存管理# 在一个播放系统中同时打开几十个不同的高清视频文件,发现播放有些卡顿,打开视频文件是用mmap函数,请简单分析原因。

在播放系统中同时使用mmap打开几十个高清视频文件出现卡顿&#xff0c;主要原因如下&#xff1a;1. 内存映射&#xff08;mmap&#xff09;的缺页中断开销按需加载机制&#xff1a;mmap将文件映射到虚拟地址空间&#xff0c;但实际数据加载由“缺页中断&#xff08;Page Fault&…

AI黑科技:GAN如何生成逼真人脸

GAN的概念 GAN(Generative Adversarial Network,生成对抗网络)是一种深度学习模型,由生成器(Generator)和判别器(Discriminator)两部分组成。生成器负责生成 synthetic data(如假图像、文本等),判别器则试图区分生成数据和真实数据。两者通过对抗训练不断优化,最终…

FireFox一些设置

firefox后台打开新的链接&#xff0c;例如中键打开一个链接 地址栏输入about:config 找到下面三项&#xff0c;全部设为true browser.tabs.loadInBackground browser.tabs.loadDivertedInBackground browser.tabs.loadBookmarksInBackground 参考&#xff1a;FireFox/chrome…