软件开发进阶技能之分布式与高并发(五)

简介: 教程来源本节详解高并发秒杀系统设计与可观测性实践:通过CDN静态化、Redis原子扣减、MQ异步下单、唯一键防重等实现抗洪峰、零超卖;并集成Prometheus监控、SkyWalking链路追踪、ELK日志分析,构建完整可观测体系。

第十一部分:高并发实战案例 —— 秒杀系统设计

将前面各部分知识点综合运用,设计一个高并发秒杀系统。

11.1 需求
商品库存有限,例如 100 件。

瞬时洪峰流量(例如 10 万人同时抢购)。

要求不超卖,不重复下单,系统不崩溃。

11.2 核心思路
流量层层削峰:

页面静态化 + CDN。

客户端随机延时发起请求(防集中冲击)。

API 网关限流(令牌桶)。

库存预热与扣减:

秒杀开始前将库存加载到 Redis 中。

使用 Redis 的 DECR 原子操作扣减库存,扣减成功才进入后续流程。

请求排队异步化:

扣减成功后,将下单请求写入消息队列,立即返回“排队中”。

后端 worker 串行或小并发消费队列创建订单,避免数据库死锁。

订单防重:

用户 ID + 商品 ID 作为唯一键,保证同一用户只能秒杀一次。

兜底降级:

若 Redis 或 MQ 压力过大,直接返回“活动火爆,请重试”。

11.3 伪代码实现

@RestController
public class SeckillController {
    @Autowired
    private RedisTemplate redis;
    @Autowired
    private RocketMQTemplate mq;

    @PostMapping("/seckill")
    public String seckill(Long userId, Long productId) {
        // 1. 限流(使用 Sentinel)
        // 2. 校验是否已秒杀过(Redis Set)
        Boolean already = redis.opsForSet().isMember("seckill:user:"+productId, userId);
        if (Boolean.TRUE.equals(already)) {
            return "您已参与过该活动";
        }
        // 3. 原子扣减库存
        Long stock = redis.opsForValue().decrement("seckill:stock:"+productId);
        if (stock == null || stock < 0) {
            // 库存不足,恢复库存(decrement 后为负,需加回)
            redis.opsForValue().increment("seckill:stock:"+productId);
            return "已抢光";
        }
        // 4. 记录用户参与(避免重复扣减)
        redis.opsForSet().add("seckill:user:"+productId, userId);
        // 5. 发送消息异步创建订单
        SeckillOrderMsg msg = new SeckillOrderMsg(userId, productId);
        mq.syncSend("seckill_order_topic", msg);
        return "排队中,请稍后查询结果";
    }
}

@RocketMQMessageListener(topic = "seckill_order_topic", consumerGroup = "order-group")
public class OrderConsumer implements RocketMQListener<SeckillOrderMsg> {
    @Autowired
    private OrderService orderService;

    @Override
    public void onMessage(SeckillOrderMsg msg) {
        // 幂等:使用唯一键约束(userId+productId)
        orderService.createSeckillOrder(msg.getUserId(), msg.getProductId());
    }
}

11.4 数据库设计

