当前位置: 首页 > news >正文

分布式系统设计(架构能力)

一、微服务架构
  1. 服务治理

    • Nacos 注册中心(AP模式)

      • CAP选择:Nacos 默认采用 AP 模式(可用性 + 分区容忍性),通过心跳检测实现服务健康管理。
      • 服务发现:客户端定时拉取服务列表,支持权重路由和元数据过滤。
      • 配置管理:通过 dataId 和 group 动态推送配置,支持灰度发布。
    • Sentinel 熔断规则持久化

      • 规则存储:将流控、熔断规则持久化到 Nacos/ZooKeeper,避免重启丢失。
      • 动态更新:通过 DataSource 接口监听配置中心变化,实时生效。
      // 示例:Sentinel 规则持久化到 Nacos 
      ReadableDataSource<String, List<FlowRule>> flowRuleDataSource = new NacosDataSource<>( nacosServerAddr, groupId, dataId, source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}) ); FlowRuleManager.register2Property(flowRuleDataSource.getProperty());

  2. 分布式事务

    • Seata AT模式

      • 两阶段流程
        1. 一阶段:执行业务 SQL,生成 UNDO_LOG(数据快照)。
        2. 二阶段:提交时删除 UNDO_LOG;回滚时通过 UNDO_LOG 恢复数据。
      • 全局锁:TC(事务协调器)通过全局锁避免脏写。
    • 最大努力通知型事务

      • 适用场景:跨系统最终一致性(如支付成功后通知商户)。
      • 实现步骤
        1. 本地事务提交后,异步发送通知消息。
        2. 消息队列保证至少一次投递,接收方需幂等处理。
  3. 网关设计

    • Spring Cloud Gateway 过滤器链

      • 核心过滤器
        • GlobalFilter:全局过滤(如鉴权、日志)。
        • GatewayFilter:路由级过滤(如添加请求头)。
      • 自定义过滤器
        @Component 
        public class AuthFilter implements GlobalFilter { 
            @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { 
                if (!checkAuth(exchange.getRequest())) { 
                    return exchange.getResponse().setComplete(); 
                    // 拦截 
                } 
            return chain.filter(exchange); } }

    • 动态路由配置

      • 基于Nacos:监听 Nacos 配置变化,刷新路由表。
      • API 动态更新:通过 RouteDefinitionRepository 接口实现。

二、中间件核心
  1. Redis

    • 集群模式

      • Cluster分片
        • 16384个哈希槽,每个节点负责部分槽位。
        • 客户端路由:通过 CRC16(key) % 16384 计算槽位。
      • Codis方案
        • 代理层(Codis-Proxy)负责分片,依赖 ZooKeeper 维护元数据。
    • 持久化策略

      • RDB:定时快照,恢复快但可能丢失数据。
      • AOF:追加日志,数据安全但文件较大。
      • 混合模式:RDB 全量 + AOF 增量(Redis 4.0+)。
    • 缓存问题解决方案

      • 穿透:布隆过滤器(RedissonBloomFilter)拦截无效请求。
      • 击穿:互斥锁(SET key value NX PX 3000)防止并发重建。
      • 雪崩:随机过期时间(基础过期时间 + 随机偏移量)。
  2. Kafka

    • ISR机制

      • In-Sync Replicas:与 Leader 保持同步的副本集合。
      • Leader选举:当 Leader 失效时,从 ISR 中选择新 Leader。
    • 零拷贝技术

      • sendfile系统调用:数据直接从磁盘文件传输到网卡,绕过用户态。
    • Exactly-Once语义

      • 幂等生产者:通过 PID + Sequence Number 去重。
      • 事务消息:跨分区原子性写入(需配合事务协调器)。
  3. RocketMQ

    • 事务消息流程

      1. 发送半消息(对消费者不可见)。
      2. 执行本地事务,提交或回滚。
      3. Broker 根据事务状态提交或丢弃消息。
    • 顺序消息实现

      • MessageQueueSelector:通过相同选择策略(如订单ID哈希)将消息发送到同一队列。
      • 消费者单线程顺序消费。

