本文首发于微信公众号【猿灯塔】,转载引用请说明出处

今天是猿灯塔“365天原创计划”第4天。

今天呢!灯塔君跟大家讲:

一.Dubbo意义

网站应用的架构变化经历了一个从所有服务分布在一台服务器上(All in one 、单一应用架构)到 垂直

应用架构 (MVC模式,按照各模块的职能划分)到分布式应用架构(RPC、按照服务不同分布在不同的

服务器上)再到面向服务的架构(SOA,增加调度中心,负责集群的调度和管理)的过程。 Dubbo就
是处在SOA架构阶段的一个远程服务调用框架
 
二..系统架构

Dubbo系统分为五个部分:远程服务运行容器(Container),远程服务提供方(Provider)、注册中
心(Register)、远程服务调用者(Consumer)、监控中心(Monitor)。
Dubbo服务调用过程:
  • 服务提供方(Provider)所在的应用在容器中启动并运行(这个容器可以说是该应用部署的tomcat)
  • 服务提供方(Provider)将自己要发布的服务注册到注册中心(Registry)
  • 服务调用方(Consumer)启动后向注册中心订阅它想要调用的服务
  • 注册中心(registry)存储着Provider注册的远程服务,并将其所管理的服务列表通知给服务调用
  • 方(Consumer),且注册中心和提供方和调用方之间均保持长连接,可以获取Provider发布的服
  • 务的变化情况,并将最新的服务列表推送给Consumer
  • Consumer根据从注册中心获得的服务列表,根据软负载均衡算法选择一个服务提供者
  • (Provider)进行远程服务调用,如果调用失败则选择另一台进行调用。(Consumer会缓存服务
  • 列表,即使注册中心宕机也不妨碍进行远程服务调用)
  • 监控中心(Monitor)对服务的发布和订阅进行监控和统计服务消费者和提供者,在内存中累计调
  • 用次数和调用时间,定时每分钟发送一次统计数据到监控中心(Monitor);Monitor可以选择
  • Zookeeper、Redis或者Multiast注册中心等,后序介绍。
 
三.Dubbo + Zookeeper

Dubbo可以用Zookeeper作为注册中心,存储Provider注册的远程服务信息。

Zookeeper采用树形的目录结构来存储信息。

  • 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地 址
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地 址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地 址。
 
 
支持以下功能:
  • 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
  • 当注册中心重启时,能自动恢复注册数据,以及订阅请求
  • 当会话过期时,能自动恢复注册数据,以及订阅请求
  • 当设置<dubbo:registry check="false" />时,记录失败注册和订阅请求,后台定时重试
  • 可通过设置<dubbo:registry username="admin" password="124" />设置zookeeper 登录信息
  • 可通过<dubbo:registry group="dubbo" />设置 zookeeper 的根节点,不设置将使用无 根树
  • 支持 * 号通配符 <dubbo:redistry group="" version="" />,可订阅服务的所有分组 和所有版本的
提供者
 
四.Dubbo + Redis 
Redis是一个基于内存的,以Key-Value形式存储数据的高性能Nosql数据库,可以用来存储远程服务信
息用作注册中心

使用 Redis 的 Key—Map 结构存储数据结构:
  • 主键 Key 为服务名和服务类型:比如./dubbo/com.foo.BarService/providers或./dubbo/com.foo.BarService/providers,相当于Zookeeper中的第三层目录
  • 值 Map 中的 Key 为 URL 地址 ,Map 中的 Value 为过期时间,用于判断脏数据,脏数据由监控中心删除
