一.开源分布式服务框架

1.Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以Spring框架无缝集成。
   Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:①面向接口的远程方法调用;②智能容错和负载均衡;③服务自动注册和发现。

2.结构图

节点角色说明:

Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次数和调用时间的监控中心。
Container: 服务运行容器。
 

调用关系说明

0服务容器负责启动,加载,运行服务提供者provider。
1服务提供者provider在启动时,(通过连接服务器的client)向注册中心注册自己可以提供的服务。(其实就是注册一些provider自己的ip:port以及对自己提供的服务的描述,比如能干什么!)
2服务消费者consumer在启动时,向注册中心订阅自己所需的服务。并注册自己的ip:port等信息。
3注册中心返回服务提供者provider地址列表给消费者consumer,如果有变更,注册中心将基于长连接推送变更数据给消费者consumer。
4服务消费者consumer,从注册中心返回的提供者provider地址列表中,基于软负载均衡算法,选一台提供者provider进行调用,如果调用失败,再选另一台调用。
5服务消费者consumer和提供者provider,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心monitor。
Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。

二.Dubbo作用

  dubbo其实就是一个中间层管理工具,他是一个框架,里面可以装你想装的服务,一般注册中心大多用zookeeper,当然除了zookeeper,还要Redis等也可以做注册中心。
 
 

三.Dubbo+Zookeeper(注册中心使用Zookeeper),Zookeeper其实是树状结构。

1.可以把register理解成房产中介,provider是卖房的人,张三想卖掉自己在秦淮区的学区房,李四想卖掉自己在栖霞区的学区房,consumer王五是想在栖霞区买学区房给自己孩子上学,王五去中介咨询后,中介返回给王五的需求 满足者是李四,王五从中介那得到李四的电话,自己打电话找李四买房。

比如Provider注册的是  192.168.1.(描述121是吃饭,122睡觉,123打游戏,124健身四种不同的服务)
2-0、 、dubbo--这是dubbo在ZooKeeper上创建的根节点  /dubbo
2-1 、 Dubbo在Zookeeper上注册的节点目录:假设接口名称是:com.bob.dubbo.service.CityDubboService。
这是服务节点,代表了Dubbo的一个服务  /dubbo/com.bob.dubbo.service.CityDubboService
2-2 、 Dubbo启动时,Consumer和Provider都会把自身的URL格式化为字符串,然后注册到zookeeper相应节点下,作为一个临时节点,当连断开时,节点被删除。
这是服务提供者的根节点,其子节点代表了每一个服务真正的提供者/dubbo/com.bob.dubbo.service.CityDubboService/providers
这是服务消费者的根节点,其子节点代表每一个服务真正的消费者;/dubbo/com.bob.dubbo.service.CityDubboService/consumers
2-3、 Consumer在启动时,不仅仅会注册自身到 …/consumers/目录下,同时还会订阅…/providers目录下所有子节点,具体的看你订阅具体是哪一个节点(比如订阅健身这些服务),实时获取其上Provider的URL字符串信息。register返回给Consumer这个ip--192.168.1.124,Consumer拿着这个iP直接去找Provider调用这项服务--健身。
2-4 、监控中心启动时订阅com.bob.dubbo.service.CityDubboService目录下的所有提供者和消费者URL。

四.Dubbo——Zookeeper补充:

支持以下功能:

 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
当注册中心重启时,能自动恢复注册数据,以及订阅请求
当会话过期时,能自动恢复注册数据,以及订阅请求
当设置<dubbo:registry check="false" />时,记录失败注册和订阅请求,后台定时重试
可通过设置<dubbo:registry username="admin" password="124" />设置zookeeper 登录信息
可通过<dubbo:registry group="dubbo" />设置 zookeeper 的根节点,不设置将使用无 根树
支持 * 号通配符 <dubbo:redistry group="*" version="*" />,可订阅服务的所有分组 和所有版本的提供者
 
补充:
  消费者从ZK获取provider地址列表后,会在本地缓存一份。当ZK注册中心所有节点全部宕掉之后,消费者可以使用本地缓存的服务列表和provider进行通信。
ZK的意义在于为consumer和provider提供服务地址的发布/订阅服务,让消费者及时感知最新的服务列表,consumer真正调用provider是通过某种通信协议直接调用,并不依赖ZK。
 
