SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
ZooKeeper

  高可用分布式协调系统
high available and reliable
   coordination system
zk的角色

  人体    分布式系统

  神经    网络

  器官    服务器

  大脑    zk
zk的角色
Standalone模式

$ cd zookeeper-3.4.2/
$ cat conf/zoo.cfg
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
Standalone模式
$ bin/zkServer.sh start
JMX enabled by default
Using config: /home/jxq/code/zookeeper-3.4.2/bin/../conf/
zoo.cfg
Starting zookeeper ... STARTED


$ bin/zkCli.sh -server 127.0.0.1:2181


Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2181(CONNECTED) 0] help
Standalone模式
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
       connect host:port
       get path [watch]
       ls path [watch]
       set path data [version]
       rmr path
       delquota [-n|-b] path
       quit
       printwatches on|off
       create [-s] [-e] path data acl
       stat path [watch]
       close
       ls2 path [watch]
       listquota path
       setAcl path acl
       getAcl path
       sync path
       delete path [version]
Standalone模式
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 2] create /zk_test test_data
Created /zk_test
[zk: localhost:2181(CONNECTED) 3] ls /
[zookeeper, zk_test]
[zk: localhost:2181(CONNECTED) 4] get /zk_test
test_data
cZxid = 0x11
ctime = Thu Mar 08 15:33:55 CST 2012
mZxid = 0x11
mtime = Thu Mar 08 15:33:55 CST 2012
pZxid = 0x11
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
Standalone模式
[zk: localhost:2181(CONNECTED) 5] set /zk_test test_2
cZxid = 0x11
ctime = Thu Mar 08 15:33:55 CST 2012
mZxid = 0x13
mtime = Thu Mar 08 15:46:27 CST 2012
pZxid = 0x11
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
Standalone模式
[zk: localhost:2181(CONNECTED) 6] get /zk_test watch
test_2
cZxid = 0x11
ctime = Thu Mar 08 15:33:55 CST 2012
mZxid = 0x13
mtime = Thu Mar 08 15:46:27 CST 2012
pZxid = 0x11
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
Standalone模式
[zk: 127.0.0.1:2181(CONNECTED) 6] set /zk_test test_3

WATCHER::cZxid = 0x11


WatchedEvent state:SyncConnected type:NodeDataChanged
path:/zk_test
ctime = Thu Mar 08 15:33:55 CST 2012
mZxid = 0x51
mtime = Mon Mar 19 10:43:59 CST 2012
pZxid = 0x11
cversion = 0
dataVersion = 11
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
zk的一致性保证
•   顺序性:客户端请求顺序生效
•   原子性
•   单一系统映像
•   可靠性:一旦更新请求生效,会持续到下
    一次请求
znode
        • 3种znode
          • persistent znode: 永久
            有效地节点
          • ephemeral znode: 临
            时节点
          • sequential znode: 顺序
            节点
        • 数据少于1MB
watches
•   getData(), getChildren(), exists()
•   One-time trigger
•   data watches and child watches
•   有序的:
    • 客户端收到watch事件的顺序跟节点发生改变的顺序一
      致
    • 客户端收到watch事件后才会看到新数据
• 注意延迟:收到watch事件和获取新数据之间数据
  可能改变多次
    void watcher(zhandle_t *zzh, int type, int state,
    const char *path, void* context)
ACL
• 类似unix文件权限
• 只对某一节点有效(非递归的)
• 权限:
 • CREATE, READ,WRITE,DELETE,ADMIN
API
         异步                  同步
  zoo_acreate()          zoo_create()
  zoo_aexists()          zoo_exists()
      zoo_aget()          zoo_get()
zoo_aget_children()   zoo_get_children()
      zoo_aset()          zoo_set()
  zoo_adelete()          zoo_delete()
典型应用
•   Naming service
•   配置管理
•   集群监控
•   Barriers
•   分布式队列
•   分布式锁
•   leader election
配置管理
• 配置文件、机器列表等等
• 集中管理
• 服务自动更新配置
 • 客户端建立watch
 • zk节点内容(配置)更改时推送到客户端
集群监控
• 每个服务创建“/clusterServers/{hostname}”
  节点, ephemeral
• 监控服务watch“/clusterServers” 子节点数
  量
• 被监控服务停止时节点消失,监控服务收
  到watch事件
