Zookeeper 服务注册中心

Zookeeper 官网

ZooKeeper:分布式应用程序的分布式协调服务

ZooKeeper 是分布式应用程序的分布式开源协调服务。它公开了一组简单的原语,分布式应用程序可以基于这些原语来实现更高级别的同步、配置维护以及组和命名服务。它被设计为易于编程,并使用以熟悉的文件系统目录树结构为样式的数据模型。它在 Java 中运行,并具有 Java 和 C 的绑定。

众所周知,协调服务很难做好。它们特别容易出现诸如竞争条件和死锁之类的错误。ZooKeeper 背后的动机是减轻分布式应用程序从头开始实现协调服务的责任。

设计目标

ZooKeeper 很简单。 ZooKeeper 允许分布式进程通过共享的分层命名空间相互协调,该命名空间的组织类似于标准文件系统。命名空间由数据寄存器组成——在 ZooKeeper 中称为 znodes——这些类似于文件和目录。与典型的为存储而设计的文件系统不同,ZooKeeper 数据保存在内存中,这意味着 ZooKeeper 可以实现高吞吐量和低延迟。

ZooKeeper 实现非常重视高性能、高可用、严格有序的访问。ZooKeeper 的性能方面意味着它可以用于大型分布式系统。可靠性方面使其不会成为单点故障。严格的排序意味着可以在客户端实现复杂的同步原语。

**ZooKeeper 被复制。**就像它协调的分布式进程一样,ZooKeeper 本身旨在通过一组称为集合的主机进行复制。

组成 ZooKeeper 服务的服务器必须相互了解。它们维护内存中的状态图像,以及持久存储中的事务日志和快照。只要大多数服务器可用,ZooKeeper 服务就可用。

客户端连接到单个 ZooKeeper 服务器。客户端维护一个 TCP 连接,通过它发送请求、获取响应、获取监视事件和发送心跳。如果与服务器的 TCP 连接中断,客户端将连接到不同的服务器。

**ZooKeeper 已订购。**ZooKeeper 用反映所有 ZooKeeper 事务顺序的数字标记每个更新。后续操作可以使用顺序来实现更高级别的抽象,例如同步原语。

**ZooKeeper 速度很快。**它在“读取主导”工作负载中特别快。ZooKeeper 应用程序在数千台机器上运行,它在读取比写入更常见的情况下表现最佳,比率约为 10:1。

数据模型和分层命名空间

ZooKeeper 提供的命名空间很像标准文件系统的命名空间。名称是由斜杠 (/) 分隔的一系列路径元素。ZooKeeper 命名空间中的每个节点都由路径标识。

ZooKeeper 的分层命名空间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pI4DouOu-1623079005390)(C:\Users\ASUS\Desktop\spring-boot系列\springcloud\zookeeper.assets\image-20210607222849533.png)]

节点和临时节点

与标准文件系统不同,ZooKeeper 命名空间中的每个节点都可以拥有与其关联的数据以及子节点。这就像拥有一个允许文件也成为目录的文件系统。(ZooKeeper 旨在存储协调数据:状态信息、配置、位置信息等,因此每个节点存储的数据通常很小,在字节到千字节范围内。)我们使用术语znode来明确我们正在谈论 ZooKeeper 数据节点。

Znodes 维护一个统计结构,其中包括数据更改、ACL 更改和时间戳的版本号,以允许缓存验证和协调更新。每次 znode 的数据更改时,版本号都会增加。例如,每当客户端检索数据时,它也会收到数据的版本。

存储在命名空间中每个 znode 的数据是原子读写的。读取获取与 znode 关联的所有数据字节,写入替换所有数据。每个节点都有一个访问控制列表 (ACL),它限制了谁可以做什么。

ZooKeeper 也有临时节点的概念。只要创建 znode 的会话处于活动状态,这些 znode 就存在。当会话结束时,znode 被删除。

有条件的更新和监视

动物园管理员支持的概念手表。客户端可以在 znode 上设置监视。当 znode 发生变化时,会触发并移除 watch。当 watch 被触发时,客户端会收到一个数据包,说 znode 已经改变了。如果客户端和 ZooKeeper 服务器之一之间的连接中断,客户端将收到本地通知。

**3.6.0 中的新功能:**客户端还可以在 znode 上设置永久的递归监视,在触发时不会删除这些监视,并且会以递归方式触发注册的 znode 以及任何子 znode 上的更改。

保证

ZooKeeper 非常快速且非常简单。但是,由于它的目标是成为构建更复杂服务(例如同步)的基础,因此它提供了一组保证。这些都是:

  • 顺序一致性 - 来自客户端的更新将按发送顺序应用。
  • 原子性 - 更新要么成功要么失败。没有部分结果。
  • 单一系统映像 - 无论连接到哪个服务器,客户端都将看到相同的服务视图。即,即使客户端故障转移到具有相同会话的不同服务器,客户端也永远不会看到系统的旧视图。
  • 可靠性 - 应用更新后,它将从那时起一直存在,直到客户端覆盖更新。
  • 及时性 - 系统的客户视图保证在特定时间范围内是最新的。

简单的API

ZooKeeper 的设计目标之一是提供一个非常简单的编程接口。因此,它仅支持以下操作:

  • create : 在树中的某个位置创建一个节点
  • delete : 删除一个节点
  • 存在:测试节点是否存在于某个位置
  • get data : 从节点读取数据
  • 设置数据:将数据写入节点
  • get children : 检索节点的子节点列表
  • sync : 等待数据被传播

执行

