• 首页
  • 归档
  • 分类
  • 标签
  • 关于
Xun's Blog
从零开始实现秒杀系统(四):系统优化篇

从零开始实现秒杀系统(四):系统优化篇

本文介绍了秒杀系统的关键优化技术,重点解决高并发下系统的稳定性、性能和数据一致性问题。主要优化措施包括: 1. **分布式限流**:基于Redis的令牌桶算法实现精准流量控制,通过注解和AOP实现接口级限流,防止瞬时流量击垮系统。 2. **订单超时处理**:利用RocketMQ延时消息实现未支付订单的自动取消和库存释放,确保库存数据准确性。 3. **多级缓存优化**:引入Gu
2025-02-21
项目
#java项目 #秒杀系统
从零开始实现秒杀系统(三):RocketMQ消息队列篇

从零开始实现秒杀系统(三):RocketMQ消息队列篇

本文是秒杀系统优化系列的第三篇,介绍如何利用RocketMQ消息队列解决V2版本遗留的问题。V2版本通过Redis预减库存和内存队列提升了性能,但仍存在服务可靠性差(宕机导致内存队列任务丢失)、数据一致性风险(Redis与数据库操作分离)、单机瓶颈(内存队列无法水平扩展)以及数据库行锁影响库存扣减性能等问题。 V3架构的核心优化是引入RocketMQ消息队列,关键改进包括:保留Redis预减库存
2025-02-14
项目
#java项目 #秒杀系统
从零开始实现秒杀系统(二):Redis优化篇

从零开始实现秒杀系统(二):Redis优化篇

这篇文章介绍了如何利用Redis优化秒杀系统,解决基于MySQL方案的性能瓶颈。作者针对V1版本中数据库压力大、系统吞吐量有限和用户体验差的问题,提出了V2版本的改进方案,主要包含以下关键技术: 1. **Redis预减库存**:使用Redis原子操作减少数据库访问,将库存信息缓存在Redis中处理扣减,显著提高性能。 2. **库存快速失败检查**:通过Redis标记售罄商品,快速拒绝无效请
2025-02-07
项目
#java项目 #秒杀系统
从零开始实现秒杀系统(一):MySQL行锁与事务篇

从零开始实现秒杀系统(一):MySQL行锁与事务篇

这篇文章介绍了基于MySQL实现秒杀系统的基础版本,重点探讨了高并发场景下的数据一致性问题。秒杀系统核心需求包括商品展示、库存管理、订单处理、防重复购买和时间控制。文章对比了四种库存扣减方案: 1. **V0错误示范**:不加锁直接更新库存,导致超卖问题。 2. **V1悲观锁**:使用`FOR UPDATE`实现串行化操作,保证一致性但吞吐量低。 3. **V2乐观锁**:版本号机
2025-02-01
项目
#java项目 #秒杀系统
线上BUG定位

线上BUG定位

本文讨论了大规模项目开发中常见的运维与调试问题,并提出了一系列解决方案: 1. **Bug应急管理**:对于影响较大的Bug,优先采取紧急止损措施,如回滚版本或关闭功能模块。同时强调事后复盘的重要性以避免类似问题。 2. **数据一致性问题**: - 缓存与数据库不一致时(如新增字段未同步缓存),需手动清除缓存或刷新数据。 - 避免滥用重启(可能掩盖问题),重点关注单例数据被意外修
2024-07-27
开发
#线上处理
hotKey检测

hotKey检测

摘要内容: 热点检测的核心是从流式数据中高效计算topk。传统Hashmap+堆排序适用于有限数据,但海量数据场景需更优算法。对于频率超过半数的问题,可以通过候选计数法解决(维护候选元素,相同则+1,不同则-1,扣减次数有限保证结果正确)。推广到频率超过m/k的元素时,需维护k-1个候选集合,通过增减计数过滤低频项,结果可能出现假阳性但无假阴性。 优化算法层面: 1. **Count-Min
2024-07-20
开发 > 高并发
#热点key #高并发
常见限流算法

常见限流算法

文章主要讨论了限流算法的几种实现方式及其特点。 首先提到固定窗口限流算法(Fixed Window),通过设定时间窗口内的最大请求数来限流。该方法实现简便,但存在临界突发问题,即在窗口边界可能出现流量突增的情况(如两个窗口交界处可能允许两倍流量通过)。 滑动窗口限流算法(Sliding Window)通过记录请求时间戳队列动态计算窗口内请求数,相比固定窗口更精确,但内存消耗大且清理过期数据可能
2024-07-10
开发 > 高并发
#高并发 #限流
3.kafka-rocketmq对比-MQ

3.kafka-rocketmq对比-MQ

这篇文章主要介绍了Kafka和RocketMQ在消息存储和读写机制上的对比。首先解释了Kafka的关键概念,包括Broker(消息处理节点)、Topic(消息类别)、Partition(物理分组)、Segment(存储文件段)和Offset(消息唯一标识)。Kafka采用segment文件存储数据,由.log文件(存储消息数据)和.index文件(稀疏索引)组成,通过二分查找定位消息。写入时使用顺
2024-07-01
开发 > 中间件
#消息队列
2.分布式事务-MQ

2.分布式事务-MQ

分布式系统拆分导致的数据一致性问题需要通过分布式事务来解决。文中探讨了分布式事务的几种实现方案,包括基于本地事务包裹消息投递的方式、非可靠消息结合本地消息表和定时任务校对的方法、TCC(Try-Confirm-Cancel)模式,以及传统的两阶段提交(2PC)和三阶段提交(3PC)协议。
2024-06-17
开发 > 中间件
#消息队列
1.为什么要引入MQ-MQ

1.为什么要引入MQ-MQ

消息队列(MQ)的核心优势在于解耦、异步处理和流量削峰。在秒杀系统中,MQ能够将非核心流程异步化,大幅提升系统吞吐量,通过削峰填谷缓解数据库压力(前端千万级请求 vs 数据库万级处理能力)。引入MQ需权衡响应时间延长、系统复杂度增加及运维成本。 微服务间通信模式包括调用链、聚合器和事件驱动,其中基于事件的异步通信(如订单状态变更通知)能实现上下游解耦,灵活扩展。主流MQ需具备可靠性(消息不丢
2024-06-10
开发 > 中间件
#消息队列
123…5

搜索

Hexo Fluid
总访问量 次 总访客数 人