CREATE TABLE `seckill_order` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `user_id` bigint NOT NULL,
    `product_id` bigint NOT NULL,
    `status` tinyint DEFAULT 0,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_user_product` (`user_id`,`product_id`)  -- 防重
);

第十二部分:高并发系统的可观测性 —— 监控、追踪、日志

分布式系统出了故障,如何快速定位?需要构建可观测性(Observability)三大支柱:指标(Metrics)、链路追踪(Tracing)、日志(Logging)。

12.1 指标监控(Prometheus + Grafana)
每个微服务暴露 /metrics 端点,Prometheus 定期拉取,存储时序数据,Grafana 可视化。

常用指标:QPS、延迟(P99)、错误率、CPU/内存/GC、线程池活跃数、MQ 积压量。

12.2 分布式链路追踪(SkyWalking、Jaeger)
通过为每个请求生成全局唯一的 Trace ID,记录调用链(Span)。可以查看请求经过哪些服务、耗时多久、在哪一步失败。

Spring Cloud Sleuth 集成示例:

spring:
  zipkin:
    base-url: http://zipkin:9411
  sleuth:
    sampler:
      probability: 1.0  # 采样率

在日志中自动注入 Trace ID,方便聚合查询。

12.3 日志收集(ELK Stack)
Filebeat 采集日志 → Logstash 过滤 → Elasticsearch 存储 → Kibana 搜索分析。

告警:基于 Prometheus Alertmanager 或 Kibana 的 Watcher,当错误率飙升或队列积压超过阈值时发送钉钉/邮件。
来源:
https://yvyus.cn/

相关文章
|
1月前
|
人工智能 弹性计算 缓存
2026阿里云618云服务器活动价格参考:38元1年起,新老用户优惠解析
本文介绍了2026年阿里云618活动期间各规格云服务器的活动价格。轻量应用服务器2核2G秒杀价仅38元/1年,新用户专属价68元/年;经济型e实例2核2G活动价99元/1年,2核4G为599.93元/1年起;通用算力型u1实例2核4G为199元/1年,仅限企业用户购买。此外,活动还涵盖第9代企业级c9i、g9i、r9i等高性能实例,99元和199元档位可通过阿里云活动中心选购,适合个人开发者、小型创业团队及中小企业上云。
|
1月前
|
存储 弹性计算 数据库
阿里云服务器ECS免费试用攻略:0成本试用体验与申请与使用注意事项
阿里云ECS免费试用活动为新手用户提供零成本上云体验。完成实名认证且从未购买过ECS的用户,可申请3个月免费试用:个人用户享300元额度(0.833元/小时),企业用户享660元额度(1.833元/小时),每月另赠20GB国内+200GB海外公网流量,支持华北2、杭州、广州等7大免费地域。试用期内可灵活调整实例配置,适用于网站托管、开发测试、数据库部署等多种场景。超出额度按量计费,到期未释放将自动转为按量付费。
|
存储 C++
C++系列五:输入/输出
C++系列五:输入/输出
|
1月前
|
SQL 安全 算法
软件开发进阶技能之性能与安全调优(四)
本节聚焦安全调优:严守最小权限原则,缩减攻击面。涵盖SQL注入(禁用拼接,用PreparedStatement/MyBatis #{})、XSS(输出编码+框架自动转义)、命令注入(白名单校验);JWT安全(强密钥、合理过期、防算法混淆);会话固定防护与bcrypt加盐哈希密码存储。
|
1月前
|
消息中间件 NoSQL 中间件
软件开发进阶技能之分布式与高并发(二)
教程来源 https://oplhc.cn/ 消息队列(MQ)是分布式系统核心中间件,以异步通信实现服务解耦、流量削峰与最终一致性。支持可靠投递、幂等消费与死信处理,广泛应用于秒杀、日志收集等高并发场景。
|
1月前
|
SQL 自然语言处理 监控
2026年电商行业Agent应用盘点,瓴羊Agent四大场景深度拆解
2026年电商竞争转向“智能效率”,Agent成为重塑客服、数据、供应链与营销的核心载体。本文基于瓴羊四大产品(Quick Service、Quick BI、Dataphin、Data Agent),结合美妆、生鲜、跨境服饰及3C数码等真实案例,绘制可复用的电商Agent应用地图,揭示企业如何从自动化迈向自主决策,在“人+Agent”新范式中重构竞争力。(239字)
|
1月前
|
运维 安全 网络安全
钓鱼攻击取代暗网成为信息窃取主因的成因与防御研究
本文基于Optery 2026年报告及多起真实事件,揭示网络威胁核心转变:钓鱼与语音钓鱼已取代暗网,成为窃取敏感信息的首要渠道。调研显示96%企业对员工信息防护缺乏信心。文章剖析攻击链路、话术逻辑与技术实现,结合捷豹路虎、玛莎百货等案例,并提出涵盖邮件防护、终端管控、MFA认证、人员培训等六维度的全链路防御体系,兼具理论深度与落地可行性。(239字)
127 0
|
1月前
|
JavaScript Java 测试技术
软件开发进阶技能之代码规范与测试(一)
教程来源本文系统讲解代码规范(命名、格式、注释、设计原则、代码审查)与软件测试(单元/集成测试、TDD、Mock、覆盖率、CI)两大核心实践,强调规范是协作契约、测试是质量护栏,助力开发者写出可读、可维护、可演进的高质量代码。
|
1月前
|
NoSQL Redis Nacos
软件开发进阶技能之分布式与高并发(三)
教程来源 本节详解分布式系统核心机制:第七部分聚焦分布式锁,对比Redis(含Redisson)、ZooKeeper、数据库三种实现,强调安全性与可靠性;第八部分阐述微服务治理,涵盖注册发现、配置中心、负载均衡及Sentinel熔断降级限流,助力构建高可用分布式架构。
|
1月前
|
运维 监控 安全
协作平台钓鱼攻击:Microsoft Teams 威胁分析与防御体系构建
本文聚焦Microsoft Teams钓鱼攻击新趋势,剖析其依托租户联盟、域名仿冒与社会工程学的攻击链路,揭示平台默认配置、用户信任惯性及防御滞后等深层风险。提出“配置加固+身份管控+行为监控+人员培训”四维分层防御体系,并基于Microsoft Graph API开发自动化监控代码,实现外部消息采集、可疑内容识别与实时告警,为政企提供可落地的安全防护方案。(239字)
160 0