博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《ZooKeeper:分布式过程协同技术详解》——1.3 分布式协作的难点
阅读量:6330 次
发布时间:2019-06-22

本文共 1630 字,大约阅读时间需要 5 分钟。

本节书摘来自华章计算机《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也提供了只读能力。
因此,我们无法拥有一个理想的故障容错的、分布式的、真实环境存在的系统来处理可能发生的所有问题。但我们还是可以争取一个稍微不那么宏伟的目标。首先,我们只好对我们的假设或目标适当放松,例如,我们可以假设时钟在某种范围内是同步的,我们也可以牺牲一些网络分区容错的能力并认为其一直是一致的,当一个进程运行中,也许多次因无法确定系统中的状态而被认为已经发生故障。虽然这些是一些折中方案,而这些折中方案允许我们建立一些印象非常深刻的分布式系统。

转载地址:http://qzdoa.baihongyu.com/

你可能感兴趣的文章
前端项目课程3 jquery1.8.3到1.11.1有了哪些新改变
查看>>
UOJ#179. 线性规划(线性规划)
查看>>
整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
查看>>
Isolation Forest原理总结
查看>>
windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
redis 安装
查看>>
SQL some any all
查看>>
电子书下载:Programming Windows Identity Foundation
查看>>
有理想的程序员必须知道的15件事
查看>>
用于测试的字符串
查看>>
财付通和支付宝资料收集
查看>>
PHPCMS V9数据库表结构分析
查看>>
『原创』+『参考』基于PPC的图像对比程序——使用直方图度量
查看>>
理解 IEnumerable 与 IEnumerator
查看>>
NHibernate 2.0 Beta 1 Released和一些工具
查看>>
【每天一个Linux命令】12. Linux中which命令的用法
查看>>
软件接口数据一致性机制
查看>>
微服务架构介绍和RPC框架对比
查看>>
Debian下使用OpenLDAP 管理端
查看>>