分布式理论

目录

1、分布式系统概念

2、核心目标

3、分布式系统特性

4、核心挑战与难点

5、分布式理论

5.1 CAP定理

5.2 PACELC 定理

5.3 BASE理论

6、核心技术组件与概念

7、主流技术栈与框架

8、典型应用场景


1、分布式系统概念

分布式系统是一组独立计算机的集合,这些计算机通过网络连接,在用户看来就像是一个单一、连贯的系统。其核心思想是将计算任务或数据存储分散到多台机器上,以解决单台计算机在性能、存储容量、可靠性或地理覆盖上的限制。

分布式与集群的区别:

  • 集群:多个服务器做同一个事情
  • 分布式:多个服务器做不同的事情

2、核心目标

  • 可扩展性:

    • 横向扩展: 通过添加更多的计算机节点来提升系统整体的处理能力、存储容量或用户承载量。这比升级单台机器的硬件(纵向扩展)通常更经济、更灵活、上限更高。

    • 例如:当用户量激增时,只需增加新的Web服务器即可分担流量。

  • 高可用性与容错性:

    • 系统设计能够容忍部分节点或网络组件的故障,而不导致整个服务完全中断。

    • 通过冗余实现:关键组件(数据、服务)在多个节点上复制。当一个节点失效,其他节点可以接管其工作。

    • 例如:数据库主节点宕机,备节点能迅速自动切换为主节点继续服务。

  • 性能:

    • 将任务并行处理在多台机器上,可以显著缩短计算时间(如大型数据处理)。

    • 将数据和计算节点靠近用户(如CDN、边缘计算),减少网络延迟,提升响应速度。

  • 资源共享与访问:

    • 方便地共享昂贵的硬件资源(如大型存储阵列、特殊设备)或软件服务(如数据库、文件系统)。

    • 允许用户从地理位置分散的客户端透明地访问这些资源。

3、分布式系统特性

  • 并发性: 系统中的多个节点可能同时执行操作(处理请求、计算、通信)。需要协调机制来处理并发带来的问题(如资源竞争、数据一致性)。

  • 缺乏全局时钟: 精确同步所有节点上的时钟非常困难。节点间的事件顺序判断(“谁先发生?”)依赖于特定的协议(如逻辑时钟、向量时钟),而非绝对时间。

  • 组件故障独立性: 任何节点、进程或网络连接都可能独立地发生故障。设计时必须假设故障会发生,并确保部分故障不影响整体可用性。

  • 透明性: 理想情况下,分布式系统应向用户和应用程序隐藏其内部的分布性、并发性和故障细节,使其感觉像是在使用单台计算机。包括:

    • 访问透明性: 本地和远程资源访问方式一致。

    • 位置透明性: 无需知道资源的具体物理位置。

    • 并发透明性: 多个用户并发访问共享资源时互不干扰。

    • 复制透明性: 用户不知道资源存在多个副本。

    • 故障透明性: 系统能屏蔽部分故障,继续提供服务。

    • 迁移透明性: 资源在节点间移动不影响用户访问。

    • 性能透明性: 负载变化时系统能重新配置以保持性能。

    • 扩展透明性: 扩展系统规模不影响现有用户和程序。

  • 可扩展性: 系统能够方便地通过增加节点来扩展容量和能力。需避免瓶颈(如中心化组件)和协议效率下降(如广播风暴)。

4、核心挑战与难点

  • 网络问题:

    • 延迟: 节点间通信需要时间,且不稳定。

    • 带宽限制: 网络传输速度有限。

    • 分区: 网络故障可能导致部分节点间无法通信。

    • 不可靠性: 消息可能丢失、损坏、重复、乱序到达。

  • 部分失败: 系统的一部分(节点、进程、网络连接)可能失效,而其他部分仍在运行。检测和应对部分失败非常复杂。

  • 协调与一致性:

    • 在多个节点上维护数据副本时,如何确保所有副本保持一致?

    • 如何协调多个节点上的并发操作?例如,在分布式事务中保证所有参与者要么全部提交,要么全部回滚。

    • CAP定理: 在网络分区发生时,无法同时满足强一致性、高可用性和分区容忍性这三者,必须有所取舍。

  • 复杂性:

    • 设计、开发、测试、部署、监控和调试分布式系统比单机系统困难得多。

    • 需要考虑并发、故障、网络延迟、时钟不同步、安全等交织在一起的复杂问题。

  • 安全:

    • 网络通信更容易受到窃听、篡改、中间人攻击等威胁。

    • 需要更强的身份认证、授权、加密和审计机制。

  • 异构性: 节点可能使用不同的硬件、操作系统、编程语言或中间件,需要协议和接口来屏蔽差异。

