zoukankan      html  css  js  c++  java
  • Alibaba-Dubbo介绍

    2020年9月21日10:56:46

    一、前言1.什么是Dubbo?

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

    二、Dubbo介绍

    1.Dubbo工作原理图

    1.1 节点角色说明

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

    1.2 调用关系说明

    1.2.1 整个Dubbo服务容器启动,加载,运行服务提供者provider;
    1.2.2 服务提供者provider在启动时,(通过连接注册中心服务器的client)向注册中心注册自己可以提供的服务。(注册provider自己的ip、port、以及对自己提供的服务的描述等信息);
    1.2.3 服务消费者consumer在启动时,向注册中心订阅自己所需的服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服务notify(通知)给消费者。同时消费者也会向注册自己的ip、port等信息;
    1.2.4 注册中心返回服务提供者provider地址列表给消费者consumer,如果有变更,注册中心将基于长连接推送变更后数据给消费者consumer;
    1.2.5 服务消费者consumer,从注册中心返回的提供者provider地址列表中(多数情况下提供者是集群形式),基于软负载均衡算法,选一台可用的提供者provider进行RPC调用,如果调用失败,再选另一台调用;
    1.2.6 消费者consumer和提供者provider,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心monitor。Monitor在整个架构中是可选的,Monitor功能需要单独配置,不配置或者配置后Monitor挂掉,都不会影响服务的调用。
    1.2.7 Dubbo 架构具有以下几个特点:连通性、健壮性、伸缩性、以及向未来架构的升级性。

    2. Dubbo作用

    2.1 Dubbo其实就是一个中间层管理工具,它是一个框架,里面可以装你想装的任何服务,Dubbo的注册中心大多用zookeeper,当然除了zookeeper,还有Redis等也可以做为Dubbo的注册中心。

    三、Dubbo+Zookeeper介绍

    1.Dubbo注册中心白话解释

    可以把Dubbo的register注册中心理解成房产中介链家,provider是卖房的人,provider张三想卖掉自己在秦淮区的学区房,provider李四想卖掉自己在栖霞区的学区房,consumer王五是想在栖霞区买学区房给自己孩子上学,王五去链家咨询后,链家给王五的需求条件满足者是李四,王五从链家那拿到李四的电话,自己打电话找李四买房。(哈哈哈哈,说的比较白话通俗一点)

    2.Zookeeper作为Dubbo的注册中心图示


    PS:Zookeeper内部是树形结构。

    2.1 图示说明介绍

    2.1.1 这是Dubbo启动时在注册中心ZooKeeper上创建的默认根节点 “/dubbo”;
    2.1.2 接口在Zookeeper上注册节点:假设接口名称是:com.bob.dubbo.service.CityDubboService,代表了Dubbo的一个服务,那么Dubbo会自动在Zookeeper中注册该结点: “/dubbo/com.bob.dubbo.service.CityDubboService”;
    2.1.3 Dubbo启动时,其中的持久化结点,不管你provider和consumer断开后,持久化节点都不会消失;
    2.1.4 Dubbo启动时,Consumer和Provider都会把自身的URL、端口等格式化为字符串,然后注册到zookeeper相应节点下,作为一个临时节点,当连断开时,节点被删除。
    eg:
    服务提供者的持久化节点“providers”,其子节点代表了每一个服务真正的提供者
    服务消费者的持久化节点“consumers”,其子节点代表每一个服务真正的消费者
    2.1.5 比如Providers持久化节点下注册的是:192.168.1.12*(描述121是吃饭,122睡觉,123打游戏,124健身,四种不同的服务),Consumer在启动时,不仅仅会注册自身ip、port等信息到 …/consumers/目录下,同时还会订阅…/providers目录下所有子节点,具体的看你订阅具体是哪一个节点(比如订阅.124健身服务),实时获取其在Providers持久化节点下的URL字符串信息。register返回给Consumer这个ip——192.168.1.124,Consumer拿着这个iP直接去找提供者Provider RPC调用这项服务——健身。
    2.1.6 监控中心启动时订阅com.bob.dubbo.service.CityDubboService目录下的所有提供者provider和消费者consumer 的URL。

    四、Dubbo+Zookeeper补充

    1.图示介绍

    1.1 Zookeeper作为Dubbo的注册中心支持以下功能:

    1.1.1 当提供者出现断电等异常宕机时,注册中心能自动删除提供者节点信息;
    1.1.2 当注册中心重启时,能自动恢复注册数据,以及订阅请求;
    1.1.3 当会话过期时,注册中心能自动恢复注册数据,以及订阅请求;
    1.1.4 当设置时,记录提供者provider失败注册和消费者consumer失败订阅请求,后台可定时重试;
    1.1.5 可通过设置设置zookeeper 登录信息;
    1.1.6 可通过自定义zookeeper 的根节点,不设置将使用默认的“/dubbo”作为根节点;
    1.1.7 支持 * 号通配符 ,消费者可订阅提供者的所有分组 和所有版本。

    1.2 注意点

    1.2.1 消费者从ZK获取provider地址列表后,会在本地缓存一份。当ZK注册中心所有节点全部宕掉之后,消费者可以使用本地缓存的服务列表和provider进行通信。
    ZK的意义在于为provider、consumer提供服务的发布和订阅,让消费者及时感知最新的服务列表,consumer真正调用provider是通过某种通信协议直接调用,并不依赖ZK。
    所以当zookeeper宕机之后,不会影响消费者调用服务提供者,影响的是zookeeper宕机之后如果提供者provider信息有变动、provider宕机,zk无法把变更最新的provider列表数据通知推送给consumer,consumer会因为感知不到变更时间,不去拉取最新的服务列表,导致本地缓存的服务列表有可能是过时的,或者说consumer基于本地缓存的提供者服务列表,PRC其中一台provider1,但是provider1宕机了或者信息变动了,导致RPC失败!

  • 相关阅读:
    Java的静态块与实例块(转)
    Programming Ability Test学习 1031. Hello World for U (20)
    Programming Ability Test学习 1011. World Cup Betting (20)
    Programming Ability Test学习 1027. Colors in Mars (20)
    Programming Ability Test学习 1064. Complete Binary Search Tree (30)
    Programming Ability Test学习 1008. Elevator (20)
    【maven详解-生命周期】Maven的生命周期和插件
    【maven详解-插件】maven插件学习之源码插件Source Xref
    $(document).ready(){}、$(fucntion(){})、(function(){})(jQuery)onload()的区别
    你还没真的努力过,就轻易输给了懒惰
  • 原文地址:https://www.cnblogs.com/tenghw/p/13711361.html
Copyright © 2011-2022 走看看