Barriers
Barriers
• “/barrier/[n]”
   1. create(“/barrier/n”, EPHEMERAL_SEQUENTIAL)
   2. getChildren(“/barrier/”, true),设定watch,
      节点数量变化时通知
   3. if 节点数量小于x,等待watch通知
   4. else return
   5. goto 2


   watcher函数:pthread_cond_signal()
   等待:pthread_cond_wait()
分布式队列
• “/q/element_[n]”
• 生产者:
 create(“/q” + “/element_”, message, ZOO_SEQUENCE);

• 消费者:
 get_children();
 delete();

• zk集群数据一致性
分布式锁
• “_locknode_/lock-[n]”
• 获得锁:
    1.   create(“_locknode_/lock-[n]”)
    2.   getChildren()
    3.   判断(1)中创建节点序号是否是最小的,是则取得锁
    4.   exists()判断第二小的节点是否存在,并加watch
    5.   如果exists()返回false, goto 2。否则等待通知
         后再跳到2


• 释放锁:删除节点
leader election
ZK内部设计
• ZooKeeper Atomic Broadcast
• 保证:
  • 消息的可靠传递
  • 全局顺序
  • 因果顺序
• 消息传递的两个流程
  • 选举
  • 同步
zk节点的角色
角色                          描述
leader(领导者)                 进行投票的发起和决议
              follower(跟随者) 接收客户端请求并返回结果,选举过程
                            中参与投票
                            接收客户端请求,将写操作转发给
learner(学习    observer(观察   leader。但是不参与投票过程,只同步
者)            者)            leader状态。提高读性能。
client(客户端)                 发起请求
zk server工作状态
• LOOKING:当前server不知道leader是谁
• LEADING:当前server是leader
• FOLLOWING:leader已经选举出来
选举流程
• basic paxos
  • 每个Server启动以后都询问其它的Server它要
    投票给谁,收到所有Server回复以后,就计算
    出zxid最大的哪个Server,并将这个Server相
    关信息设置成下一次要投票的Server。如果此
    时获胜的Server获得n/2 + 1的Server票数, 设
    置当前推荐的leader为获胜的Server,并修改
    自己状态。
• election.jpg
同步流程
• leader等待server连接
• follower连接leader,将最大的zxid发送给
  leader
• leader根据follower的zxid确定同步点
• 完成同步后通知follower 已经成为uptodate
  状态
• follower收到uptodate消息后,又可以重新
  接受client的请求进行服务
Zoo keeper

Weitere ähnliche Inhalte

Was ist angesagt?

Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享晓锋 陈
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and nodePeter Yi
 
Ecma script3
Ecma script3 Ecma script3
Ecma script3 gniavaj
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二yiditushe
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
实时任务调度
实时任务调度实时任务调度
实时任务调度Tony Deng
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验QLeelulu
 
Script with engine
Script with engineScript with engine
Script with engineWebrebuild
 
Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例maclean liu
 
JAVA内存泄漏及诊断
JAVA内存泄漏及诊断JAVA内存泄漏及诊断
JAVA内存泄漏及诊断ivannotes
 
J2ee面试知识
J2ee面试知识J2ee面试知识
J2ee面试知识yiditushe
 
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法yiditushe
 
所谓闭包
所谓闭包所谓闭包
所谓闭包youzitang
 
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
台南好想工作室-想知道講座-ES6 進入天堂的窄門PromiseZenChou2
 
冲浪 Object-c
冲浪 Object-c冲浪 Object-c
冲浪 Object-cjeff kit
 
107个常用javascript语句 oss 计算技术 - ossez info of tech
107个常用javascript语句   oss 计算技术 - ossez info of tech107个常用javascript语句   oss 计算技术 - ossez info of tech
107个常用javascript语句 oss 计算技术 - ossez info of techYUCHENG HU
 
Mongodb
MongodbMongodb
Mongodbbj
 
Log analytics
Log analyticsLog analytics
Log analyticsitseo
 
Hibernate查询
Hibernate查询Hibernate查询
Hibernate查询llying
 

Was ist angesagt? (20)

Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and node
 
MySQL aio
MySQL aioMySQL aio
MySQL aio
 
Ecma script3
Ecma script3 Ecma script3
Ecma script3
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
实时任务调度
实时任务调度实时任务调度
实时任务调度
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 
Script with engine
Script with engineScript with engine
Script with engine
 
Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例
 
