02、分布式系统的经典基础理论入门

1、分布式系统的经典基础理论

分布式系统是由多个独立的计算机节点组成的系统,这些节点通过网络相互连接并协同工作,以完成特定的任务。

分布式系统中3个常见的概念: 分布式系统设计理念 、 CAP定理 、 BASE理论 ,关于分布式系统的还有很多东西。

2、分布式系统设计理念

2.1 可靠性

分布式系统需要保证高可靠性,就是在节点故障或网络故障的情况下,也能够保持系统的正常运行。为了实现这个目标,分布式系统通常采用冗余设计和容错技术,例如备份节点、数据复制和负载均衡等。

2.2 可扩展性

分布式系统需要能够支持横向扩展,就是能够通过增加节点来扩展系统的处理能力。为了实现这个目标,分布式系统通常采用分布式数据存储和分布式计算等技术,以便将负载平均分配到各个节点上。

2.3 可维护性

分布式系统需要能够方便地进行维护和管理。为了实现这个目标,分布式系统通常采用自动化运维和监控技术,例如自动部署、自动扩缩容和实时监控等。

2.4 可移植性

分布式系统需要能够在不同的硬件和软件平台上运行。为了实现这个目标,分布式系统通常采用标准化的接口和协议,以便在不同平台上实现互操作性。

2.5 安全性

分布式系统需要能够保证数据和系统的安全。为了实现这个目标,分布式系统通常采用安全传输协议和数据加密技术,以及访问控制和身份认证等安全机制。

强烈推荐《分布式架构原理与实践》,它是一本非常好的分布式架构原理与实践学习教程,内容全面详细,清晰易懂,很有实战意义,非常适合开发人员学习,希望对大家有所帮助!

3、CAP定理

3.1 什么是CAP

CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)Availability(可用性)Partition tolerance(分区容错性)这三个基本需求,最多只能同时满足其中的2个。

  • 一致性:数据在多个副本之间能够保持一致的特性。

  • 可用性:系统提供的服务一直处于可用的状态,每次请求都能获得正确的响应。

  • 分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

3.2 什么是分区

分布式系统中,不同的节点分布在不同的子网络中,由于一些特殊的原因,这些子节点之间出现了网络不通的状态,但他们的内部子网络是正常的。从而导致了整个系统的环境被切分成了若干个孤立的区域,这就是分区

3.3 为什么三者不可得兼

首先,我们得知道,分布式系统,是避免不了分区的,分区容错性是一定要满足的,我们看看在满足分区容错的基础上,能不能同时满足一致性可用性

假如现在有两个分区N1N2,N1和N2分别有不同的分区存储D1和D2,以及不同的服务S1和S2。

  • 在满足一致性 的时候,N1和N2的数据要求值一样的,D1=D2。

  • 在满足可用性的时候,无论访问N1还是N2,都能获取及时的响应。

现在有这样的场景:

  • 用户访问了N1,修改了D1的数据。

  • 用户再次访问,请求落在了N2。此时D1和D2的数据不一致。

接下来:

  • 保证一致性:此时D1和D2数据不一致,要保证一致性就不能返回不一致的数据,可用性无法保证。

  • 保证可用性:立即响应,可用性得到了保证,但是此时响应的数据和D1不一致,一致性无法保证。

所以,可以看出,分区容错的前提下,一致性可用性是矛盾的

3.4 CAP原则权衡

CAP三者不可同得,那么必须得做一些权衡。

CA without P

如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但是对于分布式系统,分区是客观存在的,其实分布式系统理论上是不可选CA的。

CP without A

如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。

AP wihtout C

要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类

3.5 CAP原则实际应用

我们应该都接触过微服务,常见的可以作为注册中心的组件有:ZooKeeper、Eureka、Nacos等等

  1. ZooKeeper 保证的是 CP。 任何时刻对 ZooKeeper 的读请求都能得到一致性的结果,但是,ZooKeeper 不保证每次请求的可用性,比如在Leader 选举过程中或者半数以上的机器不可用的时候服务就是不可用的。

  2. Eureka 保证的则是 AP。 Eureka 在设计的时候就是优先保证 A (可用性)。在 Eureka 中不存在什么 Leader 节点,每个节点都是一样的、平等的。因此 Eureka 不会像 ZooKeeper 那样出现选举过程中或者半数以上的机器不可用的时候服务就是不可用的情况。 Eureka 保证即使大部分节点挂掉也不会影响正常提供服务,只要有一个节点是可用的就行了。只不过这个节点上的数据可能并不是最新的。

  3. Nacos 不仅支持 CP 也支持 AP。