使用 Redis 的 Publish/Subscribe 事件通知数据变更:
  • 通过事件的值区分事件类型: register , unregister , subscribe , unsubscribe
  • 普通消费者直接订阅指定服务提供者的 Key,只会收到指定服务的 register , unregister 事件
  • 监控中心通过 psubscribe 功能订阅 /dubbo/* ,会收到所有服务的所有变更事件
调用过程:
  • 服务提供方启动时,向 Key:/dubbo/com.foo.BarService/providers 下,添加当前提供者的地址, 并向 Channel:/dubbo/com.foo.BarService/providers 发送 register 事件
  • 服务消费方启动时,从 Channel:/dubbo/com.foo.BarService/providers 订阅 register 和unregister 事件 , 并向 Key:/dubbo/com.foo.BarService/providers 下,添加当前消费者的地址
  • 服务消费方收到 register 和 unregister 事件后,从 Key:/dubbo/com.foo.BarService/providers
下获取提供者地址列表
  • 服务监控中心启动时,从 Channel:/dubbo/* 订阅 register 和 unregister ,以及subscribe 和unsubsribe 事件
  • 服务监控中心收到 register 和 unregister 事件后,从Key:/dubbo/com.foo.BarService/providers 下获取提供者地址列表
  • 服务监控中心收到 subscribe 和 unsubsribe 事件后,从Key:/dubbo/com.foo.BarService/consumers 下获取消费者地址列表

365天干货不断,可以微信搜索「 猿灯塔」第一时间阅读,回复【资料】【面试】【简历】有我准备的一线大厂面试资料和简历模板

 

Dubbo及注册中心原理的更多相关文章

  1. 如果有人问你 Dubbo 中注册中心工作原理,就把这篇文章给他

    注册中心作用 开篇首先想思考一个问题,没有注册中心 Dubbo 还能玩下去吗? 当然可以,只要知道服务提供者地址相关信息,消费者配置之后就可以调用.如果只有几个服务,这么玩当然没问题.但是生产服务动辄 ...

  2. Dubbo配置注册中心设置application的name使用驼峰命名法存在的隐藏项目启动异常问题

    原创/朱季谦 首先,先提一个建议,在SpringBoot+Dubbo项目中,Dubbo配置注册中心设置的application命名name的值,最好使用xxx-xxx-xxx这样格式的,避免随便使用驼 ...

  3. Dubbo多注册中心和Zookeeper服务的迁移

    一.Dubbo多注册中心 1. 应用场景 例如阿里有些服务来不及在青岛部署,只在杭州部署,而青岛的其它应用需要引用此服务,就可以将服务同时注册到两个注册中心. consumer.xml <?xm ...

  4. SpringCloud之Eureka注册中心原理及其搭建

    一.Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCl ...

  5. Dubbo Multicast 注册中心即相关代码实现

    Dubbo 的 Multicast注册中心有下面特点: 不需要启动任何中心节点,只要广播地址一样,就可以互相发现 组播受网络结构限制,只适合小规模应用或开发阶段使用. 组播地址段: 224.0.0.0 ...

  6. Javaconfig形式配置Dubbo多注册中心

    多注册中心,一般用不到,但是某些情况下的确能解决不少问题,可以将某些dubbo服务注册到2套dubbo系统中,实现服务在2套系统间的共用. 网上的配置说明很多,但包括dubbo官方说明文档都是以xml ...

  7. Dubbo多注册中心

    一.创建提供者08-provider-registers (1) 创建工程 直接复制05-provider-group工程,并命名为08-provider-registers (2) 修改配置文件 二 ...

  8. dubbo 多注册中心

    这个我调试了下,多个注册中心在创建代理的时候,每个注册中心对应一个invoker,持有一个RegistryDirectory对应一个zkClinet,并且维护这样一个map: 那些不正确zk在创建代理 ...

  9. 阿里dubbo服务注册原理解析

           阿里分布式服务框架 dubbo现在已成为了外面很多中小型甚至一些大型互联网公司作为服务治理的一个首选或者考虑方案,相信大家在日常工作中或多或少都已经用过或者接触过dubbo了.但是我搜了 ...

随机推荐

  1. Java实现 蓝桥杯VIP 算法提高 企业奖金发放

    算法提高 企业奖金发放 时间限制:1.0s 内存限制:512.0MB 企业发放的奖金根据利润提成.利润低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10% ...

  2. Java实现 蓝桥杯 算法提高 成绩排名

    试题 算法提高 成绩排名 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你, ...

  3. java实现第四届蓝桥杯金蝉素数

    金蝉素数 考古发现某古墓石碑上刻着一个数字:13597,后研究发现: 这是一个素数! 并且,去掉首尾数字仍是素数! 并且,最中间的数字也是素数! 这样特征的数字还有哪些呢?通过以下程序的帮助可以轻松解 ...

  4. java实现第六届蓝桥杯奇怪的数列

    奇怪的数列 从X星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 - YY博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行& ...

  5. java实现第六届蓝桥杯生命之树

    生命之树 生命之树 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点 ...

  6. Github 创建SSH密钥克隆仓库详解

    1.登录Github主页,点击任意一个repository,点击Clone or download,点击Use SSH 2.点击add a new pulbic key,创建公钥 3.下面图中的Tit ...

  7. PAT 挖掘机技术哪家强

    为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即参赛人数.随后 N  ...

  8. 调优 | Apache Hudi应用调优指南

    通过Spark作业将数据写入Hudi时,Spark应用的调优技巧也适用于此.如果要提高性能或可靠性,请牢记以下几点. 输入并行性:Hudi对输入进行分区默认并发度为1500,以确保每个Spark分区都 ...

  9. Burpsuite intruder模块 越过token进行爆破,包含靶场搭建

    安装靶场 链接:https://pan.baidu.com/s/19X0oC63oO2cQKK6UL5xgOw 提取码:yq7f 下载完成放入网站根目录 点击初始化安装 出现错误,进行跟踪 发现是数据 ...

  10. 【JAVA习题三十】求0—7所能组成的奇数个数

    package erase; public class 求0到7所能组成的奇数个数 { public static void main(String[] args) { /* * 求0—7所能组成的奇 ...