三、高可用设计
  1. 限流降级

    • 滑动窗口算法

      • 实现:将时间划分为多个小窗口,统计窗口内请求量。
      • 优势:比固定窗口更平滑,避免临界突发流量。
    • 令牌桶实现(Resilience4j)

      // 配置每秒10个令牌 
      RateLimiterConfig config = RateLimiterConfig
          .custom()                     
          .limitRefreshPeriod(Duration.ofSeconds(1)) 
          .limitForPeriod(10) 
          .build(); 
      RateLimiter limiter = RateLimiter.of("apiLimiter", config);

  2. 容灾方案

    • 同城双活

      • 数据同步:基于数据库主从复制或 DRBD 块级同步。
      • 流量切换:DNS 或负载均衡器(如 Nginx)切换流量。
    • 异地多活

      • 单元化路由:按用户 ID 哈希路由到指定机房(如用户A固定访问北京机房)。
      • 数据最终一致:通过消息队列异步同步数据。
  3. 压测实战

    • JMeter全链路压测

      1. 脚本录制:使用 JMeter 代理服务器录制用户操作。
      2. 参数化:CSV 文件驱动多用户登录(不同账号)。
      3. 分布式压测:控制机(Master)调度多台压力机(Slave)。
      4. 监控指标:TPS、响应时间、错误率、资源利用率(CPU/内存)。
    • 结果分析

      • 瓶颈定位:数据库慢 SQL、线程池满、缓存命中率低。
      • 优化建议:增加索引、调整线程池参数、预热缓存。

四、总结与实战案例

案例:电商大促系统设计

  • 挑战:秒杀场景下的高并发(10万QPS)、数据一致性。
  • 解决方案
    1. 流量削峰:MQ 队列缓冲请求,异步处理订单。
    2. 库存扣减:Redis Lua 脚本保证原子性,异步同步到数据库。
    3. 降级策略:核心功能(下单)优先,非核心功能(推荐)降级。

通过深入理解上述技术点,并结合实际场景灵活运用,能够设计出高可用、可扩展的分布式系统。

相关文章:

  • 用Python分割并高效处理PDF大文件
  • 【kaggle机器学习实战--降雨数据集的二分类建模,内含插值法和二分类各种评估指标的可视化详解】
  • C++:#ifndef 头文件保护机制详解
  • visual studio下载安装
  • Vue3自定义hooks
  • SAP-ABAP:SAP的生产计划模块PP的bapi详细介绍及使用场景
  • SpringUI高保真动态交互元件库:助力产品原型设计
  • 数据结构 常见的排序算法
  • JVM常用概念之JNI临界区和GC锁定器
  • 【五.LangChain技术与应用】【31.LangChain ReAct Agent:反应式智能代理的实现】
  • 《会展管理:现场管理的实战经验分享》
  • 基于PyMuPDF与百度翻译的PDF翻译处理系统开发:中文乱码解决方案与自动化排版实践
  • Schematic Booster可以多模式打开原理图,兼容不同原理图设计图纸格式
  • 在 IntelliJ IDEA(2024) 中创建 JAR 包步骤
  • Cookie和Session
  • 电商行业门店管理软件架构设计与数据可视化实践
  • vue3,Element Plus中隐藏菜单el-menu滚动条
  • 实战指南:构建高可用生产级Kafka集群的完整教程
  • 关于OceanBase与CDH适配的经验分享
  • 【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识
  • 男女做那个能看的视频网站/西安网站建设方案优化
  • 广州制作网站哪家专业/六年级上册数学优化设计答案
  • 大名网站建设费用/卡点视频软件下载
  • 室内设计方案ppt案例/长沙优化网站厂家
  • 兰州响应式网站建设/许昌网络推广公司
  • 重庆网站建设技术托管/如何推广公众号