4、BASE理论

4.1 什么是BASE理论

BASEBasically Available(基本可用)Soft-state(软状态)Eventually Consistent(最终一致性) 三个短语的缩写。

BASE 理论是对 CAP 中一致性 C 和可用性 A 权衡的结果,其来源于对大规模互联网系统分布式实践的总结,它是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。

BASE理论的核心思想是:

即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

4.2 BASE理论的三个特性

基本可用

什么是基本可用呢?

假如系统出现了不可预知故障,允许损失部分可用性,当然也不能完全不可用。

损失的这部分可用性指的是什么?

  • 响应时间上的损失:正常情况下的搜索引擎0.5秒即返回给用户结果,而基本可用的搜索引擎可以在2秒作用返回结果。

  • 功能上的损失:在一个电商网站上,正常情况下,用户可以顺利完成每一笔订单。但是到了大促期间,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。

软状态

软状态指允许系统中的数据存在中间状态CAP 理论中的数据不一致),并认为该中间状态的存在不会影响系统的整体可用性,就是允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

最终一致性

最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

分布式一致性的 3 种级别:

  1. 强一致性系统写入了什么,读出来的就是什么。

  2. 弱一致性 :不一定可以读取到最新写入的值,也不保证多少时间之后读取到的数据是最新的,只是会尽量保证某个时刻达到数据一致的状态。

  3. 最终一致性 :弱一致性的升级版,系统会保证在一定时间内达到数据一致的状态。

业界比较推崇是最终一致性级别,但是某些对数据一致要求十分严格的场景比如银行转账还是要保证强一致性。

最终一致性怎么保证呢?

  • 读时修复 : 在读取数据时,检测数据的不一致,进行修复。比如 Cassandra 的 Read Repair 实现,具体来说,在向 Cassandra 系统查询数据的时候,如果检测到不同节点的副本数据不一致,系统就自动修复数据。

  • 写时修复 : 在写入数据,检测数据的不一致时,进行修复。比如 Cassandra 的 Hinted Handoff 实现。具体来说,Cassandra 集群的节点之间远程写数据的时候,如果写失败就将数据缓存下来,然后定时重传,修复数据的不一致性。

  • 异步修复 : 这个是最常用的方式通过定时对账检测副本数据的一致性,并修复

5、总结

CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸,ACID 是数据库事务完整性的理论。

CAP理论严格来讲不是三选二,而是CPAP二选一,因为通常P(分区容错性)是必须得到保证的。

BASE理论面向的是大型高可用、可扩展的分布式系统。与传统ACID特性相反,不是强一致性模型,BASE提出通过牺牲强一致性来获得可用性,并允许数据一段时间内的不一致,但是最终需要达到一致状态。

6、分布式系统常见解决方案

6.1 分布式事务

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。

6.2 一致性协议/算法

早在1900年就诞生了著名的 Paxos经典算法Zookeeper就采用了Paxos算法的近亲兄弟Zab算法),但由于Paxos算法非常难以理解、实现、排错。所以不断有人尝试简化这一算法,直到2013年才有了重大突破:斯坦福的Diego Ongaro、John Ousterhout以易懂性为目标设计了新的一致性算法——Raft算法 ,并发布了对应的论文《In Search of an Understandable Consensus Algorithm》,到现在有十多种语言实现的Raft算法框架,较为出名的有以Go语言实现的Etcd,它的功能类似于Zookeeper,但采用了更为主流的Rest接口。

6.3 分布式存储

分布式存储系统将数据分散存储在多台独立的设备上

传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要

分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。

6.4 分布式计算

所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

分布式网络存储技术是将数据分散的存储于多台独立的机器设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性。

参考:

[1]. 分布式理论(一) - CAP定理

[2]. CAP理论