ZooKeeper 组件显示了 ZooKeeper 服务的高级组件。除了请求处理器之外,组成 ZooKeeper 服务的每个服务器都复制每个组件的自己的副本。

复制数据库是包含整个数据树的内存数据库。更新会记录到磁盘以实现可恢复性,并且写入会在应用到内存数据库之前序列化到磁盘。

每个 ZooKeeper 服务器都为客户端提供服务。客户端只连接到一台服务器来提交请求。读取请求由每个服务器数据库的本地副本提供服务。改变服务状态的请求,写请求,由协议协议处理。

作为协议协议的一部分,来自客户端的所有写请求都被转发到一个称为领导者的服务器。其余的 ZooKeeper 服务器,称为follower,接收来自领导者的消息提议并就消息传递达成一致。消息传递层负责在失败时替换领导者并将追随者与领导者同步。

ZooKeeper 使用自定义原子消息传递协议。由于消息传递层是原子的,ZooKeeper 可以保证本地副本永远不会发散。当领导者收到一个写请求时,它会计算应用写时系统的状态,并将其转换为捕获这个新状态的事务。

Zookeeper 服务注册中心相关推荐

  1. 8、Zookeeper服务注册与发现原理浅析

    了解Zookeeper的我们都知道,Zookeeper是一种分布式协调服务,在分布式应用中,主要用来实现分布式服务的注册与发现以及分布式锁,本文我们简单介绍一下Zookeeper是如何实现服务的注册与 ...

  2. 微服务 注册中心的作用_微服务架构Dubbo之注册中心(Zookeeper)

    注册中心简介 在微服务架构中,注册中心是核心的基础服务之一.在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中.Dubbo是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用 ...

  3. 服务注册中心,Eureka与Zookeeper比较

    2019独角兽企业重金招聘Python工程师标准>>> 1. 前言 服务注册中心,给客户端提供可供调用的服务列表,客户端在进行远程服务调用时,根据服务列表然后选择服务提供方的服务地址 ...

  4. 使用Zookeeper实现服务注册中心-《架构探险-从零开始写分布式服务框架》读书笔记

    前言 最近在看<架构探险-从零开始写分布式服务框架>,对于分布式框架的入门级选手还是挺合适的,扫盲.对分布式服务框架中的基本概念:RPC.SOA.序列化.Spring集成RPC.ZooKe ...

  5. 服务注册中心AP和CP区别【Nacos|Eureka|Consul|Zookeeper】

    当下,分布式系统正变得越来越重要,大型网站几乎都是分布式的.分布式系统的最大难点,就是各个节点的状态如何同步.CAP 定理是这方面的基本定理,也是理解分布式系统的起点. CAP定理,又被称作布鲁尔定理 ...

  6. 阿里面试败北:5种微服务注册中心如何选型?这几个维度告诉你!

    1.前言 微服务的注册中心目前主流的有以下五种: Zookeeper Eureka Consul Nacos Kubernetes 那么实际开发中到底如何选择呢?这是一个值得深入研究的事情,别着急,今 ...

  7. 微服务注册中心的选型和思考

    来自:架构之美 概述 在微服务时代,注册中心越来越被重视.服务治理逐渐跟业务服务并驾齐驱.所以本文想对注册中心进行体系化探索.注册中心,起源于分布式时代.不管是水平拆分架构,或者垂直拆分架构,对于多服 ...

  8. 如何优化Spring Cloud微服务注册中心架构?

    作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...

  9. Zookeeper 服务注册与发现01——服务提供者

    <!-- SpringBoot整合zookeeper客户端 --><dependency><groupId>org.springframework.cloud< ...

最新文章

  1. 第九集(第一部分)思科交换机配置文件及IOS备份还原
  2. 速卖通关键词挖掘工具_网站优化必备的关键词挖掘工具
  3. LC77 Combinations
  4. win10休眠_win10休眠重新开机黑屏进入不了系统
  5. Jupyter 配置 Java环境,写Java代码,测试成功
  6. Spring mvc HTTP协议之缓存机制
  7. php 批量压缩png,利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)...
  8. 系统学习redis之二——redis集群搭建
  9. 转:探索 AIX 6:在 AIX 6 上配置 iSCSI Target
  10. 深入理解 操作系统 LRU算法(以洛谷P1540题为例)
  11. 为什么电脑CPU这么贵?
  12. IE下打开ClearType后透明字体问题解决
  13. SpringCloud微服务实战(一)-简介
  14. 利用Pelican搭建个人博客
  15. java web 开发环境布置学习笔记1
  16. 已经被说“烂”的微服务,到底是个什么鬼?通过拆分实战案例来带你入门。...
  17. python怎么求中位数_Python求两个有序数组的中位数的几种方法
  18. 【设计模式】迭代器模式
  19. asp绑定gridview属性_《ASP.ENT Core与RESTful API开发实战》(第3章)中
  20. 项目实战——高拓展的实时聊天系统

热门文章

  1. OA工作流程怎么梳理
  2. 配置MM模块material management几个常见的错误
  3. ABAP类的继承、多态、重载
  4. sy-repid 和 sy-cprog的区别
  5. 从营销手段到商业新基建,“以旧换新”还有多少价值等待挖掘?
  6. pythonsuper_python中的super()是什么意思呢
  7. 计算机术语中CPU是指______,试题题库_计算机基础知识考试试卷全套.doc
  8. BUUCTF(pwn)铁人三项(第五赛区)_2018_rop
  9. Python中defaultdict函数的使用方法
  10. 如何在Python中表示一个对象