微服务实战系列之ZooKeeper(上)

前言

历经1个多月的创作和总结,纵观博主微服务系列博文,大致脉络覆盖了以下几个方面:

  1. 数据方面(缓存&安全)
    比如Redis、MemCache、Ehcache、J2cache(两级缓存框架)、RSA加密、Sign签名…
  2. 传输方面(消息系统)
    MQ、通信基础
  3. 服务方面(支撑服务)
    Feign、Token、Sentinel、Nacos、Gateway

显然,我们可以观察到,如果只有这些工具或组件,还不足以支撑一个中型微服务系统。

如此,今天博主继续拉新,谈一谈 ZooKeeper 是怎么回事,为什么我们有时候对它望而生畏而又难以割舍呢?
在这里插入图片描述
我们一起走进今天的话题,请各位盆友紧随博主,以防迷路。

走进ZooKeeper

ZooKeeperis a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

翻译成大白话:
ZooKeeper 是一个“中央处理器”,主要面向配置管理与维护目录服务分布式集群服务提供相关能力和支持。

一、配置管理

提到Zookeeper的配置管理,我们是不是立刻可以想到另外一个工具:Nacos?对了,Nacos也可以管理配置,实现热部署。那么ZooKeeper 又是怎么回事?

首先这里的配置比较泛泛而谈,可以见到理解为一段文本或一个服务信息等等。比如我们经典的dubbo,使用ZooKeeper作为注册中心,其实利用了它的该特点,也充当了“配置或服务管理员”的角色。

在这里插入图片描述
每个Client(客户端)初始化时,会向ZooKeeper注册一个Watcher,通过它实现监听与同步,最终完成配置或服务的一致性管理。

二、目录和命名管理

目录和命名服务又是什么?是否可以立刻联想到JNDI(Java Naming and Directory Interface,Java命名和目录接口)?,当年大名鼎鼎SUN提供的一整套命名服务API,为J2EE的建设立下了汗马功劳。

比如我们常见的datasource 配置就是典型的JNDI服务:

<?xml version="1.0" encoding="UTF-8"?>
<datasources><local-tx-datasource><jndi-name>myds-msql</jndi-name><connection-url>jdbc:mysql://localhost:3306/test</connection-url><driver-class>com.mysql.jdbc.Driver</driver-class><user-name>root</user-name><password>123456</password></local-tx-datasource>
</datasources>

那么ZooKeeper又是怎么设计的呢?请转向下图:
在这里插入图片描述
ZooKeeper提供了一种 树形 结构的数据存储方式。这样做的好处是在分布式环境下,实现全局唯一性。
在这里插入图片描述

我们可以提前把各种服务、各种地址、各种目录,比如地址信息以数据存储于ZooKeeper中。在使用的时候,只需从中读取即可,原理与JNDI类似。

统一命名的含义,可以理解为对一个服务转为一个代号。比如我们经常使用的域名,其实就是对某个主机IP的“翻译”

三、分布式集群

谈到分布式,其实我们实现微服务就是为了分布式部署和运行。ZooKeeper作为分布式的利器,主要体现在强大的集群运行能力。

博主首选带着各位盆友看一下,集群是如何运行的:

在这里插入图片描述

这是官方提供的ZooKeeper集群运行示意图。从上图我们可以看到,ZooKeeper集群并非采用Master-Slave模式,而是采用了Leader-Follower模式。上图中除了标识为“Leader(领袖)”的Server节点外,其他Server均为“Follower(随从)”。当然还有另外一种角色是“Observer(观察员)”,我们后面再讲它。

当然Zookeeper集群中,哪个节点应该做领袖,哪个节点应该是随从,说来话长,且听下回分解。


结语

通过以上总结性叙述,博主简单介绍了ZooKeeper具备的核心能力。当然它还具备一些非主打的特性,在这里就不再详细展开了。

此刻,博主不禁感慨:离开了ZooKeeper,分布式将变的困难的多;离开了分布式,微服务也将黯然失色。

好了,ZooKeeper第一篇到此为止,希望对各位盆友有所帮助,GoodNight!


历史回顾

  • 微服务实战系列之MQ
  • 微服务实战系列之通信
  • 微服务实战系列之J2Cache
  • 微服务实战系列之Cache(技巧篇)
  • 微服务实战系列之MemCache
  • 微服务实战系列之EhCache
  • 微服务实战系列之Redis
  • 微服务实战系列之Cache
  • 微服务实战系列之Nginx(技巧篇)
  • 微服务实战系列之Nginx
  • 微服务实战系列之Feign
  • 微服务实战系列之Sentinel
  • 微服务实战系列之Token
  • 微服务实战系列之Nacos
  • 微服务实战系列之Gateway
  • 微服务实战系列之加密RSA
  • 微服务实战系列之签名Sign

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/278290.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#上位机与欧姆龙PLC的通信02----搭建仿真环境

