项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列


项目技术栈-解决方案-消息队列
  • 队列(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。
这些队列都实现了锁原语,能够在多线程中直接使用。
可以使用队列来实现线程间的同步。

常用方法:

Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 
如果队列满了,返回True,反之False,Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]])
获取队列,timeout等待时间
Queue.get_nowait() 
相当于Queue.get(False),非阻塞方法
Queue.put(item) 
写入队列,timeout等待时间
Queue.task_done() 
在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。
Queue.join() 
实际上意味着等到队列为空,再执行别的操作
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

java教程电商秒杀环境搭建

项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_02


QQ 1285575001
Wechat M010527
技术交流 QQ群599020441
纪年科技aming


项目技术栈-解决方案-消息队列-电商秒杀系统_java_03


项目技术栈-解决方案-消息队列-电商秒杀系统_java_04


springboot 技术文档

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_05

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_06

项目技术栈-解决方案-消息队列-电商秒杀系统_java_07

  • Nest
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_08


  • 项目技术栈-解决方案-消息队列-电商秒杀系统_java_09

    项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_10

    项目技术栈-解决方案-消息队列-电商秒杀系统_java_11

    项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_12

  • maven项目 ---->IDEA 创建一下
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_java_13

    项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_14

    项目技术栈-解决方案-消息队列-电商秒杀系统_java_15

    项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_16

    项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_17

    项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_18

  • 与eclipse 构建的 目录结构 有所不同
  • 从新搭建 test 目录删掉
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_19

  • 添加 依赖
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_20

  • 添加 三个依赖
#添加启动类#

项目技术栈-解决方案-消息队列-电商秒杀系统_java_21

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_22

  • app 这个没啥用 删了
  • 按住Ctrl 提示
  • 创建 包
  • controller 包 创建 类
  • import 包含路径
  • 同时 mian 目录下创建 resources
    application文件 下 application.properties
  • 添加前缀/后缀
  • 创建 res 下 templates模版目录
  • 创建一个 hello.html
  • 改变 res 为源码目录- 成功搭建模版

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_23

  • 运行测试

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_24

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_25

项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_26

项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_27


项目技术栈-解决方案-消息队列-电商秒杀系统_java_28

  • 方便导入

java教程 电商秒杀系统实战

QQ 1285575001
Wechat M010527
技术交流 QQ群599020441
纪年科技aming


项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_29

  • 高并发
    缓存
    异步化

    前后端分离:MVVM框架
    原生框架:jQ Bootstrap

  • jsp ---->归类一下
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_30

  • 消息组件:
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_31

  • 缓存
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_32

  • 连接池
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_33


  • 微服务框架
  • 连接数据库
  • 验证框架

项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_34

  • 前后端分离----->静态页面(缓存)
  • cdn 接收请求 ---->网关---->nginx缓存---->服务器页面缓存---->radis
    --------->url级别缓存------>对象级别缓存
  • 缓存数据不一致权衡
  • 缓存/数据库架构搭建
  • 消息队列 异步下单 代替oracle
  • 压力测试下的 逻辑检验
  • 优化拓展
  • 接口 互联网安全(活动公平 防刷 限流 验证码 隐藏接口地址 )

# 应对大并发
  • 缓存
  • 异步
  • 分布式 负载均衡 (横向拓展)
  • 代码 拓展封装 设计模式

----

项目技术栈-解决方案-消息队列-电商秒杀系统_java_35

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_36

  • springmvc -----JSP

项目技术栈-解决方案-消息队列-电商秒杀系统_java_37


项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_38


项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_39


项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_40


项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_41


项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_42


项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_43


项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_44


项目技术栈-解决方案-消息队列-电商秒杀系统_java_45



项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_46

pyWeb开发基础实现 电商秒杀系统

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_47

# 功能实现

