项目技术栈-解决方案-消息队列
- 队列(Queue)
- python Queue模块
- 常用方法:
- java教程电商秒杀环境搭建
- springboot 技术文档
- #添加启动类#
- java教程 电商秒杀系统实战
- 在这里插入图片描述
- # 应对大并发
- pyWeb开发基础实现 电商秒杀系统
- # 功能实现
- 1.普通商城
- 2.购物商城
- 3. 强大系统
- 4. 完善系统
- 5.修仙必备
- python --> Django
- # 秒杀系统
- 问题
- #大型构架
- # CDN
- # 负载均衡
- # 各级缓存
- # 数据库 一致分布式
- # 控制库存
- # 响应 结果 检查下单有效性
- # 总结
- 示例代码
- 大厂 第一种方法 比较
- 概念
- 应用场景
- 1. 异步处理
- 参考文章
- 消息队列(Message Queue)
队列(Queue)
python Queue模块
提供了同步的、线程安全的队列类
包括
FIFO(先入先出)队列Queue,
LIFO(后入先出)队列LifoQueue,
和
优先级队列PriorityQueue。
这些队列都实现了锁原语,能够在多线程中直接使用。
可以使用队列来实现线程间的同步。
常用方法:
java教程电商秒杀环境搭建
QQ 1285575001
Wechat M010527
技术交流 QQ群599020441
纪年科技aming
springboot 技术文档
- Nest
- maven项目 ---->IDEA 创建一下
- 与eclipse 构建的 目录结构 有所不同
- 从新搭建 test 目录删掉
- 添加 依赖
- 添加 三个依赖
#添加启动类#
- app 这个没啥用 删了
- 按住Ctrl 提示
- 创建 包
- controller 包 创建 类
- import 包含路径
- 同时 mian 目录下创建 resources
application文件 下 application.properties - 添加前缀/后缀
- 创建 res 下 templates模版目录
- 创建一个 hello.html
- 改变 res 为源码目录- 成功搭建模版
- 运行测试
- 方便导入
java教程 电商秒杀系统实战
QQ 1285575001
Wechat M010527
技术交流 QQ群599020441
纪年科技aming
- 高并发
缓存
异步化
前后端分离:MVVM框架
原生框架:jQ Bootstrap
- jsp ---->归类一下
- 消息组件:
- 缓存
- 连接池
- 微服务框架
- 连接数据库
- 验证框架
- 前后端分离----->静态页面(缓存)
- cdn 接收请求 ---->网关---->nginx缓存---->服务器页面缓存---->radis
--------->url级别缓存------>对象级别缓存 - 缓存数据不一致权衡
- 缓存/数据库架构搭建
- 消息队列 异步下单 代替oracle
- 压力测试下的 逻辑检验
- 优化拓展
- 接口 互联网安全(活动公平 防刷 限流 验证码 隐藏接口地址 )
# 应对大并发
- 缓存
- 异步
- 分布式 负载均衡 (横向拓展)
- 代码 拓展封装 设计模式
----
- springmvc -----JSP
pyWeb开发基础实现 电商秒杀系统
# 功能实现
1.普通商城
- 用户模块
- 注册 登陆
- 修改资料
- 找回密码
- 数据
- 列表数据
- 数据详情
- 后台
- 管理用户
- 管理内容
2.购物商城
- 交易
1.购物车
2.订单
3.结算订单
4.库存 - 结算
1. 充值
2.付款
3.交易
3.提现
4.分期付款 - 收货和售后
1.收货地址管理
2. 发票管理
3. 物流进度
3. 强大系统
- 优惠卷
- 代金卷
- 秒杀 (最受关注)
- 返利
- 免单
- 试用
4. 完善系统
- 商家入驻
- 商家推荐
5.修仙必备
- 数据挖掘
- 人物画像
- 自动部署
- 弹性伸缩
- 日志记录
- 优雅降级
python --> Django
# 秒杀系统
- 特点
- 规则
- 问题
- 解决方案
- 关键思路
– 没有电脑的同学 可以试一试 Qpython
问题
- 保证秒杀基本功能正常
- 不会超售
- 保证其他功能正常
- 防止机器人秒杀
----
#大型构架
# CDN
- 大带宽
- 缓存页面数据
- 算法 筛选 (筛选秒杀人选)
# 负载均衡
- 数据分发 —>分布式主机集群
# 各级缓存
- 高速读写
- 缓存力度区分
- 筛选秒杀 结果
# 数据库 一致分布式
- 保护 数据库
- 小量 操作数据库 (减小库存)
# 控制库存
- 库存 逻辑错误 避免
# 响应 结果 检查下单有效性
- 生成订单
- 返回秒杀结果
# 总结
示例代码
- 校验有效值
- 校验最小
- 数据库 事物 异常 回滚
- 调用 之前 定义的新方法
- mysql 关系型数据库
方便聚合 方便计算 - 约束速度
redis (快速)
- 除了 radis 还有 队列 内存
大厂 第一种方法 比较
- 第三种方法
- 第二种方法
- 第一种方法
概念
“消息”是在两台计算机间传送的数据单位。
消息可以非常简单,例如只包含文本字符串;
也可以更复杂 ,包括对象等。
队列是一种数据结构,先进先出
,保证了顺序性。
生产者:发送消息的一端。用于把消息写入到队列中
消费者:从消息队列中,依次读取每条消息的一端。
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。
实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。
应用场景
1. 异步处理
场景说明:
用户注册后,需要发注册邮件和注册短信。传统的做法有两种
1.串行的方式;2.并行方式
(1)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端
(2)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间
假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。
因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100)
引入消息队列,将不是必须的业务逻辑,异步处理。
按照以上约定,用户的响应时间相当于是注册信息写入数据库的时间,也就是50毫秒。
注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。
因此架构改变后,系统的吞吐量提高到每秒20 QPS。比串行提高了3倍,比并行提高了两倍
参考文章
消息队列(Message Queue)
https://www.kancloud.cn/xianyunyehe/php_interview/1163797