跳转到主内容
极星编程网:以代码为星,赴技术山海!

【学习篇】什么是分布式系统

分布式系统是由 多个独立计算机(节点) 通过 网络通信 协同工作的系统,这些节点对外呈现为一个 统一的整体 ,用户无需感知内部的分布式架构。

简单来说,就是“ 用多个计算机一起干一件事 ”,节点之间通过消息传递(如 RPC、HTTP、消息队列)协作完成任务。

一、分布式系统的核心目标 为什么需要分布式系统?

本质是为了解决 单机系统的局限性 : 性能瓶颈 :单机 CPU、内存、磁盘、网络的处理能力有限(如单机能处理 1000 QPS,分布式可通过 10 台机器扩展到 10000 QPS)。

存储上限 :单机硬盘容量有限,无法存储海量数据(如电商的商品库、用户数据)。

可用性需求 :单机故障会导致服务不可用,分布式系统通过多节点冗余(如主从备份)实现高可用。

地理分布式 :用户分布在不同地区(如中国、美国),需在各地部署节点以降低延迟(CDN、分布式数据库)。

二、分布式系统的关键特征 多节点协同 节点是独立的计算机(物理机、虚拟机或容器),可能分布在不同机架、机房甚至地区。

节点通过 网络通信 协作(网络存在延迟、丢包、分区等不可靠性)。

资源共享 节点共享系统的硬件(如存储、计算资源)和软件(如数据、服务),对外提供统一接口(用户无需关心数据存储在哪个节点)。

无全局时钟 各节点有自己的本地时钟,无法精确同步(如节点 A 记录时间

t1

,节点 B 记录

t2

,但无法确定

t1

和

t2

的绝对先后顺序)。

故障独立性 节点可能独立发生故障(如宕机、网络断开),系统需具备 容错能力 (如自动检测并替换故障节点)。

三、分布式系统的典型架构 根据业务场景,分布式系统有多种架构模式,以下是常见类型: 1. 客户端-服务器模式(C/S) 客户端 :发起请求(如用户手机 APP、浏览器)。

服务器集群 :接收并处理请求(如 Web 服务器集群、数据库集群)。

示例 :电商网站(用户通过 APP 访问多个后端服务器,数据存储在分布式数据库)。

2. 微服务架构 将单体应用拆分为 独立的小型服务 (如用户服务、订单服务、支付服务),每个服务独立部署、扩展和维护。

服务间通过 RPC(如 gRPC) 或 消息队列(如 Kafka) 通信。

示例 :Netflix、阿里巴巴的业务系统(由数百个微服务组成)。

3. 分布式存储 将数据分散存储在多个节点,通过副本机制保证可靠性和可用性。

示例 : GFS(Google 文件系统)、HDFS(Hadoop 分布式文件系统):存储海量文件。

分布式数据库(如 Cassandra、TiDB、MongoDB 分片集群):存储结构化/半结构化数据。

4. 分布式计算 将复杂任务拆分为子任务,分配给多个节点并行计算,最后汇总结果。

示例 : MapReduce(大数据计算框架,如 Hadoop MapReduce)。

Spark(内存分布式计算引擎)。

四、分布式系统的核心挑战(“坑”) 分布式系统的复杂度主要来自 网络不可靠 和 节点独立性 ,需解决以下关键问题: 1. 网络问题:延迟、分区、丢包 延迟 :节点间通信存在网络延迟(如跨机房延迟 100ms+),导致同步困难。

网络分区(脑裂) :网络故障导致节点间无法通信,系统分裂为多个独立子集群(如 Redis 主从分区后,主库和从库可能同时接受写请求,导致数据不一致)。

解决方案 : 超时机制(如 RPC 调用设置超时时间)。

一致性协议(如 Paxos、Raft,解决网络分区时的数据一致性)。

2. 数据一致性 问题 :多节点存储数据时,如何保证数据副本的一致性(如主从数据库同步延迟,导致读写分离时读取到旧数据)。

一致性模型 : 强一致性 :所有节点同时看到最新数据(如分布式锁、银行转账),实现成本高(需同步等待)。

最终一致性 :短期可能不一致,但经过一定时间后自动恢复一致(如分布式缓存、DNS 系统),可用性更高。

解决方案 : 共识算法(如 Raft,用于分布式数据库的 Leader 选举和数据同步)。

分布式事务(如 2PC、TCC,保证跨服务操作的原子性)。

3. 节点故障 问题 :节点可能宕机、重启或“脑死亡”(进程存活但无法通信),需自动检测并恢复服务。

解决方案 : 心跳检测(节点定期发送心跳,超时未收到则判定为故障)。

主从切换(如 Redis 哨兵、Kubernetes 的节点自愈)。

副本机制(如每块数据存储 3 个副本,允许最多 2 个节点故障)。

4. 负载均衡 问题 :如何将请求均匀分配到各节点,避免部分节点过载(“热点问题”)。

解决方案 : 负载均衡器(如 Nginx、LVS,分发流量到后端服务器)。

一致性哈希(如分布式缓存 Redis Cluster,避免节点变化导致大量数据迁移)。

五、分布式系统的典型技术栈 功能领域典型技术/工具 服务通信gRPC(RPC 框架)、HTTP/REST、Kafka(消息队列)服务治理Spring Cloud(微服务框架)、Kubernetes(容器编排)分布式存储HDFS、Ceph、TiDB、MongoDB 分片集群分布式计算Hadoop MapReduce、Spark、Flink一致性协议Raft(etcd、TiDB)、Paxos分布式锁Redis 分布式锁、ZooKeeper 分布式锁监控与追踪Prometheus(监控)、Jaeger(链路追踪) 六、如何判断一个系统是否是分布式系统?

满足以下任一特征即可视为分布式系统: 多节点协作 :任务由多个独立计算机共同完成(如用户请求被负载均衡到不同 Web 服务器)。

数据分布存储 :数据分散在多个节点(如数据库分库分表,不同表存储在不同节点)。

服务独立部署 :系统由多个独立部署的服务组成(如微服务架构中的用户服务、订单服务)。

七、总结 分布式系统的本质是 “用多个计算机协同解决单机无法处理的问题” ,通过网络将节点连接,对外呈现为统一整体。

其核心挑战来自网络不可靠和节点故障,需通过一致性协议、容错机制、负载均衡等技术保证系统的可用性、性能和数据一致性。

一句话概括 :分布式系统 = 多节点 + 网络通信 + 协同工作 ,目标是突破单机局限,支撑高并发、海量数据和高可用服务。

相关文章