一、ZooKeeper注册中心

Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,推荐使用。

流程说明:

  • 服务提供者启动时: 向 /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 group="dubbo" /> 设置 zookeeper 登录信息;
  • 可通过 `` 设置 zookeeper 的根节点,不配置将使用默认的根节点;
  • 支持 * 号通配符 <dubbo:reference group="*" version="*" />,可订阅服务的所有分组和所有版本的提供者。

作为 Dubbo 的老牌黄金搭档 ZooKeeper,我们在单独讲解 Dubbo 时已经给大家分享过如何使用了,本文系 Spring Cloud Alibaba 系列文章,重点对象是 Nacos,所以 ZooKeeper 这里就不过多赘述了。

二、Nacos 注册中心

Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。Nacos 是 Dubbo 生态系统中重要的注册中心实现。

Nacos 官网:https://nacos.io/zh-cn/

Github:https://github.com/alibaba/nacos

预备工作

当您将 Nacos 整合到您的 Dubbo 工程之前,请确保后台已经启动 Nacos 服务。

快速上手

Dubbo 融合 Nacos 成为注册中心的操作步骤非常简单,大致步骤可分为“增加 Maven 依赖”和“配置注册中心“。

依赖

核心依赖主要是 dubbo-registry-nacosnacos-client

<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-registry-nacos -->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>2.7.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client -->
<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>1.3.0</version>
</dependency>

配置注册中心

服务提供者和服务消费者只需要调整 address 属性配置即可。

单机配置:

<!-- 使用 Nacos 注册中心,单机版 -->
<dubbo:registry address="nacos://127.0.0.1:8848"/>
<!-- 或 -->
<dubbo:registry protocol="nacos" address="127.0.0.1:2181"/>

集群配置:

 使用 Nacos 注册中心,集群版 -->
<dubbo:registry address="nacos://192.168.10.101:2181?backup=192.168.10.102:2181,192.168.10.103:2181"/>
<!-- 或 -->
<dubbo:registry protocol="nacos" address="192.168.10.101:2181,192.168.10.102:2181,192.168.10.103:2181"/>

随后,重启您的 Dubbo 应用,Dubbo 的服务提供和消费信息在 Nacos 控制台中即可显示。

Nacos和Zookeeper对比

主要平时用的较多是配置中心和服务注册中心,所以也是结合这两点功能做出对应的对比,主要比对集群模式。

以下仅仅整理了个人理解后的观点,如有疑问欢迎咨询讨论。

1.Zookeeper

其实明白一点Zookeeper的功能主要是它的树形节点来实现的。当有数据变化的时候或者节点过期的时候,会通过事件触发通知对应的客户端数据变化了,然后客户端再请求zk获取最新数据,采用push-pull来做数据更新。

ZK最重要的就是它的ZAB(消息广播和崩溃恢复)协议了。
消息广播: 集群中zk在数据更新的时候,通过leader节点将将消息广播给其他follower节点,采用简单的两阶段提交模式,先request->ack->commit,当超过一半的follower节点响应可以提交就更新代码。

崩溃恢复: 当leader挂了,或者超半数follower投票得出leader不可用,那么会重新选举,这段期间zk服务是不可用的。通过最新的 xid来选举出新的leader,选举出来后需要将新的leader中的数据更新给超过半数的follower节点才能对外提供服务。

2.Nacos

Nacos的配置中心和注册中心实现的是两套代码,和Zk不同,

1.配置中心
Nacos和Zookeeper都可以作为配置中心,做一些可以实时变化的配置数据存储,然后实时更新线上数据。

1.1 存储和数据更新
Nacos:依赖Mysql数据库做数据存储,当有数据更新的时候,直接更新数据库的数据,然后将数据更新的信息异步广播给Nacos集群中所有服务节点数据变更,在由Nacos服务节点更新本地缓存,然后将通知客户端节点数据变化。

Zookeeper:利用zk的树型结构做数据存储,当有数据更新的时候使用过半机制保证各个节点的数据一致性;然后通过zk的事件机制通知客户端。

这里可以明显发现差异:

服务器存储位置不同,分别采用mysql和zk本身存储
消息发送,一个有采用过半机制保持一致性,另外一个异步广播,通过后台线程重试保证。

2.注册中心

Nacos:nacos支持两种方式的注册中心,持久化和非持久化存储服务信息。

非持久直接存储在nacos服务节点的内存中,并且服务节点间采用去中心化的思想,服务节点采用hash分片存储注册信息
持久化使用Raft协议选举master节点,同样采用过半机制将数据存储在leader节点上
Zookeeper:利用zk的树型结构做数据存储,服务注册和消费信息直接存储在zk树形节点上,集群下同样采用过半机制保证服务节点间一致性

这里的差异:

nacos支持持久化和非持久化存储即有点 AP和CP 分布式一致性的概念,nacos的CP-持久化更像贴合zk的模式(过半机制),默认非持久化采用内存存储速度更快,而且分片存储,不利点就是某个服务节点挂掉,可能出现部分时间调用失败。因为服务调用本身就是实时的,持久化存储起来应该意义不大,及时变化才是真理。