JAVA内存泄漏及诊断
JAVA内存泄漏及诊断JAVA内存泄漏及诊断
JAVA内存泄漏及诊断
 
J2ee面试知识
J2ee面试知识J2ee面试知识
J2ee面试知识
 
Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法Jni攻略之八――操作对象的构造方法
Jni攻略之八――操作对象的构造方法
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
 
冲浪 Object-c
冲浪 Object-c冲浪 Object-c
冲浪 Object-c
 
107个常用javascript语句 oss 计算技术 - ossez info of tech
107个常用javascript语句   oss 计算技术 - ossez info of tech107个常用javascript语句   oss 计算技术 - ossez info of tech
107个常用javascript语句 oss 计算技术 - ossez info of tech
 
Mongodb
MongodbMongodb
Mongodb
 
Log analytics
Log analyticsLog analytics
Log analytics
 
Hibernate查询
Hibernate查询Hibernate查询
Hibernate查询
 

Andere mochten auch

Programming with ZooKeeper - A basic tutorial
Programming with ZooKeeper - A basic tutorialProgramming with ZooKeeper - A basic tutorial
Programming with ZooKeeper - A basic tutorialJeff Smith
 
Dynamic Reconfiguration of Apache ZooKeeper
Dynamic Reconfiguration of Apache ZooKeeperDynamic Reconfiguration of Apache ZooKeeper
Dynamic Reconfiguration of Apache ZooKeeperDataWorks Summit
 
Distributed Applications with Apache Zookeeper
Distributed Applications with Apache ZookeeperDistributed Applications with Apache Zookeeper
Distributed Applications with Apache ZookeeperAlex Ehrnschwender
 
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API ExamplesApache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API ExamplesBinu George
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & FeaturesDataStax Academy
 
Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcachedJurriaan Persyn
 
Etsy Activity Feeds Architecture
Etsy Activity Feeds ArchitectureEtsy Activity Feeds Architecture
Etsy Activity Feeds ArchitectureDan McKinley
 
Big Data in Real-Time at Twitter
Big Data in Real-Time at TwitterBig Data in Real-Time at Twitter
Big Data in Real-Time at Twitternkallen
 
Scalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsScalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsJonas Bonér
 
7 Stages of Scaling Web Applications
7 Stages of Scaling Web Applications7 Stages of Scaling Web Applications
7 Stages of Scaling Web ApplicationsDavid Mitzenmacher
 
Introduction to Apache ZooKeeper
Introduction to Apache ZooKeeperIntroduction to Apache ZooKeeper
Introduction to Apache ZooKeeperSaurav Haloi
 
Architecture of a Modern Web App
Architecture of a Modern Web AppArchitecture of a Modern Web App
Architecture of a Modern Web Appscothis
 
Introduction to Web Architecture
Introduction to Web ArchitectureIntroduction to Web Architecture
Introduction to Web ArchitectureChamnap Chhorn
 

Andere mochten auch (14)

Programming with ZooKeeper - A basic tutorial
Programming with ZooKeeper - A basic tutorialProgramming with ZooKeeper - A basic tutorial
Programming with ZooKeeper - A basic tutorial
 
Dynamic Reconfiguration of Apache ZooKeeper
Dynamic Reconfiguration of Apache ZooKeeperDynamic Reconfiguration of Apache ZooKeeper
Dynamic Reconfiguration of Apache ZooKeeper
 
Distributed Applications with Apache Zookeeper
Distributed Applications with Apache ZookeeperDistributed Applications with Apache Zookeeper
Distributed Applications with Apache Zookeeper
 
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API ExamplesApache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
 
Apache ZooKeeper
Apache ZooKeeperApache ZooKeeper
Apache ZooKeeper
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & Features
 
Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcached
 
Etsy Activity Feeds Architecture
Etsy Activity Feeds ArchitectureEtsy Activity Feeds Architecture
Etsy Activity Feeds Architecture
 
Big Data in Real-Time at Twitter
Big Data in Real-Time at TwitterBig Data in Real-Time at Twitter
Big Data in Real-Time at Twitter
 
Scalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsScalability, Availability & Stability Patterns
Scalability, Availability & Stability Patterns
 
7 Stages of Scaling Web Applications
7 Stages of Scaling Web Applications7 Stages of Scaling Web Applications
7 Stages of Scaling Web Applications
 
