《ZooKeeper:分布式过程协同技术详解》——1.3 分布式协作的难点

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介:

本节书摘来自华章计算机《ZooKeeper:分布式过程协同技术详解》一书中的第1章,第1.3节,作者:Flavio Junqueira, Benjamin Reed 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3 分布式协作的难点

当开发分布式应用时,其复杂性会立即突显出来。例如,当我们的应用启动后,所有不同的进程通过某种方法,需要知道应用的配置信息,一段时间之后,配置信息也许发生了变化,我们可以停止所有进程,重新分发配置信息的文件,然后重新启动,但是重新配置就会延长应用的停机时间。
与配置信息问题相关的是组成员关系的问题,当负载变化时,我们希望增加或减少新机器和进程。
当你自己实现分布式应用时,这个问题仅仅被描述为功能性问题,你可以设计解决方案,部署前你测试了你的解决方案,并非常确定地认为你已经正确解决了问题。当你在开发分布式应用时,你就会遇到真正困难的问题,你就不得不面对故障,如崩溃、通信故障等各种情况。这些问题会在任何可能的点突然出现,甚至无法列举需要处理的所有的情况。
注意: 拜占庭将军问题

拜占庭将军问题(Byzantine Faults)是指可能导致一个组件发生任意行为(常常是意料之外的)的故障。这个故障的组件可能会破坏应用的状态,甚至是恶意行为。系统是建立在假设会发生这些故障,需要更高程度的复制并使用安全原语的基础上。尽管我们从学术文献中知道,针对拜占庭将军问题技术发展已经取得了巨大进步,我们还是觉得没有必要在ZooKeeper中采用这些技术,因此,我们也避免代码库中引入额外的复杂性。

在独立主机上运行的应用与分布式应用发生的故障存在显著的区别:在分布式应用中,可能会发生局部故障,当独立主机崩溃,这个主机上运行的所有进程都会失败,如果是独立主机上运行多个进程,一个进程执行的失败,其他进程可以通过操作系统获得这个故障,操作系统提供了健壮的多进程消息通信的保障。在分布式环境中这一切发生了改变:如果一个主机或进程发生故障,其他主机继续运行,并会接管发生故障的进程,为了能够处理故障进程,这些仍在运行的进程必须能够检测到这个故障,无论是消息丢失或发生了时间偏移。
理想的情况下,我们基于异步通信的假设来设计系统,即我们使用的主机有可能发生时间偏移或通信故障。我们做出这个假设是因为这一切的确会发生,时间偏移时常会发生,我们偶尔就会遇到网络问题,甚至更不幸的,发生故障。我们可以做什么样的限制呢?
我们来看一个最简单的情况。假设我们有一个分布式的配置信息发生了改变,这个配置信息简单到仅仅只有一个比特位(bit),一旦所有运行中的进程对配置位的值达成一致,我们应用中的进程就可以启动。
这个例子原本是一个在分布式计算领域非常著名的定律,被称为FLP(由其作者命名:Fischer,Lynch,Patterson),这个结论证明了在异步通信的分布式系统中,进程崩溃,所有进程可能无法在这个比特位的配置上达成一致注1。类似的定律称为CAP,表示一致性(Consistency)、可用性(Availability)和分区容错性(Partition-tolerance),该定律指出,当设计一个分布式系统时,我们希望这三种属性全部满足,但没有系统可以同时满足这三种属性注2。因此ZooKeeper的设计尽可能满足一致性和可用性,当然,在发生网络分区时ZooKeeper也提供了只读能力。
因此,我们无法拥有一个理想的故障容错的、分布式的、真实环境存在的系统来处理可能发生的所有问题。但我们还是可以争取一个稍微不那么宏伟的目标。首先,我们只好对我们的假设或目标适当放松,例如,我们可以假设时钟在某种范围内是同步的,我们也可以牺牲一些网络分区容错的能力并认为其一直是一致的,当一个进程运行中,也许多次因无法确定系统中的状态而被认为已经发生故障。虽然这些是一些折中方案,而这些折中方案允许我们建立一些印象非常深刻的分布式系统。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2月前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
167 1
|
2月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
110 2
|
3月前
|
存储 运维 NoSQL
分布式读写锁的奥义:上古世代 ZooKeeper 的进击
本文作者将介绍女娲对社区 ZooKeeper 在分布式读写锁实践细节上的思考,希望帮助大家理解分布式读写锁背后的原理。
114 11
|
3月前
|
监控 算法 网络协议
|
3月前
|
供应链 算法 安全
深度解析区块链技术的分布式共识机制
深度解析区块链技术的分布式共识机制
95 0
|
4月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
4月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
81 2
|
4月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
80 1
|
4月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
72 0