前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务为什么一定要 Zookeeper 呢?

微服务为什么一定要 Zookeeper 呢?

作者头像
芋道源码
发布2020-01-16 15:09:49
4380
发布2020-01-16 15:09:49
举报
文章被收录于专栏:芋道源码1024

来源:Marvin Mai

blog.csdn.net/Mkhaixian2014/article/details/89980476

  • 一、背景
  • 二、Zookeeper的特性
    • 1.树状目录结构
    • 2.持久节点(Persistent)
    • 3.持久有序节点(Persistent_sequential)
    • 4.临时节点(Ephemeral)
    • 5.临时有序节点(Ephemeral_sequential)
    • 6.节点监听(Wacher)
  • 三、微服务中应用场景
    • 1.分布式锁
    • 2.服务注册与发现

一、背景

了解微服务的小伙伴都应该知道Zookeeper,ZooKeeper是一个分布式的,开源的分布式应用程序协调服务。现在比较流行的微服务框架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.分布式锁

分布式锁主要解决不同进程中的资源同步问题。大家可以联想一下单进程中的多线程共享资源的情况,线程需要访问共享资源,首先要获得锁,操作完共享资源后便释放锁。分布式中,上述的锁就变成了分布式锁了。那这个分布式锁又是如何实现呢?

步骤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)推送给服务消费方,这就是服务动态发现的原理

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 芋道源码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、Zookeeper的特性
    • 1. 树状目录结构
      • 2. 持久节点(Persistent)
        • 3. 持久有序节点(Persistent_sequential)
          • 4. 临时节点(Ephemeral)
            • 5. 临时有序节点(Ephemeral_sequential)
              • 6. 节点监听(Wacher)
              • 三、微服务中应用场景
                • 1.分布式锁
                  • 2.服务注册与发现
                    • 2.1 背景
                    • 2.2 服务注册原理
                    • 2.3 服务动态发现原理
                相关产品与服务
                微服务引擎 TSE
                微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档