Introduction to Apache ZooKeeper
Introduction to Apache ZooKeeperIntroduction to Apache ZooKeeper
Introduction to Apache ZooKeeper
 
Architecture of a Modern Web App
Architecture of a Modern Web AppArchitecture of a Modern Web App
Architecture of a Modern Web App
 
Introduction to Web Architecture
Introduction to Web ArchitectureIntroduction to Web Architecture
Introduction to Web Architecture
 

Ähnlich wie Zoo keeper

探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案Ady Liu
 
zookeeper-internals
zookeeper-internalszookeeper-internals
zookeeper-internalsLiu Shaohui
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台drewz lin
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训longhao
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训dcshi
 
Elastic stack day-2
Elastic stack day-2Elastic stack day-2
Elastic stack day-2YI-CHING WU
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
110824 knoss-windows系统机制浅析
110824 knoss-windows系统机制浅析110824 knoss-windows系统机制浅析
110824 knoss-windows系统机制浅析Zoom Quiet
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江thinkinlamp
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysqlpwesh
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
Sheepdog内部实现机制
Sheepdog内部实现机制Sheepdog内部实现机制
Sheepdog内部实现机制Liu Yuan
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptxjames tong
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)FLASH开发者交流会
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)Shanda innovation institute
 
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 Renaun Erickson
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Wade Huang
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 

Ähnlich wie Zoo keeper (20)

探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案
 
zookeeper-internals
zookeeper-internalszookeeper-internals
zookeeper-internals
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
Elastic stack day-2
Elastic stack day-2Elastic stack day-2
Elastic stack day-2
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
110824 knoss-windows系统机制浅析
110824 knoss-windows系统机制浅析110824 knoss-windows系统机制浅析
110824 knoss-windows系统机制浅析
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
Sheepdog内部实现机制
Sheepdog内部实现机制Sheepdog内部实现机制
Sheepdog内部实现机制
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
 
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 

