了解微服务的小伙伴都应该知道ZookeeperZookeeper是一个分布式的,开源的分布式应用程序协调服务。

现在比较流行的微服务框架Dubbo、Spring Cloud都可以使用Zookeeper作为服务发现与组册中心。但是,为什么Zookeeper就能实现服务发现与组册呢?

Zookeeper的特性

我们先来了解一下Zookeeper的特性吧,因为它的特性决定了它的使用场景。

1.树状目录结构

如上图,Zookeeper是一个树状的文件目录结构,有点想应用系统中的文件系统的概念。每个子目录(如App)被称为znode,我们可以对每个znode进行增删改查。

2.持久节点(Persistent)

客户端与Zookeeper服务端断开连接后,该节点仍然存在。

3.持久有序节点(Persistent_sequential)

在持久节点基础上,由zookeeper给该节点名称进行有序编号,如0000001,0000002。

4.临时节点(Ephemeral)

客户端与Zookeeper服务端断开连接后,该节点被删除。临时节点下,不存在子节点。

5.临时有序节点(Ephemeral_sequential)

在临时节点基础上,由Zookeeper给该节点名称进行有序编号,如0000001,0000002。

6.节点监听(Wacher)

客户端2注册监听它关心的临时节点SubApp1的变化,当临时节点SubApp1发生变化时(如图中被删除的时候),zookeeper会通知客户端2。

该机制是zookeeper实现分布式协调的重要特性。我们可以通过get,exists,getchildren三种方式对某个节点进行监听。但是该事件只会通知一次。

微服务中应用场景

1.分布式锁

分布式锁主要解决不同进程中的资源同步问题。大家可以联想一下单进程中的多线程共享资源的情况,线程需要访问共享资源,首先要获得锁,操作完共享资源后便释放锁。Zookeeper怎么实现分布式锁?这篇推荐大家阅读。

分布式中,上述的锁就变成了分布式锁了。那这个分布式锁又是如何实现呢?

步骤1: 如图,根据Zookeeper有序临时节点的特性,每个进程对应连接一个有序临时节点(进程1对应节点/znode/00000001,进程2对应节点/znode/00000002…如此类推)。

每个进程监听对应的上一个节点的变化。编号最小的节点对应的进程获得锁,可以操作资源。

步骤2: 当进程1完成业务后,删除对应的子节点/znode/00000001,释放锁。此时,编号最小的锁便获得锁(即/znode/00000002对应进程)。

重复以上步骤,保证了多个进程获取的是同一个锁,且只有一个进程能获得锁,就是Zookeeper分布式锁的实现原理。

2.服务注册与发现

2.1 背景

在微服务中,服务提供方把服务注册到Zookeeper中心去如图中的Member服务,但是每个应用可能拆分成多个服务对应不同的Ip地址,Zookeeper注册中心可以动态感知到服务节点的变化。

服务消费方(Order 服务)需要调用提供方(Member 服务)提供的服务时,从Zookeeper中获取提供方的调用地址列表,然后进行调用。这个过程称为服务的订阅。

2.2服务注册原理

rpc框架会在Zookeeper的注册目录下,为每个应用创建一个持久节点,如order应用创建order持久节点,member应用创建member持久节点。

然后在对应的持久节点下,为每个微服务创建一个临时节点,记录每个服务的URL等信息。

2.3服务动态发现原理

由于服务消费方向Zookeeper订阅了(监听)服务提供方,一旦服务提供方有变动的时候(增加服务或者减少服务),Zookeeper就会把最新的服务提供方列表(member list)推送给服务消费方,这就是服务动态发现的原理。

作者:Marvin Mai

来源:https://dwz.cn/6ByfGykc

