Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination.

--官网

从官网可以看出,zookeeper是一个分布式一致性服务的软件。认识它源于hadoop中的habse.在后来的使用过程,可以看出它本省就是一个分布式的内存数据库,它由多个节点组成,每个节点的中存储的内容的都是一样的。,看到这里,每个节点保存内容相同,这样也不怕数据丢失了,读的时候随便从一个节点读取就行,但是如何保证这些节点都是“一样的”的。  这样就需要一个协议,名字叫zab协议。内部咋实现的,这里面不讨论。

motan利用zookeeper实现发布订阅。其实所谓发布,其实就是创建节点。订阅就是对自己感兴趣的节点设计监听器。显然:

发布者就是provider:它根据自己URL创建节点。当然consumer也会创建节点。只是前者会被监听,后者不会。

订阅者就是Consumer:它监听某个节点的变化或者相应的节点的子节点变化了解了provider的情况,同一个provider可能有多个服务器提供,有服务器可能会突然宕机,或者加上一个新的服务器,因此consumer要及时的感受到它对应的服务列表的变化。从而可以根据负载均衡机制或者高可用机制选取一个服务提供者。

motan中的zookeeper应用(发布订阅)

  源码中示例代码motan-demo中已经存在MotanDemoService这个服务,我也随便创建了一个服务motan.learn的服务实现一个非常简单的功能。下图是zookeper的目录结构和节点的内容。从中可以看到一个服务下会创建对应的server和client的znode.该service的对应的provider和consumer都会创建自己的节点。比如MotanDemoService中有2个服务器提供服务。一个客户端,这个 client会监测相应的server的服务列表。根据已定规则选取一个对应的server

图1.1 motan-demo中的服务对应的zookeeper结构    

                              

motan源码解读:注册中心zookeeper(1)的更多相关文章

  1. motan源码解读:注册中心zookeeper(2)

    上文大概讲解了利用zookeeper如何实现注册中心的.本文主要是从源码角度说明下.代码都在模块motan-registry-zookeeper中,其实在在这个模块中就3个类. ZkNodeType: ...

  2. Dubbo源码学习--注册中心分析

    相关文章: Dubbo源码学习--服务是如何发布的 Dubbo源码学习--服务是如何引用的 注册中心 关于注册中心,Dubbo提供了多个实现方式,有比较成熟的使用zookeeper 和 redis 的 ...

  3. AFNetworking 3.0 源码解读 总结(干货)(下)

    承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...

  4. AFNetworking 3.0 源码解读 总结(干货)(上)

    养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...

  5. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager

    做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...

  6. AFNetworking 3.0 源码解读(五)之 AFURLSessionManager

    本篇是AFNetworking 3.0 源码解读的第五篇了. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager AFNetworking 3 ...

  7. AFNetworking 3.0 源码解读 总结

    终于写完了 AFNetworking 的源码解读.这一过程耗时数天.当我回过头又重头到尾的读了一篇,又有所收获.不禁让我想起了当初上学时的种种情景.我们应该对知识进行反复的记忆和理解.下边是我总结的 ...

  8. AfNetworking 3.0源码解读

    做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...

  9. Alamofire源码解读系列(五)之结果封装(Result)

    本篇讲解Result的封装 前言 有时候,我们会根据现实中的事物来对程序中的某个业务关系进行抽象,这句话很难理解.在Alamofire中,使用Response来描述请求后的结果.我们都知道Alamof ...

随机推荐

  1. Data Flow ->> OLE Command

    这里有篇博客文章是讲这个OLE Command的:http://www.cnblogs.com/tylerdonet/archive/2011/06/20/2085490.html OLE Comma ...

  2. SUN dataset图像数据集下载

    SUN dataset数据集,有两个不错的网址: http://vision.princeton.edu/projects/2010/SUN/ (普林斯顿大学) http://groups.csail ...

  3. word2vec——高效word特征提取

    继上次分享了经典统计语言模型,最近公众号中有很多做NLP朋友问到了关于word2vec的相关内容, 本文就在这里整理一下做以分享. 本文分为 概括word2vec 相关工作 模型结构 Count-ba ...

  4. jquery Deferred demo

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. flex 4 Filters

    <s:RectangularDropShadow id="dropShadow" blurX="10" blurY="10" alph ...

  6. 加密工具类 - CryptoUtils.java

    加密工具类,包含MD5,BASE64,SHA,CRC32的加密与解密方法. 源码如下:(点击下载  - CryptoUtils.java.commons-io-2.4.jar.commons-code ...

  7. python3代码

    import urllib.request url="http://mm.taobao.com/json/request_top_list.htm?type=0&page=1&quo ...

  8. 安装cloudera

    1. 查看selinux状态 $ /usr/sbin/getenforce Enforcing $ /usr/sbin/sestatus SELinux status: enabled SELinux ...

  9. 线程——委托InvokeRequired和Invoke

    C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它.此时它将会在内部调用ne ...

  10. Ios中比较两个日期之间的时间差距

    1.比较两个日期之间的时间差距 // 1.日历对象(标识:时区相关的标识) NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIde ...