商城系统难点

一、商品秒杀

1.秒杀系统的两个问题:

高并发和超卖

2.高并发问题的解决办法:

高并发就是同一时间,请求量极大,如果全都访问数据库的话,数据库压力过大,查询会变慢甚至会导致服务挂掉,我们采用的是加入了缓存,使用redis作为缓存服务器,这样可以极大的降低数据库压力

3.redis造成的缓存雪崩问题:

缓存雪崩就是缓存服务器挂了,请求瞬间都打到了数据库里,这里要保证redis服务高可用,采用的方式是搭建集群的方式

4.redis造成的缓存击穿问题:

缓存击穿问题就是有用户恶意地访问一些数据库不存在的数据,数据不存在则不会往缓存里放,这个时候可以对空数据进行缓存,等他再次访问的时候,我们把这个空数据返回给他,缓存时间要设置短一些,避免有数据后长时间无法获取;或者对短时间内多次访问一些不存在的数据,我们可以禁用他的IP

5.超卖问题的解决方式:

提前把秒杀商品的库存数量缓存到redis中,如果有用户下单,先在redis里进行预扣减库存,当用户支付在扣减数据库里的库存,如果一定时间内没有支付再还原库存;还可以使用RocketMQ发送创建订单的消息,对它们进行排队,将前面的订单创建成功,后面的创建失败

6.为什么要使用RocketMQ?

它是远程消息队列,支持事务,可以保障消息不丢失

7.还了解过哪些其它的消息队列?

kafka,rabbitmq等

二、分布式事务

1.什么是分布式事务?为什么要使用分布式事务?

分布式事务就是在分布式系统使用事务。当设计了多个服务的数据存储,这个时候每个服务的变化都要成功才算整个业务流的成功,只要有一个失败了,则整体算做失败,这时候就需要使用分布式事务来解决数据的ACID特性

2.项目中哪里用到了分布式事务?

在创建订单扣减库存的时候使用了分布式事务,因为订单表和商品表在不同的微服务模块中

3.用了什么分布式框架?

阿里巴巴的seata分布式框架

4.分布式事务和分布式锁的区别:

分布式事务是解决流程化的问题,分布式锁是解决资源占用问题

5.什么是数据一致性?

(1)数据更新成功返回客户端之后,所有节点的数据保持一致,没有中间状态

(2)强一致性:时刻保证数据一致性

(3)最终一致性:一段时间后保证数据一致性

(4)允许存在部分数据不一致:弱数据一致性

6.什么是cap定理?

web服务无法同时满足cap定理

c一致性(Consistency):更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,不能存在中间状态。

a 可用性(Availability):系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果,

p 分区容错性(Partition tolerance):即使出现单个组件无法可用,操作依然可以完成

7.分布式事务有哪些解决方案?

(1)2pc:二阶段提交,强一致性设计,引入一个事务协调者的角色来协调管理各参与者(也可称之为各本地资源)的提交和回滚,二阶段分别指的是准备和提交两个阶段。同步阻塞,存在长事务风险。
                                          准备提交阶段-提交阶段

(2)3pc:在2pc之后多加入预提交阶段,和超时。预提交阶段主要是询问事务参与者是否能正常有条件的执行。
                                 准备提交阶段-预提交阶段-提交阶段

(3)Tcc:2PC 和 3PC 都是数据库层面的,而 TCC 是业务层面的分布式事务,需要自己实现Try-Confirm-Cancel三个方法,存在代码入侵业务紧耦合问题。

Try 指的是预留,即资源的预留和锁定

Confirm 指的是确认操作,这一步其实就是真正的执行了

Cancel指的是撤销操作,可以理解为把预留阶段的动作撤销了

8.什么是消息事务?

RocketMQ很好支持消息事务,本地执行事务前发送消息,本地事务失败则丢弃消息,本地执行成功,消息订阅方执行本地事务,成功之后消费消息。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

RTX4060安装nvidia显卡驱动

文章目录 nvidia drivers下载删除原有nvidia驱动安装nvidia驱动如果报错Unable to find the kernel source tree for the currently runningbuilding kernel modules解决方法 报错成功安装!!! nvidia drivers下载 https://www.nvidia.cn/geforce/drivers/#:~:textNVIDIA%20GeF…

Python从入门到高手5.1节-Python简单数据类型

目录 5.1.1 理解数据类型 5.1.2 Python中的数据类型 5.1.3 Python简单数据类型 5.1.4 特殊的空类型 5.1.5 Python变量的类型 5.1.6 广州又开始变热 5.1.1 理解数据类型 数据类型是根据数据本身的性质和特征来对数据进行分类,例如奇数与偶数就是一种数据类型。…

去噪扩散模型