微服务为什么一定要Zookeeper?相关推荐

  1. 微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比

    前言 服务注册中心本质上是为了解耦服务提供者和服务消费者.对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的.更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数 ...

  2. 跟着《架构探险》学轻量级微服务架构 (一)

    架构探险 微服务概念这两年已经火遍大江南了,但在实际的开发和使用中,用到的还是挺少的,尤其对创业团队来说. 在上一个产品中,我们也在把传统的开发模式,不断往「微服务」方向靠拢.但终究还是处于学习阶段. ...

  3. 给老板解释解释,为什么要用SpringCloud alibaba作为微服务开发框架???

    什么是微服务 提到微服务不得不提Martin Fowler在2014年3月25日发表的文章 Microservices,里面给出了微服务的定义.后续国内所有关于微服务的介绍都是基于这篇文章的翻译,或加 ...

  4. Java 微服务框架选型(Dubbo 和 Spring Cloud?),大厂 HR 如何面试

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 微服 ...

  5. 为什么要用SpringCloud alibaba作为微服务开发框架?

    作者 | 飘渺Jam      责编 | 欧阳姝黎 什么是微服务 提到微服务不得不提Martin Fowler在2014年3月25日发表的文章 Microservices,里面给出了微服务的定义.后续 ...

  6. 从前世看今生,从JavaEE到微服务

    我有一个习惯,接触到新概念.新技术出现后,就会探究他的前世今生.来龙去脉,正所谓"太阳底下没有新鲜事",喜欢从对比中找到价值点,不如此就觉得理解不透彻,就觉得少了点什么.微服务的概 ...

  7. 微服务之RPC(远程过程调用)的四种方式

    微服务思想 微服务思想-注册中心zookeeper 微服务: 架构设计采用分布式思想,当服务器发生故障时,可以实现自动化的故障迁移.无需人为干预. 注册中心实现原理: ZK工作原理说明 Zookeep ...

  8. 你给我解释解释,为什么TMD非得选择SpringCloud alibaba作为微服务开发框架?

    什么是微服务 提到微服务不得不提Martin Fowler在2014年3月25日发表的文章 Microservices,里面给出了微服务的定义.后续国内所有关于微服务的介绍都是基于这篇文章的翻译,或加 ...

  9. 前世看今生,从JavaEE到微服务

    声明:本文来自作者原创投稿文章,未经许可,禁止任何形式的转载. 作者:焦烈焱,普元CTO. 责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN ...

最新文章

  1. 高动态范围图像-单图
  2. 配置和使用OCS 2007会议功能
  3. apache camel_使用Apache Camel进行负载平衡
  4. Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP
  5. Laravel nginx 伪静态规则
  6. 安装Visual Studio 2008系统要求
  7. webpack4.0配置记录(2) 1
  8. sql字符串拼接,转义
  9. 工程数学(线性代数)笔记
  10. 为什么马云最佩服「唐僧团队」?
  11. 黑鲨helo支持html吗,黑鲨Helo的实用功能有哪些 黑鲨Helo的使用技巧
  12. 【Scala笔记——道】Scala 循环遍历 for详解
  13. 安装fluxion 报错 E: 无法定位软件包 pyrit
  14. PageHelper处理分页问题,total总数不对
  15. 浅谈js下的发布订阅模式(观察者模式)
  16. 有限责任公司破产清算程序有哪些
  17. OpenXml开发-基本环境
  18. 2.4亿单身人口新浪潮,小红书品牌3步抓住流量风口
  19. 马云接受外媒专访:中国的五大银行想杀了我
  20. 离线识别率最高的Python人脸识别系统

热门文章

  1. Cassandra HBase和MongoDb性能比较
  2. android中SimpleAdapter、ArrayAdapter的用法以及继承了ListActivity的设置适配器的方法...
  3. IT经理世界:专注莫如史玉柱
  4. OpenCV中6种访问Mat元素的方法
  5. SAR 和光学图像配准研究
  6. ubuntu更换阿里源
  7. ACE反应器(Reactor)模式
  8. Nginx简介及使用Nginx实现负载均衡的原理【通俗易懂,言简意赅】
  9. SIP中的SDP offer/answer交换初探
  10. Python -bs4反爬虫解决方法