大白话讲Zookeeper能做什么?(一):命名服务与配置管理

一、命名服务

在日常开发中,我们会遇到这样的场景:服务A(开发者:小李)需要访问服务B(开发者:小王),但是服务B还在开发过程中(未完成),那么服务A(此时已完成)就不知道如何获取服务B的访问路径了(假设我们使用http服务),小李还有其他工作要做,该怎么办呢?使用zookeeper的服务就可以简单解决:小李和小王约定好:服务B部署成功后,先到zookeeper注册服务(即在zookeeper添加节点/service/B和节点数据)。服务A开发结束后,部署到服务器,然后服务A监控zookeeper服务节点/service/B,如果发现节点数据了,那么服务A就可以访问服务B了。

在服务A中添加代码,用于观察节点/service/B是否存在以及节点数据的变化。

		CuratorFramework client = CuratorFrameworkFactory
				.builder()
				.connectString("192.168.1.123:2181")
				.sessionTimeoutMs(5000)
				.connectionTimeoutMs(5000)
				.retryPolicy(retryPolicy)
				.build();
		
		client.start();

        Stat stat = new Stat();
        byte[] data = client.getData().storingStatIn(stat).forPath("/jike");
		if (data != null) {
            System.out.println("B'Node data:"+new String(data));
            //TODO 执行服务A调用服务B的代码
        }

二、配置管理

目前很多公司开发或者使用的程序都是分布式的,而程序总会或多或少的存在一些额外配置,且分散部署在多台机器上。某一条要修改配置,要逐个去修改配置就变得有些困难,特别是应用部署的点数特别大的时候,就成了不可能完成的事情了。一种方式就是把相关配置写到数据库中,每个应用去读取数据库的配置,这种方式优点就是把配置集中管理,缺点也很明显,就是不能及时获得配置的变革,要及时获得变更后的配置,就要不停的去扫描数据库,而这又会造成数据库的压力巨大。

我要说的这种方式就是利用zookeeper的这种发布订阅、watch来实现。即,把相关的配置数据写到zookeeper的某个指定的节点下。应用服务监听这个节点的数据变化,一旦节点数据(配置信息)发生了变化,应用服务就会收到zookeeper的通知,然后应用服务就可以从zookeeper获得新的配置信息。

(该配图从网络下载)

 

(完)

转载于:https://my.oschina.net/OHC1U9jZt/blog/1524613

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值