所以当zookeeper宕机之后,不会影响消费者调用服务提供者,影响的是zookeeper宕机之后如果提供者有变动,增加或者减少,zk无法把变更通知推送给consumer,consumer会因为感知不到变更时间,不去拉取最新的服务列表,导致本地缓存的服务列表有可能过时的。

完结,个人理解,如有偏差,请大家指正,谢谢!

2020-06-09 10:58:28

Dubbo+Zookeeper集群案例的更多相关文章

  1. dubbo+zookeeper集群配置

    集群服务注册到多台zookeeper配置: <dubbo:registry protocol="zookeeper" address="10.20.153.10:2 ...

  2. ZooKeeper 集群的安装、配置---Dubbo 注册中心

    ZooKeeper 集群的安装.配置.高可用测试 Dubbo 注册中心集群 Zookeeper-3.4.6 Dubbo 建议使用 Zookeeper 作为服务的注册中心. Zookeeper 集群中只 ...

  3. java 学习笔记(三)ZooKeeper集群搭建实例,以及集成dubbo时的配置 (转)

    ZooKeeper集群搭建实例,以及集成dubbo时的配置 zookeeper是什么: Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式 ...

  4. java:zookeeper集群配置,dubbo

    1.zookeeper集群配置: 2.dubbo:(配置见视频)

  5. Dubbo入门到精通学习笔记(十三):ZooKeeper集群的安装、配置、高可用测试、升级、迁移

    文章目录 ZooKeeper集群的安装.配置.高可用测试 ZooKeeper 与 Dubbo 服务集群架构图 1. 修改操作系统的/etc/hosts 文件,添加 IP 与主机名映射: 2. 下载或上 ...

  6. 构建高可用ZooKeeper集群

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  7. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  8. 构建高可用ZooKeeper集群(转载)

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  9. Solr集群的搭建以及使用(内涵zookeeper集群的搭建指南)

    1   什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

随机推荐

  1. 转帖 支撑4.5亿活跃用户的WhatsApp架构概览

    http://www.csdn.net/article/2014-02-27/2818559-an-overview-at-whatsapp's-19b-architecture/2 写的很好,确实牛 ...

  2. pyhton中的深浅copy

    深浅拷贝:数据分离情况 1. =赋值:数据完全共享(指向内存中的同一个对象)被赋值的变量指向的数据和原变量的数据都是指向内存中的同一个地址: (1)如果是不可变数据类型(数字.字符串等),修改其中的一 ...

  3. Web安全工程师(网易微专业Web安全学习笔记)

    本篇笔记的配套视频:网易云课堂,微专业/web安全工程师. 一.WEB基础知识 1.1 Web简介 1.1.1 Web介绍 1)web的发展 web1.0:以内容为中心,网站提供内容信息,用户进行访问 ...

  4. mouseover与mouseenter区别

    学习笔记. mouseover:在鼠标移入元素本身或者子元素时都会触发事件,相当于有一个冒泡过程.而且在鼠标移入子元素中时,父元素会显示离开的状态:相应的,当鼠标从子元素移入父元素,子元素也会显示离开 ...

  5. Null passed to a callee that requires a non-null argument

    OC中定义的方法参数默认是不为空的,如果能够为空需要手动指定__nullable ,我想这个警告是提示开发者警惕可能空参数

  6. Gym101142G Gangsters in Central City

    题目链接:https://cn.vjudge.net/problem/Gym-101142G 知识点: DFS序.LCA 题目大意: 给定一棵有根树(根为 \(1\)).每次修改叶子节点会被染成黑色( ...

  7. npm执行清理缓存失败npm cache clean

    C:\Users\you name>npm cache cleannpm ERR! As of npm@5, the npm cache self-heals from corruption i ...

  8. 循序渐进VUE+Element 前端应用开发(3)--- 动态菜单和路由的关联处理

    在我开发的很多系统里面,包括Winform混合框架.Bootstrap开发框架等系列产品中,我都倾向于动态配置菜单,并管理对应角色的菜单权限和页面权限,实现系统对用户权限的控制,菜单一般包括有名称.图 ...

  9. Istio Polit-agent & Envoy 启动流程

    开篇 通过上一篇 Istio Sidecar注入原理 文章可以发现,在应用提交到kubernate部署时已经同时注入了Sidecar应用. 细心的话应该还可以发现,除了注入了istio-proxy应用 ...

  10. python报错2

    缩进导致的报错 IndentationError: unindent does not match any outer indentation level NameError 命名错误 原因是: na ...