在没有硬件的情况下&#xff0c;创建仿真环境非常必要&#xff0c;买硬件需要花大几K的大洋&#xff0c;这是不好的&#xff0c;对于学习培训者来说&#xff0c;有仿真环境就特别漂亮&#xff0c;现在CX-ONE已经集成了欧姆龙的编程软件&#xff0c;能够实现仿真PLC及编程&#…

图论——二分图

图论——二分图 二分图通俗解释 有一个图&#xff0c;将顶点分成两类&#xff0c;边只存在不同类顶点之间&#xff0c;同类顶点之间设有边。称图 G 为二部图&#xff0c;或称二分图&#xff0c;也称欧图。 性质 二分图不含有奇数环图中没有奇数环&#xff0c;一定可以转换为二…

vue中实现PDF文件流预览

代码示例 <template><div class"print"><div v-if"!viewShow" class"opt-box"><div style"height: 700px; overflow: auto;"><el-table :data"tableData" border><el-table-column prop…

flowable之三 启动一个流程并跟踪

1. 背景介绍 当我们部署一个流程并启动后&#xff0c;Flowable会按照既定流程定义及进行节点处理以及自动流转&#xff0c;从一个节点执行到下一个节点&#xff0c;直至结束。在此过程中&#xff0c;系统如何处理BPMN XML文件&#xff1f;节点如何进行流转&#xff1f;本文对f…

用于自动驾驶的基于深度学习的图像 3D 物体检测:综述

论文地址&#xff1a;https://ieeexplore.ieee.org/abstract/document/10017184/ 背景 准确、鲁棒的感知系统是理解自动驾驶和机器人驾驶环境的关键。自动驾驶需要目标的 3D 信息&#xff0c;包括目标的位置和姿态&#xff0c;以清楚地了解驾驶环境。 摄像头传感器因其颜色和…

Kubernetes 容器编排(2)

可视化部署 官方Dashboard 部署Dashboard # kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml # kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard # 注意将 type: ClusterIP 改为 type: NodePo…

消除非受检警告

在Java中&#xff0c;有一些情况下编译器会生成非受检警告&#xff08;Unchecked Warnings&#xff09;。这些警告通常与泛型、类型转换或原始类型相关。消除这些警告可以提高代码的可读性和安全性。以下是一些常见的非受检警告以及如何消除它们的例子&#xff1a; 1. 泛型类型…

数据库和数据仓库的区别

数据仓库是在数据库已知大量存在的前提下&#xff0c;为了进一步挖掘数据资源&#xff0c;为了决策需要产生的&#xff1b;数据仓库在设计的时候有意添加反范式设计&#xff0c;目的是提高查询效率 对比内容数据库数据仓库数据内容近期值历史的 归档的数据数据目标面向业务操作…

记录 | Microsoft Remote Desktop for mac安装

Microsoft Remote Desktop for mac安装 网上一些教程的下载安装老是跳转来跳转去&#xff0c;而且下载了的也不一定适用于 mac&#xff0c; 这里直接提供 Microsoft Remote Desktop for mac 的安装包的下载地址&#xff1a; microsoft-remote-desktop-for-mac

【TES720D-KIT】基于国内某厂商FMQL20S400全国产化ARM开发套件(核心板+底板)

板卡概述 TES720D-KIT是专门针对我司TES720D&#xff08;基于国内某厂商FMQL20S400的全国产化ARM核心板&#xff09;的一套开发套件&#xff0c;它包含1个TES720D核心板&#xff0c;加上一个TES720D-EXT扩展底板。 FMQL20S400是国内某厂商电子研制的全可编程融合芯片&#xf…

解决下载huggingface模型权重无法下载的问题

文章目录 方法一(推荐)方法二方法三依然存在的问题 由于某些原因&#xff0c;huggingface的访问速度奇慢无比&#xff0c;对于一些模型(比如大语言模型LLM)的权重文件动辄几十上百G&#xff0c;如果用默认下载方式&#xff0c;很可能中断&#xff0c;这里推荐几种方式。 方法一…

力扣题目学习笔记(OC + Swift) 12. 整数转罗马数字

12. 整数转罗马数字 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即为两个并列的 1。12 写做 XI…