Denoising Diffusion Probabilistic Models 图像扩散模型是一种生成模型,它基于概率扩散过程来生成新的图像。 核心步骤包括:(1)前向扩散过程;(2)逆向扩散过程 前向扩散过程(正向过…

No.4 笔记 | 探索网络安全:揭开Web世界的隐秘防线

在这个数字时代,网络安全无处不在。了解Web安全的基本知识,不仅能保护我们自己,也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界,掌握那些必备的安全知识! 1. 客户端与WEB应用安全 前端漏洞&#xff1…

Spring Boot框架下的大学生就业招聘平台

5系统详细实现 5.1 用户模块的实现 5.1.1 求职信息管理 大学生就业招聘系统的用户可以管理自己的求职信息,可以对自己的求职信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 求职信息管理界面 5.1.2 首页 用户登录可以在首页看到招聘信息展示也一些求职…

STM32中断——外部中断

目录 一、概述 二、外部中断(Extern Interrupt简称EXTI) 三、实例-对射式红外传感器 1、配置中断: 2 、完整代码 一、概述 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当…

【图论】树剖(上):重链剖分

一、前置知识清单 深度优先搜索DFS 点我复习图的存储 复习链接敬请期待树状数组 点我复习 二、树剖简介 树剖(树链剖分),是一种把树划分成链的算法,该算法分为重链剖分和长链剖分。 本文仅讨论重链剖分,长链剖分目前…

MySQL联合索引、索引下推Demo

1.联合索引 测试SQL语句如下:表test中共有4个字段(id, a, b, c),id为主键 drop table test;#建表 create table test(id bigint primary key auto_increment,a int,b int,c int )#表中插入数据 insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,…

算法修炼之路之滑动窗口

目录 一:滑动窗口的认识及模板 二:LeetcodeOJ练习 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 一:滑动窗口的认识及模板 这里先通过一道题来引出滑动窗口 LeetCode 209 长度最小的子数组 画图分析&…

aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图

aws(学习笔记第一课) 使用AWS CLI 学习内容: 使用AWS CLI配置密钥对创建ec2 server使用drawio(vscode插件)进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台,可以提供ec2,vpc,SNS以及clo…

使用 Python 遍历文件夹

要解决这个问题,使用 Python 的标准库可以很好地完成。我们要做的是遍历目录树,找到所有的 text 文件,读取内容,处理空行和空格,并将处理后的内容合并到一个新的文件中。 整体思路: 遍历子目录&#xff1…

2.3MyBatis——插件机制

2.3MyBatis——插件机制 1.基本用法2.原理探究2.1加载过程2.2执行过程2.2.1 插件的执行点2.2.2 SQL执行的几个阶段2.2.3 如何梳理出执行流程 插件机制是一款优秀框架不可或缺的组成部分,比如spring、dubbo,还有我们要聊的Mybatis等等。所谓插件&#xff…

vSAN02:容错、存储策略、文件服务、快照与备份、iSCSI

目录 vSAN容错条带化存储策略1. 创建新策略2. 应用存储策略 vSAN文件服务文件服务快照与备份 vSAN iSCSI目标服务 vSAN容错 FTT:Fault to Tolerance 允许故障数 故障域:每一台vSAN主机是一个故障域 - 假设3台超融合(3计算1存储)&…

力扣 简单 110.平衡二叉树

文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…

基于Java的GeoTools对Shapefile文件属性信息深度解析

目录 前言 一、Shapefile的属性列表信息 1、属性表格信息 2、属性表格包含的要素 二、GeoTools对属性表格的解析 1、常规解析方法 2、基于dbf文件的属性信息读取 三、总结 前言 ESRI Shapefile(shp),或简称shapefile,是美…

【Spring Boot React】Spring Boot和React教程 完整版

【Spring Boot & React】Spring Boot和React教程 在B站找到一个不错的SpringBoot和React的学习视频,作者是amigoscode 【Spring Boot & React】Spring Boot和React教程 2023年更新版【Spring Boot React】价值79.9美元,全栈开发,搭…

如何使用CMD命令启动应用程序(二)

说明:去年1024发布了一篇博客,介绍如何使用CMD命令启动应用程序,但实际情况,有些程序可能无法用配置环境变量的方式来启动,本文针对两种情况下的程序,如何使用CMD命令来启动,算是对上一篇博客的…

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

鸿蒙harmonyos next flutter混合开发之开发plugin(获取操作系统版本号)

创建Plugin为my_plugin flutter create --org com.example --templateplugin --platformsandroid,ios,ohos my_plugin 创建Application为my_application flutter create --org com.example my_application flutter_application引用flutter_plugin&#xff0c;在pubspec.yam…

如何解决 MySQL ERROR 1040 (08004): Too many connections ?

MySQL 是最流行的开源关系数据库管理系统之一&#xff0c;它也是开发人员中非常常用的数据库。即便它高度健壮和可伸缩性极强&#xff0c;像任何软件一样&#xff0c;它也可能出现错误。我们会经常遇到一个错误&#xff0c;特别是在高流量系统中&#xff0c;error 1040 (08004)…