ZooKeeper的异步客户端。
aiozk的Python项目详细描述
Asyncio ZooKeeper客户端
基于wglass/zoonado实现
状态
在客户机/会话/连接中没有主要的bug,但是菜谱只是移植,需要更多的测试。 所以你可以预期,有测试的食谱是有效的。
安装
$ pip install aiozk
快速示例
importasynciofromaiozkimportZKClientasyncdefrun():zk=ZKClient('localhost')awaitzk.start()awaitzk.create('/foo',data=b'bazz',ephemeral=True)awaitzk.set_data('/foo','new bazz')awaitzk.close()loop=asyncio.get_event_loop()loop.run_until_complete(run())
配方
您可以使用类似于zoonado、kazoo和其他libs的食谱:
# assuming zk is aiozk.ZKClientbarrier=zk.recipes.Barrier('/barrier_name')awaitbarrier.create()awaitbarrier.lift()awaitbarrier.wait()
了解食谱背后的想法please read this和even more recipes here。在你自己做一些新的事情之前,一定要熟悉所有的食谱,尤其是当涉及到不止几个动物园管理员的电话时。
测试
nb:请确保您使用的是最新的docker-compose
版本。您可以通过运行获得它
pip install --user -U docker-compose
运行测试
# you should have access to docker
docker-compose build
./test-runner.sh
测试方法
大多数测试都是集成测试,并在真实的zookeeper实例上运行。
我们选择了zookeeper 3.5
版本,因为它具有动态重新配置的能力,我们将在zk docker集群上执行所有连接/重新连接/监视测试,因为这使我们能够重新启动任何服务器并查看发生了什么。
# first terminal: launch zookeeper cluster docker-compose rm -fv && docker-compose build zk && docker-compose scale zk=7&& docker-compose up zk_seed zk # it will launch cluster in this terminal and remain. last lines should be like this: zk_6 | Servers: 'server.1=172.23.0.9:2888:3888:participant;0.0.0.0:2181\nserver.2=172.23.0.2:2888:3888:participant;0.0.0.0:2181\nserver.3=172.23.0.3:2888:3888:participant;0.0.0.0:2181\nserver.4=172.23.0.4:2888:3888:participant;0.0.0.0:2181\nserver.5=172.23.0.5:2888:3888:participant;0.0.0.0:2181\nserver.6=172.23.0.7:2888:3888:participant;0.0.0.0:2181' zk_6 | CONFIG: server.1=172.23.0.9:2888:3888:participant;0.0.0.0:2181 zk_6 | server.2=172.23.0.2:2888:3888:participant;0.0.0.0:2181 zk_6 | server.3=172.23.0.3:2888:3888:participant;0.0.0.0:2181 zk_6 | server.4=172.23.0.4:2888:3888:participant;0.0.0.0:2181 zk_6 | server.5=172.23.0.5:2888:3888:participant;0.0.0.0:2181 zk_6 | server.6=172.23.0.7:2888:3888:participant;0.0.0.0:2181 zk_6 | server.7=172.23.0.6:2888:3888:observer;0.0.0.0:2181 zk_6 | zk_6 | zk_6 | Reconfiguring... zk_6 | ethernal loop zk_7 | Servers: 'server.1=172.23.0.9:2888:3888:participant;0.0.0.0:2181\nserver.2=172.23.0.2:2888:3888:participant;0.0.0.0:2181\nserver.3=172.23.0.3:2888:3888:participant;0.0.0.0:2181\nserver.4=172.23.0.4:2888:3888:participant;0.0.0.0:2181\nserver.5=172.23.0.5:2888:3888:participant;0.0.0.0:2181\nserver.6=172.23.0.7:2888:3888:participant;0.0.0.0:2181\nserver.7=172.23.0.6:2888:3888:participant;0.0.0.0:2181' zk_7 | CONFIG: server.1=172.23.0.9:2888:3888:participant;0.0.0.0:2181 zk_7 | server.2=172.23.0.2:2888:3888:participant;0.0.0.0:2181 zk_7 | server.3=172.23.0.3:2888:3888:participant;0.0.0.0:2181 zk_7 | server.4=172.23.0.4:2888:3888:participant;0.0.0.0:2181 zk_7 | server.5=172.23.0.5:2888:3888:participant;0.0.0.0:2181 zk_7 | server.6=172.23.0.7:2888:3888:participant;0.0.0.0:2181 zk_7 | server.7=172.23.0.6:2888:3888:participant;0.0.0.0:2181 zk_7 | server.8=172.23.0.8:2888:3888:observer;0.0.0.0:2181 zk_7 | zk_7 | zk_7 | Reconfiguring... zk_7 | ethernal loop
运行测试:
docker-compose run --no-deps aiozk # last lines will be about testing results ............lot of lines ommited........ . ---------------------------------------------------------------------- Ran 3 tests in 1.059s OK
配方测试
似乎通常菜谱需要测试几样东西:
- 配方流按预期工作
- 超时:用有意义的值重现每个超时(超时0.5s,阻塞0.6s)