从零开始实现秒杀系统(四):系统优化篇 本文介绍了秒杀系统的关键优化技术,重点解决高并发下系统的稳定性、性能和数据一致性问题。主要优化措施包括: 1. **分布式限流**:基于Redis的令牌桶算法实现精准流量控制,通过注解和AOP实现接口级限流,防止瞬时流量击垮系统。 2. **订单超时处理**:利用RocketMQ延时消息实现未支付订单的自动取消和库存释放,确保库存数据准确性。 3. **多级缓存优化**:引入Gu 2025-02-21 项目 #java项目 #秒杀系统
从零开始实现秒杀系统(三):RocketMQ消息队列篇 本文是秒杀系统优化系列的第三篇,介绍如何利用RocketMQ消息队列解决V2版本遗留的问题。V2版本通过Redis预减库存和内存队列提升了性能,但仍存在服务可靠性差(宕机导致内存队列任务丢失)、数据一致性风险(Redis与数据库操作分离)、单机瓶颈(内存队列无法水平扩展)以及数据库行锁影响库存扣减性能等问题。 V3架构的核心优化是引入RocketMQ消息队列,关键改进包括:保留Redis预减库存 2025-02-14 项目 #java项目 #秒杀系统
从零开始实现秒杀系统(二):Redis优化篇 这篇文章介绍了如何利用Redis优化秒杀系统,解决基于MySQL方案的性能瓶颈。作者针对V1版本中数据库压力大、系统吞吐量有限和用户体验差的问题,提出了V2版本的改进方案,主要包含以下关键技术: 1. **Redis预减库存**:使用Redis原子操作减少数据库访问,将库存信息缓存在Redis中处理扣减,显著提高性能。 2. **库存快速失败检查**:通过Redis标记售罄商品,快速拒绝无效请 2025-02-07 项目 #java项目 #秒杀系统
从零开始实现秒杀系统(一):MySQL行锁与事务篇 这篇文章介绍了基于MySQL实现秒杀系统的基础版本,重点探讨了高并发场景下的数据一致性问题。秒杀系统核心需求包括商品展示、库存管理、订单处理、防重复购买和时间控制。文章对比了四种库存扣减方案: 1. **V0错误示范**:不加锁直接更新库存,导致超卖问题。 2. **V1悲观锁**:使用`FOR UPDATE`实现串行化操作,保证一致性但吞吐量低。 3. **V2乐观锁**:版本号机 2025-02-01 项目 #java项目 #秒杀系统
线上BUG定位 本文讨论了大规模项目开发中常见的运维与调试问题,并提出了一系列解决方案: 1. **Bug应急管理**:对于影响较大的Bug,优先采取紧急止损措施,如回滚版本或关闭功能模块。同时强调事后复盘的重要性以避免类似问题。 2. **数据一致性问题**: - 缓存与数据库不一致时(如新增字段未同步缓存),需手动清除缓存或刷新数据。 - 避免滥用重启(可能掩盖问题),重点关注单例数据被意外修 2024-07-27 开发 #线上处理
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 这篇文章主要介绍了Kafka和RocketMQ在消息存储和读写机制上的对比。首先解释了Kafka的关键概念,包括Broker(消息处理节点)、Topic(消息类别)、Partition(物理分组)、Segment(存储文件段)和Offset(消息唯一标识)。Kafka采用segment文件存储数据,由.log文件(存储消息数据)和.index文件(稀疏索引)组成,通过二分查找定位消息。写入时使用顺 2024-07-01 开发 > 中间件 #消息队列
2.分布式事务-MQ 分布式系统拆分导致的数据一致性问题需要通过分布式事务来解决。文中探讨了分布式事务的几种实现方案,包括基于本地事务包裹消息投递的方式、非可靠消息结合本地消息表和定时任务校对的方法、TCC(Try-Confirm-Cancel)模式,以及传统的两阶段提交(2PC)和三阶段提交(3PC)协议。 2024-06-17 开发 > 中间件 #消息队列
1.为什么要引入MQ-MQ 消息队列(MQ)的核心优势在于解耦、异步处理和流量削峰。在秒杀系统中,MQ能够将非核心流程异步化,大幅提升系统吞吐量,通过削峰填谷缓解数据库压力(前端千万级请求 vs 数据库万级处理能力)。引入MQ需权衡响应时间延长、系统复杂度增加及运维成本。 微服务间通信模式包括调用链、聚合器和事件驱动,其中基于事件的异步通信(如订单状态变更通知)能实现上下游解耦,灵活扩展。主流MQ需具备可靠性(消息不丢 2024-06-10 开发 > 中间件 #消息队列