`
zzy7182
  • 浏览: 122877 次
  • 性别: Icon_minigender_1
  • 来自: 火车头
社区版块
存档分类
最新评论
阅读更多
Posts Tagged ‘zookeeper’


Paxos在大型系统中常见的应用场景
Wednesday, Sep 23rd, 2009 by Tim | 2 Comments
Filed under: 分布式 | Tags: chubby, paxos, zookeeper

在分布式算法领域,有个非常重要的算法叫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理论正确性。大部分系统都是靠在实践中运行很长一段时间才能谨慎的表示,目前系统已经基本没有发现大的问题了
分享到:
评论

相关推荐

    zookeeper可视化工具

    **Zookeeper可视化工具详解** Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供高度可靠的命名服务、配置管理、集群同步、领导选举等核心功能。在运维和开发过程中,为了更方便地管理和监控...

    Zookeeper_安装和配置

    Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...

    zookeeper-3.4.6_zookeeper_

    6. **配置管理**:在分布式系统中,配置的更新和同步是常见的需求。Zookeeper可以作为集中式的配置中心,确保所有节点共享同一份配置,减少配置错误的可能性。 7. **集群管理**:Zookeeper可以帮助管理和监控分布式...

    ZooKeeper-分布式过程协同技术详解 和从Paxos到Zookeeper

    《ZooKeeper:分布式过程协同技术详解》与《从Paxos到Zookeeper:分布式一致性原理与实践》这两本书深入探讨了分布式系统中的关键组件ZooKeeper及其背后的一致性算法Paxos。ZooKeeper是由Apache软件基金会开发的一个...

    zookeeper集群升级方案

    6. **状态检查**: - 通过命令检查集群状态是否正常。 ```bash /usr/local/zookeeper/bin/zkServer.sh status ``` #### 四、注意事项 - 在升级过程中,需密切关注集群状态,确保各节点能够平稳过渡。 - 如果...

    centos8安装zookeeper3.8.0详细步骤

    6. 查看状态 ``` cd /usr/local/zookeeper/bin/ ./zkServer.sh status ``` 至此,单机版的 ZooKeeper 就安装成功了。 7. 搭建 ZooKeeper 集群 7.1. 配置集群 在 `/usr/local/zookeeper/conf` 目录下编辑 `zoo.cfg...

    zookeeper 3.6.3 源码下载

    6. **API实现**:包括各种操作如create、delete、get、set等的实现,以及Watcher的触发机制。 通过阅读源码,我们可以深入了解ZooKeeper如何处理并发、如何进行数据同步、如何实现Watcher机制,以及如何保证分布式...

    ZooKeeper3.4.9 windos和linux

    《ZooKeeper 3.4.9:在Windows与Linux上的部署与应用》 ZooKeeper,一个由Apache基金会开发的分布式协调服务,是许多大型分布式系统中的关键组件。3.4.9版本是ZooKeeper的一个稳定版本,提供了一系列增强功能和性能...

    zookeeper增加权限登录验证

    6.最后,执行 `get` 命令来查看可访问的 IP 列表:`./zkCli.sh -server <ip> get /zookeeper/extends/limited_ip` 三、实现机制 在 ZooKeeper 中,IP 访问限制是通过创建专门的节点来实现的。这些节点存储了允许...

    zookeeper linux集群搭建流程

    6. 查看根目录 ls / 7. 创建 testnode 节点,关联字符串"zz" create /zk/testnode "zz" 8. 查看节点内容 get /zk/testnode 9. 设置节点内容 set /zk/testnode abc 10. 删除节点 delete /zk/testnode ZooKeeper 工作...

    zookeeper-3.4.12版本

    Zookeeper是Apache软件基金会的一个开源项目,主要用于分布式协调服务,它是集群管理的基石,被广泛应用于大数据、云计算等领域。Zookeeper 3.4.12是该系统的一个稳定版本,提供了解压即用的便利性。 一、Zookeeper...

    【Zookeeper管理工具】

    6. **命令行模拟**: 提供类似Zookeeper命令行的交互界面,可以执行常见的Zookeeper命令,如`ls`, `get`, `set`等。 **源码分析** 对于开发者来说,深入理解Zookeeper管理工具的源码可以帮助我们更好地定制和优化...

    linux中zookeeper安装包zookeeper-3.4.8.tar

    在IT领域,Zookeeper是一个非常重要的分布式协调服务,由Apache Hadoop项目开发并维护。它在大规模分布式系统中被广泛用于数据管理、配置共享、命名服务、群组服务以及分布式同步。Zookeeper-3.4.8是其一个稳定版本...

    zookeeper-3.8.0安装包下载

    6. lib:依赖的库文件,包括各种 JAR 包,这些是 Zookeeper 正常运行所必需的。 7. logs:日志文件默认保存的目录,可以在此查看 Zookeeper 服务的运行日志,帮助排查问题。 8. build:构建相关文件,通常不需要直接...

    Zookeeper双机房容灾方案.pdf

    Zookeeper双机房容灾方案.pdf Zookeeper双机房容灾方案是指在分布式系统中使用Zookeeper来实现高可用性和容灾的方案。本方案使用5个Zookeeper实例来实现高可用性和容灾。 Zookeeper选举机制是指Zookeeper集群中...

    zookeeper-3.4.6.zip

    6. **最佳实践** - **数据大小限制**:单个ZNode的数据量不宜过大,通常建议控制在1KB以下。 - **监控与报警**:对Zookeeper集群的运行状态进行实时监控,并设置合理的报警阈值。 - **安全性**:启用...

    zookeeper版本为zookeeper-3.4.10.tar.gz

    6. **客户端操作**:通过zkCli.sh工具与Zookeeper交互,进行节点的创建、读取、更新、删除等操作。 Zookeeper的应用场景广泛,常用于配置管理、命名服务、分布式锁、集群管理、分布式队列等。例如,在Hadoop、Kafka...

    zookeeper-3.9.1.zip

    6. **docs** 目录:包含Zookeeper的文档,包括用户手册和API参考,帮助用户理解和使用Zookeeper。 7. **zkData** 目录:也需用户手动创建,用于存放Zookeeper的事务日志和快照,这是Zookeeper持久化数据的地方。 在...

    zookeeper日志查看工具

    #Zookeeper的日志可以用LogFormatter查看 ##命令方式如下 java -classpath .:slf4j-api-1.7.2.jar:zookeeper-3.4.6.jar org.apache.zookeeper.server.LogFormatter /var/lib/zookeeper/version-2/log.1 ##window...

    zookeeper-3.4.11安装包

    6. 启动ZooKeeper服务,运行`zkServer.cmd start`。 **安装ZooKeeper 3.4.11 on CentOS:** 1. 安装Java运行环境,因为ZooKeeper依赖Java。 2. 下载`zookeeper-3.4.11`压缩包并解压至指定目录。 3. 创建ZooKeeper的...

Global site tag (gtag.js) - Google Analytics