分布式系统

张开发
2026/4/9 7:41:07 15 分钟阅读

分享文章

分布式系统
文章目录什么是后端中的分布式系统为什么需要分布式系统核心技术、知识1、服务发现与注册2、API 网关3、配置中心4、分布式缓存5、消息队列6、分布式数据存储深入与拓展第一阶段基础第二阶段理论学习第三阶段实践第四阶段深入与拓展什么是后端中的分布式系统分布式系统是一组位于网络上的计算机为了共同完成一个任务而协同工作的系统。对于用户来说它就像一个单一、连贯的系统。在后端开发中分布式系统意味着将原本运行在一台强大服务器单体架构上的应用程序拆分成多个服务这些服务可以部署在不同的服务器节点上通过网络进行通信和协作。核心目标通过协作获得更高的性能吞吐量、可扩展性水平扩展、可用性容错和可维护性。为什么需要分布式系统1、突破单机性能瓶颈单台服务器的计算能力、内存、磁盘I/O和网络带宽总是有限的。分布式系统可以通过增加普通机器来提升整体能力。2、高可用性与容错单台服务器故障会导致整个服务不可用。分布式系统中部分节点宕机其他节点可以接管工作保证服务不中断。3、可扩展性当用户量和数据增长时可以通过简单地增加机器水平扩展来应对而不是不断升级单台服务器的硬件垂直扩展成本高且有限。4、低延迟可以将服务部署在全球各地的数据中心让用户就近访问减少网络延迟。核心技术、知识通过一些核心概念和图表来深入理解。1、服务发现与注册在动态的分布式环境中服务的实例可能会因为扩容、故障或更新而频繁地改变IP地址和端口。服务发现机制允许服务自动找到并与其他服务通信。工作流程Service B (消费者)服务注册中心(e.g., Nacos, Consul, Eureka)Service A (实例)Service B (消费者)服务注册中心(e.g., Nacos, Consul, Eureka)Service A (实例)注册元数据服务名、IP、端口等1. 注册 / 心跳2. 查询Service A的地址列表3. 返回可用实例列表4. 直接向选择的实例发起请求涉及技术Nacos,Consul,ZooKeeper,Eureka2、API 网关它是系统的唯一入口所有外部请求首先经过网关。它负责路由、认证、限流、监控等跨切面关注点。架构图分布式系统集群注册注册注册客户端请求API GatewayService 1Service 2Service 3服务注册中心涉及技术Spring Cloud Gateway,Kong,Zuul,Nginx3、配置中心将应用程序的配置如数据库连接、第三方API密钥、功能开关从代码中分离出来集中管理。动态修改配置后所有服务实例可以自动获取最新配置无需重启。工作流程管理员配置中心(e.g., Nacos, Apollo)多个服务实例管理员配置中心(e.g., Nacos, Apollo)多个服务实例服务应用新配置1. 在界面上修改配置并发布2. 推送更新通知 (Push)或由服务拉取 (Pull)3. 获取最新配置涉及技术Nacos,Apollo,Spring Cloud Config4、分布式缓存将高频访问的数据存储在内存中减少对后端数据库的访问极大提升读取性能和降低数据库负载。通常是分布式的键值存储。架构图分布式缓存集群 e.g., Redis Cluster节点 1节点 2节点 3应用程序集群后端数据库涉及技术Redis(Cluster/Sentinel模式),Memcached5、消息队列用于实现服务之间的异步通信和解耦。生产者将消息发送到队列消费者从队列中取出消息进行处理。它还提供了流量削峰和保证最终一致性的能力。工作流程消费者服务消息队列(e.g., Kafka, RabbitMQ)生产者服务消费者服务消息队列(e.g., Kafka, RabbitMQ)生产者服务发送后即刻返回无需等待处理1. 发送消息2. 推送消息 (或C主动拉取)3. 处理成功发送确认ACK4. 消息处理完毕从队列移除涉及技术Kafka(高吞吐),RabbitMQ(功能丰富),RocketMQ6、分布式数据存储数据量巨大单机数据库无法存储和处理。需要将数据分片存储到多台机器上。CAP定理一个分布式系统不可能同时满足一致性C、可用性A和分区容错性P只能三者取其二。数据库分片将一张大表的数据按某种规则如用户ID哈希拆分到不同的数据库节点中。复制为主数据库创建多个从库副本用于读写分离和故障转移。分片与复制示意图分片 3分片 2分片 1应用程序主库 Master从库 Slave主库 Master从库 Slave主库 Master从库 Slave涉及技术NoSQL:MongoDB(文档),Cassandra(宽列)NewSQL:TiDB,CockroachDB中间件:MyCat,ShardingSphere深入与拓展第一阶段基础1、语言与网络熟练掌握一门后端语言如 Java/Go。深刻理解 HTTP/1.1/2/3、TCP/IP 协议。2、数据库与缓存精通一种关系型数据库如MySQL和一种 NoSQL 数据库如Redis。理解事务、索引、锁、主从复制等概念。第二阶段理论学习1、阅读经典精读《数据密集型应用系统设计》这是分布式领域的圣经。2、理解核心理论弄懂CAP、BASE、一致性协议如 Raft/Paxos。不必深究数学证明但要理解其思想和工作流程。第三阶段实践1、选择一个生态建议从 Spring Cloud Alibaba 开始因为它集成了很多优秀组件文档丰富社区活跃。2、动手搭建用Nacos搭建一个服务注册和配置中心。用Spring Cloud Gateway搭建一个 API 网关。搭建一个Redis 哨兵或集群并在代码中集成它。搭建Kafka或RabbitMQ写一个生产者和消费者的 Demo。3、做一个综合项目设计一个简单的电商系统包含用户、商品、订单、支付等服务。将上述所有技术都用上去服务注册到 Nacos。通过网关暴露 API。用 Redis 缓存商品信息。下单后通过 MQ 通知库存服务和积分服务。第四阶段深入与拓展1、容器化与编排学习Docker和Kubernetes。K8s 本身就是一个极其复杂的分布式系统它提供了服务发现、负载均衡、自愈等能力是现代分布式应用的基石。2、观察与监控学习使用Prometheus收集指标、Grafana展示仪表盘、ELK日志收集分析来监控你的分布式系统。3、读源码选择一两个你常用的组件如 Redis、Nacos开始尝试阅读其源码理解其核心实现。

更多文章