简介

   zookeeper的基本概念和作用这里不做介绍,现在很多的公司都在使用它,说起它的作用,可能最先想到的是配置中心,可以将配置项作为一个node存储在zookeeper中,其他应用可以“关注”这个节点,当配置的值发生变化的时候,其他应用可以很快的被通知到。
   这里有一个细节,就是通知的次数,我在初次认识zookeeper的时候,以为“关注”了某个节点后,之后这个节点的值发生变化都可以通知到,但是实际情况是客户端在“关注”了某个节点后,这个节点的首次变化会被通知到,之后的变化都不会再通知,如果想得到之前的变化,需要在首次变更通知到后,再次“关注”这个节点,也就是说,zoookeeper中的“关注”通知是一次性的,类似于Web中Request/Response。
    基于这种情况,zookeeper的Java客户端Curator做了一定的优化,但是.Net还没有,基于此,我写了一个zookeeper Watch的帮助类,可以实现“一次关注,多次通知”。

ZookeeperWatchHelp

  ZookeeperWatchHelp的核心很简单,就是在"关注"了某个节点后,当节点发生变更,通知到应用程序后,立刻再次"关注",之后才执行变更的处理程序。 
  目前代码已经开源,地址是:https://github.com/zhaoyb/ZookeeperWatcherHelp
 

配置中心zookeeper版本

   之前的配置中心是基于心跳的,当配置发生变化,并不能立刻通知到客户端,对于某些应用场景可能不适用,所以升级为zookeeper版本。
   zookeeper版本的核心思想: 将应用Id(AppId)作为一个node存入到zookeeper中,node的data是应用的版本号,修改配置的时候,除了修改应用的版本号,还要修改zookeeper中对用node的data。 客户端在启动的使用,注册对指定节点数据变更的关注,当节点的值发生变化,会通知到客户端,客户端请求服务端拉取最新的配置。 
 

zookeeper版配置中心-服务端

在启动的时候,主动创建一个节点,作为配置中心的根节点。
在配置发生变化的时候,处理更新版本号,还要更新zookeeper中对应节点的data。节点的名称就是应用的名称。
 

zookeeper版配置中心-客户端

客户端的启动方式和之前类似
在启动的时候,首先会实例化zookeeper对象,需要zookeeper服务器的host和port,这些其实也是配置,所以会到服务端指定的应用下面获取配置(这些配置需要事先配置好),在拉取到zookeeper的配置后,实例化zookeeper配置,并注册关注。
 
 
zookeeper的客户端本身具有重连机制,所以当某个服务器宕机,会自动重连到另外的机器,这些对上层应用来说是透明的,但是为了保证高可用,还是做了一个降级处理,就是会每隔20秒钟(这个时间可以更长)主动到服务端校验一次版本号。 

.Net配置中心-Zookeper版的更多相关文章

  1. [转]springcloud(九):配置中心和消息总线(配置中心终结版)

    https://www.cnblogs.com/ityouknow/p/6931958.html springcloud(九):配置中心和消息总线(配置中心终结版) 我们在springcloud(七) ...

  2. springcloud(九):配置中心和消息总线(配置中心终结版)

    我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...

  3. spring cloud深入学习(十)-----配置中心和消息总线(配置中心终结版)

    如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端,当客户端越来越多的时候,需要每个客户端都执行一遍,这种方案就不太适合了.使用 ...

  4. Spring Cloud(九):配置中心(消息总线)【Finchley 版】

    Spring Cloud(九):配置中心(消息总线)[Finchley 版]  发表于 2018-04-19 |  更新于 2018-05-07 |  我们在 Spring Cloud(七):配置中心 ...

  5. SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版

    前言 在上篇中介绍了SpringCloud Config的使用,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的分布式配置中心( ...

  6. Spring Cloud(八):配置中心(服务化与高可用)【Finchley 版】

    Spring Cloud(八):配置中心(服务化与高可用)[Finchley 版]  发表于 2018-04-19 |  更新于 2018-04-26 |  本文接之前的<Spring Clou ...

  7. Spring Cloud(七):配置中心(Git 版与动态刷新)【Finchley 版】

    Spring Cloud(七):配置中心(Git 版与动态刷新)[Finchley 版]  发表于 2018-04-19 |  更新于 2018-04-24 |  Spring Cloud Confi ...

  8. 【Alpaca】.Net版开源配置中心 - 技术选型 Vue 3.0

    是否可以用 Vue 3.0 现有的Vue 2.* 不推荐,坐等Vue 3.0出迁移工具吧,手动改的话工作量还是不小的 新项目 考虑下团队内对Vue + TS + VS Code的熟练程度.过程中你会遇 ...

  9. springcloud之config配置中心-Finchley.SR2版

    本篇和大家分享的是springcloud-config配置中心搭建,写到这里突然想起自己曾今开源过基于Redis发布订阅编写的一个配置中心,刚看了git星数有点少哈哈,这里顺势发个连接欢迎大侠们点赞: ...

随机推荐

  1. 【翻译】理念:无冲突的扩展本地DOM原型

    菜鸟翻译,望大家多多指正哈 原文:http://lea.verou.me/2015/04/idea-extending-native-dom-prototypes-without-collisions ...

  2. JavaScript基本语法(五)

    BOM 浏览器对象模型 BOM (浏览器对象模型),它提供了与浏览器窗口进行交互的对象. 一.window对象 Window对象表示整个浏览器窗口. 所有浏览器都支持 window 对象.它表示浏览器 ...

  3. Linux0.11内核--内存管理之2.配合fork

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5598451.html ] 在上一篇的fork函数中,首先一上来就调用get_free_page ...

  4. Android开发过程遇到的问题小计

    1.在真机上正常运行,而模拟器会报出一些so文件找不到 unexpected e_machine: 40. 解决方法:采用x86的NDK进行编译,问题解决.

  5. 从汇编角度分析C语言的过程调用

    ➠更多技术干货请戳:听云博客 基本术语定义 1.系统栈(system stack)是一个内存区,位于进程地址空间的末端. 2.在将数据压栈时,栈是自顶向下增长的,该内存区用于函数的局部变量提供内存.它 ...

  6. 【代码笔记】iOS-图片旋转

    代码: RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewControl ...

  7. Shou 团队诚意满满的招募 Swifter

    一.团队介绍 团队产品 VPlayer 播放器靠自增长 3 年内获得全球 4000 万用户,开发的 Vitamio 组件更是获得微博.UC.金山等知名企业授权使用.—— 团队再次起航,经历一年多我们已 ...

  8. yii2实战教程之第一个Yii程序

    之前考虑过要不要砍掉该章节,直接上手教你搭建简单的博客系统.出于实战基础加之自C语言的书籍出版以来,几乎所有的编程书籍都讲述了一个Hello World的例子作为开始.虽然我们仅仅是学习Yii2,但是 ...

  9. MS SQL 错误 :17883,严重度: 1,状态: 0

    公司一台老旧的SQL SERVER 2000 数据库,一周内会出现若干次(一次或多次)CPU 持续100%,导致应用程序没有反应的情况,如下图所示: 错误信息如下所示: 日期 2013/7/12 2: ...

  10. 从AdventureWorks学习数据库建模——实体分析

    最近打算写写数据库建模的文章,所以打算分析微软官方提供的SQL Server示例数据库AdventureWorks,看看这个数据库中有哪些值得学习的地方. 首先我们需要下载安装一个SQL Server ...