Zoo keeper

  • 1. ZooKeeper 高可用分布式协调系统 high available and reliable coordination system
  • 2. zk的角色 人体 分布式系统 神经 网络 器官 服务器 大脑 zk
  • 4. Standalone模式 $ cd zookeeper-3.4.2/ $ cat conf/zoo.cfg tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181
  • 5. Standalone模式 $ bin/zkServer.sh start JMX enabled by default Using config: /home/jxq/code/zookeeper-3.4.2/bin/../conf/ zoo.cfg Starting zookeeper ... STARTED $ bin/zkCli.sh -server 127.0.0.1:2181 Connecting to localhost:2181 Welcome to ZooKeeper! JLine support is enabled [zk: localhost:2181(CONNECTED) 0] help
  • 6. Standalone模式 [zk: localhost:2181(CONNECTED) 0] help ZooKeeper -server host:port cmd args connect host:port get path [watch] ls path [watch] set path data [version] rmr path delquota [-n|-b] path quit printwatches on|off create [-s] [-e] path data acl stat path [watch] close ls2 path [watch] listquota path setAcl path acl getAcl path sync path delete path [version]
  • 7. Standalone模式 [zk: localhost:2181(CONNECTED) 1] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 2] create /zk_test test_data Created /zk_test [zk: localhost:2181(CONNECTED) 3] ls / [zookeeper, zk_test] [zk: localhost:2181(CONNECTED) 4] get /zk_test test_data cZxid = 0x11 ctime = Thu Mar 08 15:33:55 CST 2012 mZxid = 0x11 mtime = Thu Mar 08 15:33:55 CST 2012 pZxid = 0x11 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 9 numChildren = 0
  • 8. Standalone模式 [zk: localhost:2181(CONNECTED) 5] set /zk_test test_2 cZxid = 0x11 ctime = Thu Mar 08 15:33:55 CST 2012 mZxid = 0x13 mtime = Thu Mar 08 15:46:27 CST 2012 pZxid = 0x11 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0
  • 9. Standalone模式 [zk: localhost:2181(CONNECTED) 6] get /zk_test watch test_2 cZxid = 0x11 ctime = Thu Mar 08 15:33:55 CST 2012 mZxid = 0x13 mtime = Thu Mar 08 15:46:27 CST 2012 pZxid = 0x11 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0
  • 10. Standalone模式 [zk: 127.0.0.1:2181(CONNECTED) 6] set /zk_test test_3 WATCHER::cZxid = 0x11 WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk_test ctime = Thu Mar 08 15:33:55 CST 2012 mZxid = 0x51 mtime = Mon Mar 19 10:43:59 CST 2012 pZxid = 0x11 cversion = 0 dataVersion = 11 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0
  • 11. zk的一致性保证 • 顺序性:客户端请求顺序生效 • 原子性 • 单一系统映像 • 可靠性:一旦更新请求生效,会持续到下 一次请求
  • 12. znode • 3种znode • persistent znode: 永久 有效地节点 • ephemeral znode: 临 时节点 • sequential znode: 顺序 节点 • 数据少于1MB
  • 13. watches • getData(), getChildren(), exists() • One-time trigger • data watches and child watches • 有序的: • 客户端收到watch事件的顺序跟节点发生改变的顺序一 致 • 客户端收到watch事件后才会看到新数据 • 注意延迟:收到watch事件和获取新数据之间数据 可能改变多次 void watcher(zhandle_t *zzh, int type, int state, const char *path, void* context)
  • 15. API 异步 同步 zoo_acreate() zoo_create() zoo_aexists() zoo_exists() zoo_aget() zoo_get() zoo_aget_children() zoo_get_children() zoo_aset() zoo_set() zoo_adelete() zoo_delete()
  • 16. 典型应用 • Naming service • 配置管理 • 集群监控 • Barriers • 分布式队列 • 分布式锁 • leader election
  • 17. 配置管理 • 配置文件、机器列表等等 • 集中管理 • 服务自动更新配置 • 客户端建立watch • zk节点内容(配置)更改时推送到客户端
  • 18. 集群监控 • 每个服务创建“/clusterServers/{hostname}” 节点, ephemeral • 监控服务watch“/clusterServers” 子节点数 量 • 被监控服务停止时节点消失,监控服务收 到watch事件
  • 20. Barriers • “/barrier/[n]” 1. create(“/barrier/n”, EPHEMERAL_SEQUENTIAL) 2. getChildren(“/barrier/”, true),设定watch, 节点数量变化时通知 3. if 节点数量小于x,等待watch通知 4. else return 5. goto 2 watcher函数:pthread_cond_signal() 等待:pthread_cond_wait()
  • 21. 分布式队列 • “/q/element_[n]” • 生产者: create(“/q” + “/element_”, message, ZOO_SEQUENCE); • 消费者: get_children(); delete(); • zk集群数据一致性
  • 22. 分布式锁 • “_locknode_/lock-[n]” • 获得锁: 1. create(“_locknode_/lock-[n]”) 2. getChildren() 3. 判断(1)中创建节点序号是否是最小的,是则取得锁 4. exists()判断第二小的节点是否存在,并加watch 5. 如果exists()返回false, goto 2。否则等待通知 后再跳到2 • 释放锁:删除节点
  • 25. • ZooKeeper Atomic Broadcast • 保证: • 消息的可靠传递 • 全局顺序 • 因果顺序 • 消息传递的两个流程 • 选举 • 同步
  • 26. zk节点的角色 角色 描述 leader(领导者) 进行投票的发起和决议 follower(跟随者) 接收客户端请求并返回结果,选举过程 中参与投票 接收客户端请求,将写操作转发给 learner(学习 observer(观察 leader。但是不参与投票过程,只同步 者) 者) leader状态。提高读性能。 client(客户端) 发起请求
  • 27. zk server工作状态 • LOOKING:当前server不知道leader是谁 • LEADING:当前server是leader • FOLLOWING:leader已经选举出来
  • 28. 选举流程 • basic paxos • 每个Server启动以后都询问其它的Server它要 投票给谁,收到所有Server回复以后,就计算 出zxid最大的哪个Server,并将这个Server相 关信息设置成下一次要投票的Server。如果此 时获胜的Server获得n/2 + 1的Server票数, 设 置当前推荐的leader为获胜的Server,并修改 自己状态。 • election.jpg
  • 29. 同步流程 • leader等待server连接 • follower连接leader,将最大的zxid发送给 leader • leader根据follower的zxid确定同步点 • 完成同步后通知follower 已经成为uptodate 状态 • follower收到uptodate消息后,又可以重新 接受client的请求进行服务