微服务系列之ZooKeeper注册中心和Nacos注册中心Nacos和Zookeeper对比相关推荐

  1. 微服务系列:服务注册与发现的实现原理、及实现优劣势比较

    服务注册与发现的来源 首先,服务注册与发现是来自于微服务架构的产物. 在传统的服务架构中,服务的规模处于运维人员的可控范围内.当部署服务的多个节点时,一般使用静态配置的方式实现服务信息的设定.而在微服 ...

  2. 分布式与微服务系列(三)、SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者、消费者)

    SpringBoot+Zookeeper集群+Nginx反向代理+Dubbo分布式托管(提供者.消费者) 一.软件架构和微服务需求 1.1.微服务需求 1.2.框架选择 1.3.集群分布(下面为此图实 ...

  3. springcloud微服务系列之服务注册与发现组件Eureka

    一.Eurake的简介 二.使用Eureka进行服务的注册消费 1.创建一个服务注册中心 2.创建服务的提供者 3.创建服务的消费者 总结 一.Eurake的简介 今天我们来介绍下springclou ...

  4. 分布式与微服务系列 - Dubbo

    一.前言 本内容仅用于个人学习笔记,如有侵扰,联系删除 视频教程:尚硅谷Dubbo教程(dubbo经典之作) 二.基础知识 1.分布式基础理论 1.1.什么是分布式系统? <分布式系统原理与范型 ...

  5. Spring Cloud微服务系列文,服务调用框架Feign

    之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON.    这种 ...

  6. 01.微服务系列介绍

    微服务系列实践 .NET CORE 在开始之前呢,还是得废话一下,毕竟还是需要介绍一下这个系列我们要实现什么样的一套服务架构,也让大家能初步的有一个了解,后续实践起来也有一个完整的概念,相对也会容易的 ...

  7. 微服务系列实践 .NET CORE

    从事这个行业转眼已经6年了,从当初刚毕业的在北京朝八晚十,从二环到五环,仍每天精力充沛的小愤青:再到深圳一点一滴的辛勤在软件行业的耕种,从当初单体应用架构到现在微服务架构的经历,回想起来自己的收获倒是 ...

  8. 微服务系列 —— 一小时搞定Eureka

    微服务系列  -- 一小时搞定Eureka 一.什么是Eureka Eureka是Netflix公司开源的产品,它是一种基于REST( Representational State Transfer  ...

  9. Spring Cloud微服务系列-Eureka Client源码解析(二)

    导语   上一篇博客中介绍了关于Eureka Client源码的基础部分,如果对于基础部分不是很了解的读者可以点击下面的连接进入到源码分析一中,从头开始学习 Spring Cloud微服务系列 Dis ...

  10. 微服务系列:分布式文件存储之 MinIO 入门指南

    经过前面多篇文章我们学习了服务网关.服务调用.服务注册.服务监控等微服务系列的的相关知识,今天开始我们来学习一下分布式文件的相关知识. 首先我们从学习 MinIO 对象存储服务开始,后面还会学习下其他 ...

最新文章

  1. IO多路复用之poll总结
  2. spring boot+thmyleaf ModelAndView页面传值
  3. jQuery 插件开发指南
  4. 2021-2025年中国宠物美容台行业市场供需与战略研究报告
  5. 当一名程序员喝醉之后......
  6. 【POJ1679】The Unique MST(非严格次小生成树)
  7. 重置 Winsock:初始化计算机网络环境
  8. 使用coin3d画个小模型
  9. mod sim tcp配置_ModSim32-ModScan32Modbus调试工具使用及配置说明
  10. c语言编程智能交通灯系统,智能交通灯系统.doc
  11. Webpower携手梅花网,打造优雅的SaaS产品服务
  12. 如何在Mac电脑上更改地区或国家?
  13. 关于 TJA1043 休眠和唤醒一点使用方法
  14. 腾讯云对象存储临时密钥qcloud-python-sts库安装失败解决办法
  15. 怎么制作云端服务器,自己搭建云端服务器
  16. 天钰原装FP6606ACAP6芯片,仅5V至20V VBUS电源,过电压保护
  17. uni-app 倒计时组件
  18. PMP模拟试题每日5题(5月7日)
  19. 无线传感网学习笔记(8)—— DSDV路由协议 和 AODV路由协议
  20. 极光推送在APICloud平台的使用教程

热门文章

  1. hive安装mysql驱动_Hadoop-2.6.0为基础的Hive安装
  2. duration java_Java Duration类| plusDays()方法与示例
  3. java日历类add方法_Java日历setFirstDayOfWeek()方法与示例
  4. arcgis字段计算器无法赋值_Arcgis空间连接工具的妙用
  5. 实验一 线性表的顺序存储与实现_【自考】数据结构中的线性表,期末不挂科指南,第2篇
  6. oracle开归档服务器,ORACLE RAC 启用归档
  7. php面试php数组变ahp,关于PHP字符串的一道面试题
  8. 互联网传真 传真指令_传真的完整形式是什么?
  9. java reader_Java Reader ready()方法与示例
  10. java 方法 示例_Java语言环境getISOLanguages()方法与示例