分布式系统

发布于:2025-09-14 ⋅ 阅读:(24) ⋅ 点赞:(0)

什么是后端中的分布式系统

分布式系统 是一组位于网络上的计算机,为了共同完成一个任务而协同工作的系统。对于用户来说,它就像一个单一、连贯的系统。

在后端开发中,分布式系统意味着将原本运行在一台强大服务器(单体架构)上的应用程序,拆分成多个服务,这些服务可以部署在不同的服务器(节点)上,通过网络进行通信和协作。

核心目标:通过协作获得更高的性能(吞吐量)、可扩展性(水平扩展)、可用性(容错)和可维护性。

为什么需要分布式系统?

1、突破单机性能瓶颈:单台服务器的计算能力、内存、磁盘I/O和网络带宽总是有限的。分布式系统可以通过增加普通机器来提升整体能力。
2、高可用性与容错:单台服务器故障会导致整个服务不可用。分布式系统中,部分节点宕机,其他节点可以接管工作,保证服务不中断。
3、可扩展性:当用户量和数据增长时,可以通过简单地增加机器(水平扩展)来应对,而不是不断升级单台服务器的硬件(垂直扩展,成本高且有限)。
4、低延迟:可以将服务部署在全球各地的数据中心,让用户就近访问,减少网络延迟。

核心技术、知识

通过一些核心概念和图表来深入理解。

1. 服务发现与注册

在动态的分布式环境中,服务的实例可能会因为扩容、故障或更新而频繁地改变IP地址和端口。服务发现机制允许服务自动找到并与其他服务通信。

工作流程:

Service A (实例) 服务注册中心 (e.g., Nacos, Consul, Eureka) Service B (消费者) 1. 注册 / 心跳 注册元数据:服务名、IP、端口等 2. 查询:Service A的地址列表 3. 返回可用实例列表 4. 直接向选择的实例发起请求 Service A (实例) 服务注册中心 (e.g., Nacos, Consul, Eureka) Service B (消费者)

涉及技术:Nacos, Consul, ZooKeeper, Eureka

2. API 网关

它是系统的唯一入口,所有外部请求首先经过网关。它负责路由、认证、限流、监控等跨切面关注点。

架构图:

分布式系统集群
注册
注册
注册
API Gateway
Service 1
Service 2
Service 3
服务注册中心
客户端请求

涉及技术:Spring Cloud Gateway, Kong, Zuul, Nginx

3. 配置中心

将应用程序的配置(如数据库连接、第三方API密钥、功能开关)从代码中分离出来,集中管理。动态修改配置后,所有服务实例可以自动获取最新配置,无需重启。

工作流程:

多个服务实例 配置中心 (e.g., Nacos, Apollo) 管理员 1. 在界面上修改配置并发布 2. 推送更新通知 (Push) 或由服务拉取 (Pull) 3. 获取最新配置 服务应用新配置 多个服务实例 配置中心 (e.g., Nacos, Apollo) 管理员

涉及技术:Nacos, Apollo, Spring Cloud Config

4. 分布式缓存

将高频访问的数据存储在内存中,减少对后端数据库的访问,极大提升读取性能和降低数据库负载。通常是分布式的键值存储。

架构图:

分布式缓存集群 e.g., Redis Cluster
节点 1
节点 2
节点 3
应用程序集群
后端数据库

涉及技术:Redis (Cluster/Sentinel模式), Memcached

5. 消息队列

用于实现服务之间的异步通信和解耦。生产者将消息发送到队列,消费者从队列中取出消息进行处理。它还提供了流量削峰和保证最终一致性的能力。

工作流程:

生产者服务 消息队列 (e.g., Kafka, RabbitMQ) 消费者服务 1. 发送消息 发送后即刻返回,无需等待处理 2. 推送消息 (或C主动拉取) 3. 处理成功,发送确认ACK 4. 消息处理完毕,从队列移除 生产者服务 消息队列 (e.g., Kafka, RabbitMQ) 消费者服务

涉及技术:Kafka (高吞吐), RabbitMQ (功能丰富), RocketMQ

6. 分布式数据存储

数据量巨大,单机数据库无法存储和处理。需要将数据分片存储到多台机器上。

  • 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、理解核心理论:弄懂 CAPBASE、一致性协议(如 Raft/Paxos)。不必深究数学证明,但要理解其思想和工作流程。

第三阶段:实践
1、选择一个生态:建议从 Spring Cloud Alibaba 开始,因为它集成了很多优秀组件,文档丰富,社区活跃。
2、动手搭建:

  • Nacos 搭建一个服务注册和配置中心。
  • Spring Cloud Gateway 搭建一个 API 网关。
  • 搭建一个 Redis 哨兵或集群,并在代码中集成它。
  • 搭建 KafkaRabbitMQ,写一个生产者和消费者的 Demo。

3、做一个综合项目:设计一个简单的电商系统,包含用户、商品、订单、支付等服务。将上述所有技术都用上去:

  • 服务注册到 Nacos。
  • 通过网关暴露 API。
  • 用 Redis 缓存商品信息。
  • 下单后,通过 MQ 通知库存服务和积分服务。

第四阶段:深入与拓展
1、容器化与编排:学习 DockerKubernetes。K8s 本身就是一个极其复杂的分布式系统,它提供了服务发现、负载均衡、自愈等能力,是现代分布式应用的基石。
2、观察与监控:学习使用 Prometheus(收集指标)、Grafana(展示仪表盘)、ELK(日志收集分析)来监控你的分布式系统。
3、读源码:选择一两个你常用的组件(如 Redis、Nacos),开始尝试阅读其源码,理解其核心实现。