【Zookeeper】ZK 是干什么的?
Zookeeper 的前世今生:Apache ZooKeeper 是一个高可靠的分布式协调中间件。它是 Google Chubby 的一个开源实现,那么它主要是解决什么问题的呢?那就得先了解Google Chubby Google Chubby是谷歌的一个用来解决分布式一致性问题的组件,同时,也是粗粒度的分布式锁服务。
1.分布式一致性问题
什么是分布式一致性问题呢?简单来说,就是在一个分布式系统中,有多个节点,每个节点都会提出一个请求,但是在所有节点中只能确定一个请求被通过。而这个通过是需要所有节点达成一致的结果,所以所谓的一致性就是在提出的所有请求中能够选出最终一个确定请求。 并且这个请求选出来以后,所有的节点都要知道。
一致性:在分布式架构中,预期行为与实际行为的一致情况,以实现可预测(注:这和我们对于集群数据的一致性(强/弱/结果)不一样)
以下例子除以这篇博客
用户在京东上下了一个订单,发现自己在京东的账户里面有余额,然后使用余额支付,支付成功之后,订单状态修改为支付成功,然后通知仓库发货。假设订单系统,支付系统,仓库系统是三个独立的应用,是独立部署的,系统之间通过远程服务调用。
订单的有三个状态:I:初始 P:已支付 W:已出库,订单金额100, 会员帐户余额200
如果整个流程比较顺利,正常情况下,订单的状态会变为I->P->W,会员帐户余额100,订单出库。
但是如果流程不顺利了呢?考虑以下几种情况
1:订单系统调用支付系统支付订单,支付成功,但是返回给订单系统数据超时,订单还是I(初始状态),但是此时会员帐户余额100,会员肯定会马上找京东骂京东,为啥不给老子发货,我都付钱了
2:订单系统调用支付系统成功,状态也已经更新成功,但是通知仓库发货失败,这个时候订单是P(已支付)状态,此时会员帐户余额是100,但是仓库不会发货。会员也要骂京东。
3:订单系统调用支付系统成功,状态也已经更新成功,然后通知仓库发货,仓库告诉订单系统,没有货了。这个时候数据状态和第二种情况一样。
所以,一致性问题是分布式最重要问题之一,现在的解决方案有Raft协议,Paxos协议,Zab协议等。另外,一个多核CPU也可以认为是一个小型分布式系统,因此一致性也可用于单机
2.分布式锁服务
Chubby 提供了一种粗粒度的锁服务,chubby是通过创建文件的形式来提供锁的服务
- 加锁:server向chubby中创建文件
- 加锁成功:创建文件成功
总结:由于谷歌Chubby没有开源,所以雅虎公司基于chubby的思想,开发了一个类似的分布式协调组件Zookeeper,并捐给了Apache,所以Zookeeper的设计之初并不是为了注册中心而设计,注册中心只是它的一个功能而已
【Zookeeper】ZK 是干什么的?相关推荐
- Kafka+SparkStreaming+Zookeeper(ZK存储Offset,解决checkpoint问题)
创建一个topic ./kafka-topics.sh --create --zookeeper 192.168.1.244:2181,192.168.1.245:2181,192.168.1.246 ...
- Apache ZooKeeper - ZK的内存数据 + 持久化事务日志 + 数据快照 初探
文章目录 内存数据 源码实现 事务日志 配置项 查看事务日志数据 LogFormatter 写入日志的优化 (预分配) 数据快照 查看数据快照数据 SnapshotFormatter 事务日志 VS ...
- Apache ZooKeeper - ZK的ACL权限控制( Access Control List )
文章目录 概述 权限模式(Scheme) 口令验证 范围验证 Super权限模式 授权对象(ID) 权限信息(Permission) ACL相关命令 跳过ACL检测 实操ACL 生成授权ID 方式一 ...
- Apache ZooKeeper - ZK的基本特性与节点应用场景一览
文章目录 概述 ZK产生的背景 安装 JDK依赖 下载 解压 修改配置文件 启动 / 停止 连接服务器 配置文件说明 ZK 核心概念 (文件系统数据结构+监听通知机制) 文件系统数据结构 6种Node ...
- zookeeper到底是干什么的?
我也是初学zk,整理下资料,希望能对你有帮助! 提起zk我们总会想到,zk可以被用作注册中心.构建zk集群时候节点最好为奇数-- 可见我们对zk理解仅仅停在表面.那么zk到底是什么呢 ? 一.什么是z ...
- Apache ZooKeeper - ZK的数据和文件
文章目录 目标 内存数据 事务日志 数据快照 小结 目标 本篇博文,我们主要聚焦在ZooKeeper 程序运行期间,都会处理哪些数据,以及他们的存储格式和存储位置. ZooKeeper 服务提供了创建 ...
- linux zk集群,linux ZooKeeper集群安装
dataDir=/hadoop/zookeeper clientPort=2181 server.1=hadoop-master:28888:38888 server.2=hadoop-slave01 ...
- zk 02之 Windows安装和使用zookeeper
本文介绍的 Zookeeper 是以 3.4.5 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非 ...
- zookeeper(3)—— zk客户端的使用
目录 一.常用客户端 1.1 原生API 1.1.1 增删改查 1.1.2 监听机制 1.2 zkClient 1.2.1 增删改查 1.2.2 监听机制 一.常用客户端 zk目前有三种客户端:原生A ...
最新文章
- IntelliJ IDEA 2018.1新特性
- 自学python需要多长时间-零基础学习Python开发需要多长时间?
- 查看mysql日志大小,SQL Server:查看SQL日志文件大小命令:dbcc sqlperf(logspace)
- 数据存储方式_详解西门子S7-200PLC的数据区
- sdut 数据结构实验之二叉树六:哈夫曼编码
- ubuntu vim保存退出命令_【学员分享】程序员效率神器,最常用VIM插件安装大全...
- 洛谷 P1036 [NOIP2002 普及组] 选数(DFS)
- linux系统网络命令(六)
- bzoj 3676: [Apio2014]回文串
- 树莓派引脚介绍与GPIO的初步认识与应用
- 2017中国产品经理大会总结-我又开始相信可以改变世界了
- 计算机教育课题申请报告,课题结项申请报告
- OCiOS开发:汉字转拼音
- js(javascript)和jq(jquery)常见问题(持续更新)
- python打气球小游戏(一)
- 新版Iconfont-阿里巴巴矢量图标库支持三种引用方式
- PyQt5 QTableWidget 删除所有行
- Vue table 点击按钮展开折叠面板
- drf celery
- word中插入endnote 为什么会是大括号,而且后面没有文献