Paxos算法在大型系统中常见的应用场景是什么

86次阅读
没有评论

共计 2738 个字符,预计需要花费 7 分钟才能阅读完成。

本篇文章为大家展示了 Paxos 算法在大型系统中常见的应用场景是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

在分布式算法领域,有个非常重要的算法叫 Paxos, 它的重要性有多高呢,Google 的 Chubby [1]中提到

all working protocols for asynchronous consensus we have so far encountered have Paxos at their core.

关于 Paxos 算法的详述在维基百科中有更多介绍,中文版介绍的是 choose value 的规则 [2],英文版介绍的是 Paxos 3 phase commit 的流程[3],中文版不是从英文版翻译而是独立写的,所以非常具有互补性。Paxos 算法是由 Leslie Lamport 提出的,他在 Paxos Made Simple[4] 中写道

The Paxos algorithm, when presented in plain English, is very simple.

当你研究了很长一段时间 Paxos 算法还是有点迷糊的时候,看到上面这句话可能会有点沮丧。但是公认的它的算法还是比较繁琐的,尤其是要用程序员严谨的思维将所有细节理清的时候,你的脑袋里更是会充满了问号。Leslie Lamport 也是用了长达 9 年的时间来完善这个算法的理论。

实际上对于一般的开发人员,我们并不需要了解 Paxos 所有细节及如何实现,只需要知道 Paxos 是一个分布式选举算法就够了。本文主要介绍一下 Paxos 常用的应用场合,或许有一天当你的系统增大到一定规模,你知道有这样一个技术,可以帮助你正确及优雅的解决技术架构上一些难题。

1. database replication, log replication 等,如 bdb 的数据复制就是使用 paxos 兼容的算法。Paxos 最大的用途就是保持多个节点数据的一致性。

2. naming service, 如大型系统内部通常存在多个接口服务相互调用。
1) 通常的实现是将服务的 ip/hostname 写死在配置中,当 service 发生故障时候,通过手工更改配置文件或者修改 DNS 指向的方法来解决。缺点是可维护性差,内部的单元越多,故障率越大。
2) LVS 双机冗余的方式,缺点是所有单元需要双倍的资源投入。
通过 Paxos 算法来管理所有的 naming 服务,则可保证 high available 分配可用的 service 给 client。象 ZooKeeper 还提供 watch 功能,即 watch 的对象发生了改变会自动发 notification, 这样所有的 client 就可以使用一致的,高可用的接口。

3.config 配置管理
1) 通常手工修改配置文件的方法,这样容易出错,也需要人工干预才能生效,所以节点的状态无法同时达到一致。
2) 大规模的应用都会实现自己的配置服务,比如用 http web 服务来实现配置中心化。它的缺点是更新后所有 client 无法立即得知,各节点加载的顺序无法保证,造成系统中的配置不是同一状态。

4.membership 用户角色 /access control list, 比如在权限设置中,用户一旦设置某项权限比如由管理员变成普通身份,这时应在所有的服务器上所有远程 CDN 立即生效,否则就会导致不能接受的后果。

5. 号码分配。通常简单的解决方法是用数据库自增 ID, 这导致数据库切分困难,或程序生成 GUID, 这通常导致 ID 过长。更优雅的做法是利用 paxos 算法在多台 replicas 之间选择一个作为 master, 通过 master 来分配号码。当 master 发生故障时,再用 paxos 选择另外一个 master。

这里列举了一些常见的 Paxos 应用场合,对于类似上述的场合,如果用其它解决方案,一方面不能提供自动的高可用性方案,同时也远远没有 Paxos 实现简单及优雅。

Yahoo! 开源的 ZooKeeper [5]是一个开源的类 Paxos 实现。它的编程接口看起来很像一个可提供强一致性保证的分布式小文件系统。对上面所有的场合都可以适用。但可惜的是,ZooKeeper 并不是遵循 Paxos 协议,而是基于自身设计并优化的一个 2 phase commit 的协议,因此它的理论 [6] 并未经过完全证明。但由于 ZooKeeper 在 Yahoo! 内部已经成功应用在 HBase, Yahoo! Message Broker, Fetch Service of Yahoo! crawler 等系统上,因此完全可以放心采用。

另外选择 Paxos made live [7]中一段实现体会作为结尾。

*  There are significant gaps between the description of the Paxos algorithm and the needs of a real-world system. In order to build a real-world system, an expert needs to use numerous ideas scattered in the literature and make several relatively small protocol extensions. The cumulative effort will be substantial and the final system will be based on an unproven protocol.
* 由于 chubby 填补了 Paxos 论文中未提及的一些细节,所以最终的实现系统不是一个理论上完全经过验证的系统

* The fault-tolerance computing community has not developed the tools to make it easy to implement their algorithms.
* 分布式容错算法领域缺乏帮助算法实现的的配套工具, 比如编译领域尽管复杂,但是 yacc, ANTLR 等工具已经将这个领域的难度降到最低。

* The fault-tolerance computing community has not paid enough attention to testing, a key ingredient for building fault-tolerant systems.
* 分布式容错算法领域缺乏测试手段

这里要补充一个背景,就是要证明分布式容错算法的正确性通常比实现算法还困难,Google 没法证明 Chubby 是可靠的,Yahoo! 也不敢保证它的 ZooKeeper 理论正确性。大部分系统都是靠在实践中运行很长一段时间才能谨慎的表示,目前系统已经基本没有发现大的问题了。

上述内容就是 Paxos 算法在大型系统中常见的应用场景是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计2738字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)