[3]. 分布式理论(二) - BASE理论

[4]. BASE理论

[5]. 分布式必备理论基础:CAP和BASE - 知乎

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Flink入门与实战PDF》是一本关于Apache Flink的入门和实践指南。Flink是一个开源的流式处理框架,拥有高效、可靠和可伸缩的特性,并且支持批处理和流处理两种模式。这本书主要是针对初学者,介绍Flink的基础知识和核心概念,以及如何在实际项目中应用Flink进行大数据处理和分析。 书中首先介绍了Flink的基本架构和部署方式,包括如何安装和配置Flink集群。然后详细解释了Flink的数据模型和流处理的原理,包括事件时间处理、窗口操作和状态管理等概念。接着,书中提供了大量的实例代码和案例分析,帮助读者了解如何使用Flink进行数据的转换和计算。同时,还介绍了Flink的高级特性,如Exactly-Once语义的保证和动态扩缩容等。最后,书中还涵盖了Flink与其他工具的集成,如Kafka和Hadoop等,以及如何在生产环境中调优和监控Flink应用程序。 《Flink入门与实战PDF》是一本全面而实用的学习指南,通过阅读本书,读者可以快速掌握Flink的基本知识和核心概念,并且能够运用Flink解决实际的大数据问题。无论是对于初学者还是有一定经验的开发者来说,本书都是一本不可多得的学习资料。无论是想要入门Flink的人,还是已经在实践中使用Flink的人,都可以从本书中获得很大的收益。 ### 回答2: 《Flink入门与实战》是一本介绍和教授Apache Flink技术的书籍。Flink是一个开源的流式处理框架,可以用于大数据分析和处理。这本书从基础概念开始,逐步介绍Flink的架构、应用场景和使用方法。 在入门部分,书中首先介绍了Flink的基本概念,如数据流、数据处理和状态管理等。然后,阐述了Flink的核心架构,包括任务管理器和资源管理器。读者可以通过这些内容了解Flink的基础知识和工作原理。 在实战部分,书中通过一系列实例和案例,引导读者使用Flink进行具体的数据处理和分析任务。例如,如何使用Flink进行数据流的窗口计算和连接操作,如何在Flink中实现事件驱动编程等。这些例子涵盖了不同的应用场景,包括实时数据处理、流式ETL和复杂事件处理等。 此外,书中还介绍了Flink的性能优化和故障恢复机制,帮助读者在实际应用中充分发挥Flink的潜力。通过阅读这本书,读者可以快速了解和掌握Flink的基本概念和用法,为实际项目的开发和部署打下坚实的基础。 总之,《Flink入门与实战》是一本系统全面介绍Apache Flink技术的实用教材。无论是对于初学者还是对于已有一定经验的开发人员,都是一本值得阅读和参考的书籍。 ### 回答3: 《Flink入门与实战 PDF》是一本针对Apache Flink流处理框架的入门和实战指南。Flink是一个快速、可靠且灵活的流处理引擎,广泛应用于大规模数据的实时处理和分析。 该PDF书籍首先介绍了Flink的基本原理和核心概念,包括数据流与数据集的不同、窗口的概念以及时间语义等。通过理论的讲解和实例的演示,读者可以快速了解Flink的基本知识。 之后,书籍详细介绍了Flink的安装与配置,包括单机模式和分布式模式的部署。通过按照书中的步骤进行操作,读者可以轻松搭建并运行Flink集群。 接着,书籍逐步介绍了Flink的常用API和功能。包括流处理API、批处理API、状态管理、事件时间处理以及窗口操作等。每个部分都有详细的代码示例和实战案例,读者可以通过实际操作来深入理解每个API和功能的使用方式。 最后,书籍还介绍了Flink在实际项目中的应用实践。包括Flink与Kafka、Hadoop、HBase等其他大数据生态系统的整合,以及Flink在互联网、电商、金融等领域的应用案例。 综上所述,《Flink入门与实战 PDF》通过系统而又实践的方式,帮助读者全面了解和掌握Flink的基础知识和高级功能。无论是初学者还是有一定经验的开发人员,都可以从中受益,加快学习和应用Flink的速度,为实时数据处理提供强大的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值