1.普通商城
  • 用户模块
  1. 注册 登陆
  2. 修改资料
  3. 找回密码
  • 数据
  1. 列表数据
  2. 数据详情
  • 后台
  1. 管理用户
  2. 管理内容
2.购物商城
  • 交易
    1.购物车
    2.订单
    3.结算订单
    4.库存
  • 结算
    1. 充值
    2.付款
    3.交易
    3.提现
    4.分期付款
  • 收货和售后
    1.收货地址管理
    2. 发票管理
    3. 物流进度

3. 强大系统
  • 优惠卷
  • 代金卷
  • 秒杀 (最受关注)
  • 返利
  • 免单
  • 试用

4. 完善系统
  • 商家入驻
  • 商家推荐

5.修仙必备
  • 数据挖掘
  • 人物画像
  • 自动部署
  • 弹性伸缩
  • 日志记录
  • 优雅降级





python --> Django


# 秒杀系统
  • 特点
  • 规则
  • 问题
  • 解决方案
  • 关键思路

项目技术栈-解决方案-消息队列-电商秒杀系统_java_48


– 没有电脑的同学 可以试一试 Qpython


问题
  • 保证秒杀基本功能正常
  • 不会超售
  • 保证其他功能正常
  • 防止机器人秒杀
    ----
#大型构架
- ruby 数据处理
- java 后台管理
  • 1.
  • 2.
# CDN
  • 大带宽
  • 缓存页面数据
  • 算法 筛选 (筛选秒杀人选)
# 负载均衡
  • 数据分发 —>分布式主机集群
# 各级缓存
  • 高速读写
  • 缓存力度区分
  • 筛选秒杀 结果
# 数据库 一致分布式
  • 保护 数据库
  • 小量 操作数据库 (减小库存)
# 控制库存
  • 库存 逻辑错误 避免

# 响应 结果 检查下单有效性

  • 生成订单
  • 返回秒杀结果
# 总结

项目技术栈-解决方案-消息队列-电商秒杀系统_java_49


示例代码

项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_50

项目技术栈-解决方案-消息队列-电商秒杀系统_java_51

  • 校验有效值
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_52

  • 校验最小
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_53

  • 数据库 事物 异常 回滚
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_54

  • 调用 之前 定义的新方法
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_55

  • mysql 关系型数据库
    方便聚合 方便计算
  • 约束速度

redis (快速)

项目技术栈-解决方案-消息队列-电商秒杀系统_java_56

  • 除了 radis 还有 队列 内存

项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_57

项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_58

项目技术栈-解决方案-消息队列-电商秒杀系统_java_59


大厂 第一种方法 比较

项目技术栈-解决方案-消息队列-电商秒杀系统_数据库_60

  • 第三种方法
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_61

  • 第二种方法
  • 项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_62

  • 第一种方法

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_63

概念

“消息”是在两台计算机间传送的数据单位。
消息可以非常简单,例如只包含文本字符串;
也可以更复杂 ,包括对象等。

队列是一种数据结构,先进先出,保证了顺序性。

生产者:发送消息的一端。用于把消息写入到队列中

消费者:从消息队列中,依次读取每条消息的一端。

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。

实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。

目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。

应用场景

1. 异步处理

场景说明:
用户注册后,需要发注册邮件和注册短信。传统的做法有两种

1.串行的方式;2.并行方式

(1)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_64


(2)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间

项目技术栈-解决方案-消息队列-电商秒杀系统_缓存_65


假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。

因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100)

引入消息队列,将不是必须的业务逻辑,异步处理。

项目技术栈-解决方案-消息队列-电商秒杀系统_消息队列_66


按照以上约定,用户的响应时间相当于是注册信息写入数据库的时间,也就是50毫秒。

注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。
因此架构改变后,系统的吞吐量提高到每秒20 QPS。比串行提高了3倍,比并行提高了两倍

参考文章

消息队列(Message Queue)

 https://www.kancloud.cn/xianyunyehe/php_interview/1163797