5、分布式理论

5.1 CAP定理

CAP 定理指出,在一个异步网络模型(存在网络延迟、分区、丢包、乱序)且可能出现节点故障的分布式系统中,不可能同时满足以下三个属性:

  • C: 一致性 - 所有节点在同一时刻看到的数据是相同的。

    • 更精确地说,指的是 线性一致性 或 强一致性:任何读取操作都会返回最近一次写入的值(或错误),并且对所有观察者来说,操作的顺序看起来是全局一致的、实时的。

    • 简单理解:就像整个系统只有一份数据,所有读写操作都瞬间原子性地完成并让所有节点感知到。

  • A: 可用性 - 每一个非故障节点接收到的每一个请求,都必须在有限时间内得到非错误的响应。

    • 这里的“有限时间”不是指零延迟,而是指请求不能无限期挂起或阻塞。

    • 系统必须始终能够处理读写请求,并给出响应(即使不是最新的数据)。

    • 强调的是系统整体对客户端的可用性。

  • P: 分区容错性 - 系统能够继续运行,即使网络发生分区(部分节点之间无法通信)。

    • 网络分区是分布式系统中无法完全避免的现实:交换机故障、路由器宕机、网线被挖断等,都可能导致集群被分割成两个或多个无法互相通信的子网络(称为“分区”)。

    • P 属性要求系统在这样的故障发生时,仍然能够作为一个整体提供服务(尽管可能功能受限)。

核心结论:

  • 在网络分区(P)不可避免的前提下,必须在一致性(C)和可用性(A)之间做出取舍。

    • ​CP: 要准确数据,部分服务可以停。
    • AP: 服务不能停,数据暂时不准没关系,以后慢慢修。

  • 无法设计出一个分布式系统,能够在发生网络分区时,同时保证强一致性和高可用性。

  • CAP 定理描述的是在网络分区发生时,系统行为的一种“三选二”的权衡状态。

5.2 PACELC 定理

  • 核心: 对 CAP 的扩展和细化,更全面地描述分布式系统的设计权衡。

  • 含义:

    • P (Partition): 如果发生分区。

    • A (Availability) vs C (Consistency): 必须在 A 和 C 之间选择。

    • E (Else): 否则(没有分区,系统运行正常)。

    • L (Latency) vs C (Consistency): 必须在 L(延迟)和 C(一致性)之间选择。

  • 解释:

    • 在分区发生时,和 CAP 一样,需要在 A 和 C 之间权衡。

    • 没有分区的正常情况下,系统设计者仍然面临一个权衡:为了提供强一致性,通常需要节点间进行更多的通信协调(如法定人数读写、共识协议),这会增加操作的延迟。因此,即使在正常运行时,追求强一致性往往以更高的延迟为代价。

  • 例子:

    • PA/EL: DynamoDB (AP 模式)。分区时选 A (可用性),正常时选 L (低延迟,最终一致)。

    • PC/EC: ZooKeeper, etcd。分区时选 C (一致性),正常时也选 C (强一致,接受更高延迟)。

    • PA/EC: 比较少见,因为正常时选强一致通常会带来延迟。

    • PC/EL: 分区时选一致(可能不可用),正常时选低延迟(弱一致)。这种组合较少。

5.3 BASE理论

  • 核心:是 CAP 定理中 AP 方向(优先保证可用性和分区容错性)的具体实践和延伸
    • 牺牲强一致性: 不再追求数据的实时、全局强一致。

    • 拥抱弱一致性: 接受数据在一段时间内可能存在不一致的状态。

    • 优先保证高可用: 确保系统在出现部分故障(如网络分区、节点宕机)时,核心功能依然可用,能够响应请求。

    • 最终达到一致: 通过系统内部的补偿、修复机制,保证在故障恢复或经过一段时间后,数据最终会达到一致的状态。

  • 含义:
    • B - Basically Available (基本可用):分布式系统在出现不可预知的故障(非计划内宕机)时,允许损失部分非核心功能的可用性或降低部分非核心功能的性能表现,但核心功能必须保证可用

    • S - Soft State (软状态 / 柔性状态):允许系统中的数据存在一个中间状态,这个状态可能不基于最新数据,并且不需要立即可见或同步到所有节点。软状态是数据不一致性存在的时间窗口

    • E - Eventually Consistent (最终一致性): 整个系统保证,在没有新的更新操作发生的前提下,经过一段有限的时间(可能是几毫秒、几秒、几分钟甚至更长)后,所有的数据副本最终都会达到一致的状态。 这是 BASE 理论的最终目标。

  • BASE vs. ACID:
