# Syii **Repository Path**: sliio/syii ## Basic Information - **Project Name**: Syii - **Description**: 嘻嘻 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/sliio/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-03 - **Last Updated**: 2026-06-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Syii 1. 分布式系统基础概念 1.1 定义 分布式系统由多台独立物理 / 云服务器节点组成,节点通过网络通信协同工作,对外表现为统一完整系统;用于解决单体应用算力上限、存储瓶颈、单点故障、海量并发问题。 1.2 单体架构 vs 分布式架构对比 表格 对比项 单体架构 分布式 (微服务) 部署方式 全部模块打包部署一台机器 按业务拆分多服务、多节点独立部署 扩容 整体扩容成本高 按需扩容单个服务 故障影响 一处异常整体宕机 故障服务隔离,不影响全系统 开发维护 小项目高效,大项目臃肿 分工明确,复杂度上升,需管控分布式问题 1.3 典型业务落地场景 高并发互联网:电商、秒杀、支付系统 海量数据:大数据存储、日志分析、物联网数据采集 异地多活:金融、政企核心系统 2. 分布式核心理论 (CAP/BASE/ 一致性算法) 2.1 CAP 定理 任何分布式存储系统无法同时满足以下三点,三选二: C (一致性 Consistency):所有节点同一时刻数据完全一致 A (可用性 Availability):任意请求均可正常返回结果 P (分区容错 Partition Tolerance):网络故障导致节点间通信失败,系统仍可运行 选型策略: CP 架构:舍弃可用性,保证数据一致 (ZooKeeper) AP 架构:舍弃强一致性,保证服务可用 (Redis、多数互联网业务) 2.2 BASE 理论(互联网主流最终一致性思想) BASE 是 CAP 中 AP 方案落地指导: BA (基本可用):故障时核心功能可用,非核心降级 S (柔性状态):允许系统中间态,数据短时不一致 E (最终一致):经过一段时间同步后,全节点数据达成一致 2.3 主流一致性算法 表格 算法 用途 落地产品 Raft 分布式选主、数据同步 Etcd、Nacos Paxos 强一致性,理论复杂 Chubby ZAB Zookeeper 自研一致性协议 ZooKeeper 3. 分布式核心中间件与技术组件 3.1 服务注册与发现 解决服务 IP 不固定、动态上下线问题:Nacos、Consul、Eureka 原理:服务启动注册到注册中心,消费者定时拉取服务列表实现调用 3.2 RPC 远程调用 跨服务进程通信,替代 HTTP 提升性能:Dubbo (Java)、gRPC (跨语言) java 运行 // Dubbo简单接口示例 public interface OrderRpcService { // 远程调用:创建订单 Long createOrder(Long userId, Long goodsId); } 3.3 分布式配置中心 统一管理环境配置、动态修改不重启服务:Nacos、Apollo 3.4 消息队列 (MQ) 异步解耦、流量削峰、最终一致性:Kafka、RocketMQ、RabbitMQ 3.5 分布式锁 解决并发争抢资源 (库存扣减、幂等控制): Redis 分布式锁 (业务常用) Zookeeper 临时节点锁 (高可靠) 3.6 分布式缓存 Redis 集群 (主从 + 哨兵 / Cluster),解决热点数据 DB 压力 4. 分布式系统分层架构设计 plaintext ┌─────────────┐ │ 接入层(Gateway) → SpringCloud Gateway/APISIX 路由、鉴权、限流 ├─────────────┤ │ 应用服务层(微服务拆分) → 用户/订单/商品/支付独立服务(DDD领域拆分) ├─────────────┤ │ 中间件层 → MQ/Redis/Nacos/注册中心 ├─────────────┤ │ 数据层 → MySQL分库分表 + 对象存储OSS + ES搜索引擎 └─────────────┘ 4.1 微服务拆分原则 (DDD 领域驱动) 单一职责:一个服务只负责一个领域 高内聚低耦合:领域内逻辑聚合,领域间通过 RPC/MQ 通信 数据自治:每个服务独占数据库,禁止跨库 JOIN 5. 主流中间件选型对照表 表格 中间件分类 产品 优势 适用场景 注册配置 Nacos 注册 + 配置二合一,AP 架构 微服务全栈首选 消息队列 RocketMQ 高可靠、事务消息 电商订单异步 消息队列 Kafka 超高吞吐 日志、大数据采集 分布式缓存 Redis 高性能多数据结构 热点缓存、分布式锁 链路追踪 SkyWalking 无侵入探针 全链路监控 分库分表 Sharding-JDBC 客户端分片,无中间代理 MySQL 分库分表 6. 分布式项目标准开发流程 需求梳理 → DDD 领域建模 → 服务拆分评审 架构选型:中间件、存储、框架确认 编码开发:接口定义、单元测试 集成测试:本地 Docker 环境联调 性能压测:JMeter 压测并发、验证限流降级 灰度上线 → 全量发布 → 线上监控运维 6.1 接口规范 统一使用 RESTful 规范: GET:查询资源;POST:新增;PUT:全量更新;DELETE:删除 7. 高可用、容错、限流熔断设计 7.1 熔断降级(Sentinel 主流框架) 熔断:下游服务频繁报错,断开调用,快速失败防止雪崩 降级:非核心功能关闭,保障核心业务 (商品详情正常、推荐服务降级) 7.2 限流算法 漏桶算法:固定速率流出,限制出口流量 令牌桶算法:可瞬间放行突发流量 (秒杀常用) 7.3 故障处理:重试、超时、故障转移 RPC 调用统一配置超时时间、失败重试次数,注册中心自动剔除故障节点。 8. 分布式数据方案:分库分表与分布式事务 8.1 分库分表两种方案 垂直分库:按业务拆分 (用户库、订单库) 水平分表:单表数据过大,按 ID 哈希拆分 (order_0~order_15) Sharding-JDBC 最简 yaml 配置示例 yaml spring: shardingsphere: datasource: ds0: url: jdbc:mysql://127.0.0.1:3306/db_order_0 rules: sharding: tables: t_order: actual-data-nodes: ds0.t_order_$->{0..1} database-strategy: standard: sharding-column: user_id 8.2 分布式事务解决方案 表格 方案 适用场景 优缺点 本地消息表 + MQ 电商订单 (主流) 成本低,最终一致 TCC 强一致性金融业务 侵入代码,开发成本高 SAGA 长事务业务 补偿逻辑复杂 2PC(XA) 传统数据库,低并发 性能差,不适合高并发 9. 可观测性:监控、日志、全链路追踪 分布式三大可观测支柱: 指标监控 (Prometheus+Grafana):QPS、CPU、内存、接口耗时 日志收集 (ELK/EFK):统一日志存储检索,异常排查 链路追踪 (SkyWalking/Pinpoint):追踪一条请求跨多服务全链路耗时、异常节点 10. 实战案例:简易分布式电商订单架构 plaintext 用户请求 → Gateway网关 → 订单服务 ↓(RPC调用) 商品服务(扣库存) + 用户服务(扣余额) ↓(MQ异步) 消息队列 → 库存变更服务、物流服务、积分服务 关键点:创建订单后通过 RocketMQ 异步通知下游,提升接口响应速度,解耦业务。 11. 分布式高频踩坑与解决方案 11.1 缓存三大问题 缓存穿透 (查不存在数据击穿 DB):布隆过滤器拦截非法 key 缓存击穿 (热点 key 过期大量请求打 DB):互斥锁、永不过期 缓存雪崩 (大批量 key 同时过期):过期时间随机 + 集群部署 11.2 接口幂等(防止重复请求) 方案:前端传唯一业务单号,服务端根据单号判断是否已处理,避免重复下单 / 扣款。 11.3 分布式事务数据不一致 中小业务优先:本地消息表 + 可靠 MQ 实现最终一致性。 12. Docker 快速搭建开发环境 docker-compose.yml(一键启动 Nacos+Redis+RocketMQ) yaml version: '3' services: nacos: image: nacos/nacos-server:2.3.1 ports: ["8848:8848"] environment: MODE: standalone redis: image: redis:6-alpine ports: ["6379:6379"] 启动命令:docker-compose up -d 附录 A. 推荐学习资源 《分布式服务架构:原理、设计与实战》 Nacos/SkyWalking 官方文档 阿里 Sentinel、Sharding-JDBC 开源项目 B. 常用工具清单 压测:JMeter、Locust API 调试:Postman、Apifox 链路排查:SkyWalking UI