特性ACID (传统数据库)BASE (现代分布式系统)
一致性强一致性:事务后立即可见,全局一致弱一致性 (最终一致性):允许短暂不一致,最终达成一致
可用性通常优先保证一致性,可能牺牲可用性 (CP)优先保证核心可用性 (AP),牺牲强一致性
隔离性严格隔离 (如可串行化)通常放宽隔离性,可能读到中间状态
设计哲学悲观、保守、严谨乐观、灵活、务实
适用场景银行转账、库存扣减 (强一致要求)社交动态、商品浏览计数、评论、推荐系统 (高可用要求)
事务模型刚性事务 (2PC)柔性事务 (TCC, Saga, 可靠消息)

6、核心技术组件与概念

  • 通信:

    • 远程过程调用-RPC: 像调用本地函数一样调用远程机器上的函数。

    • 消息队列: 异步、解耦的通信方式,提供可靠传递、缓冲等特性。

    • RESTful API / gRPC: 常用的进程间通信协议。

  • 协调与共识:

    • 分布式锁: 协调对共享资源的互斥访问。

    • 选举算法: 在多个节点中选出一个领导者来协调工作。

    • 共识协议: 在不可靠网络和可能故障的节点间,就某个值达成一致。核心协议是Paxos及其变种(如Raft,因其易于理解而流行)、ZAB

  • 数据管理:

    • 分布式文件系统: 如HDFS、GFS。

    • 分布式数据库:

      • NoSQL: 为可扩展性、高性能设计,通常牺牲强一致性(如Cassandra、MongoDB、Redis Cluster)。

      • NewSQL: 试图兼顾NoSQL的可扩展性和传统SQL数据库的ACID特性(如Google Spanner、CockroachDB)。

      • 分片: 将大型数据集水平分割存储到多个节点。

      • 复制: 在多个节点存储数据副本以提高可用性和性能。复制策略有主从复制、多主复制、无主复制。

    • 一致性模型: 强一致性、最终一致性、因果一致性、读写一致性等,不同场景选择不同模型。

  • 容错:

    • 冗余: 关键组件部署多个副本。

    • 心跳检测: 监控节点存活状态。

    • 故障检测: 判断节点是否真的失效。

    • 故障恢复: 主节点失效时选举新主、副本失效后重新复制数据等。

  • 命名与发现: 如何在动态变化的分布式环境中定位服务或资源?如DNS、服务注册中心。

  • 调度与负载均衡: 将任务或请求分配到合适的节点上执行,避免热点,充分利用资源。

7、主流技术栈与框架

  • 消息队列: Kafka, RabbitMQ, RocketMQ, Pulsar

  • 协调服务: ZooKeeper, etcd, Consul

  • 分布式计算框架: MapReduce, Apache Spark, Apache Flink

  • 分布式存储:

    • 文件/对象存储: HDFS, Ceph, MinIO

    • NoSQL数据库: Cassandra, MongoDB, Redis Cluster, DynamoDB, HBase

    • NewSQL数据库: CockroachDB, TiDB, YugabyteDB, Google Spanner

  • 微服务框架: Spring Cloud, Dubbo, gRPC, Service Mesh (Istio, Linkerd)

  • 容器编排: Kubernetes (K8s) - 现代分布式应用部署、管理和扩展的事实标准。

8、典型应用场景

  • 互联网服务: 大型网站(如淘宝、微信、Google、Facebook)、社交网络、搜索引擎、电子邮件。

  • 云计算: IaaS, PaaS, SaaS平台(如阿里云、AWS、Azure)本身就是巨大的分布式系统。

  • 大数据处理: Hadoop, Spark等平台处理海量数据。

  • 内容分发网络: 将内容缓存到靠近用户的边缘节点。

  • 金融系统: 高并发交易处理、分布式账本/区块链。

  • 物联网: 连接和管理海量设备。

  • 科学计算: 大规模并行模拟和计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熙客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值