IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Zookeeper应用场景 -> 正文阅读

[大数据]Zookeeper应用场景

Zookeeper应用场景

1. 配置中心

我们将配置信息存在zk中的一个节点中,同时给该节点注册一个数据节点变更的watcher监听,一旦节点发送变更,所有的订阅该节点的客户端都可以获取数据变更通知。使用zk可以解决机器规模大,配置变更频繁,本地文件和内存方式配置维护成本较高的问题。

2. 负载均衡

在这里插入图片描述
建立server节点,并建立监听器监视server子节点的状态,在每个服务器启动时,在servers节点下建立具体服务器地址的子节点,并在对应的子节点下存入存入服务器的相关信息,我们在zk服务器上可以获取当前集群中的服务器列表及相关信息,可以自定义一个负载均衡算法,在每个请求过来时从zk服务器中获取当前集群服务器列表,根据算法选择其中一个服务器处理请求

3. 命名服务

命名服务是分布式系统中的基本功能之一,被命名的实体通常是集群中的机器,提供的服务地址或者远程对象,这些都可以称作名字,常见的是一些服务框架如RPC和EMI中的服务地址列表,通过使用名称服务客户端可以获取资源的实体,服务地址和提供者信息。命名服务就是通过一个资源引用的方式来实现对资源的定位和使用,在分布式环境中,上层应用仅仅需要全局唯一名称,就像数据库中的主键。
在这里插入图片描述
① 在zk中通过顺序创建节点就可以实现,所有客户端会根据自己的任务类型来创建一个顺序节点
② 节点创建完毕后,create()接口会返回一个完整的节点名,例如:job-00000002;拼接type类型和完整节点名作为全局的唯一ID

4. DNS服务

(1)域名配置
在分布式系统中,每一个应用都需要分配一个域名,日常开发中,往往使用本地HOST绑定域名解析,开发阶段可以随时修改域名和IP的映射,大大提升开发的调试效率,如果应用的机器规模达到一定程度后,需要频繁更新域名是,需要在规模的集群中变更,无法保证实时性,可以在zk上创建一个节点进行域名配置。
在这里插入图片描述
(2)域名解析
应用解析时,首先从zk域名节点中获取域名映射的IP和端口
(3)域名变更
每个应用都会在对应的域名节点注册一个数据变更的watcher监听,一旦监听的域名节点数据变更,zk会向所有订阅的客户端发送域3名变更通知

5. 集群管理

(1)机器上下线
在这里插入图片描述
(2)机器监控
在机器运行过程中,Agent会定时将主机的运行状态信息写入到/machines/hostn主机节点,监控中心通过订阅这些节点的数据变化来获取主机的运行信息

6. 分布式锁

(1)数据库实现分布式锁实现思路
在这里插入图片描述
(2)代码实现
① 数据库锁表创建,锁表中字段设置唯一约束
在这里插入图片描述
② 定义锁,实现lock接口,tryLock方法尝试获取锁,从锁表中查询指定的锁记录,如果查询到记录说明已经上锁,不能再上锁
在这里插入图片描述
③ 在lock方法获取锁之前先调用tryLock方法尝试获取锁,如果未加锁则向锁表中插入一条锁记录来获取锁,这里通过循环,如果上锁我们一直等待锁的释放
在这里插入图片描述
④ 释放锁即将数据库中的对应的锁表记录删除
在这里插入图片描述

7. redis实现分布式锁

redis分布式锁的实现基于setnx,设置成功,返回1,失败返回0,释放锁可以通过del指令实现
由于设置锁后在执行中间过程时程序抛出异常,导致del命令没有调用,锁没有释放,这样会陷入死锁,所以我们拿到锁后可以给锁加上过期时间,这样过期会自动释放锁
同时setnx和expire,如果进程挂掉,expire不能执行也会死锁,需要保证这两个命令是原子操作
在这里插入图片描述
espire设置过期时间,ttl进行查看剩余时间
在这里插入图片描述
(1)lock获取锁方法
定义锁,实现lock接口,tryLock方法设置锁
在这里插入图片描述
(2)释放锁
在这里插入图片描述

8. redisson实现分布式锁

为了解决redis单点问题,我们会部署redis集群,在Sentinel集群中,主节点突然挂掉,同时主节点中有锁没及时同步到从节点,就会导致用一把锁被两个客户端同时持有,Redis推出了Redlock算法解决这个问题

(1)导入依赖redisson
在这里插入图片描述
(2)获取锁并释放锁
此处的key为redis的key,释放可以调用unlock方法
在这里插入图片描述

9. zookeeper实现分布式锁

(1)原理及实现思路图
在这里插入图片描述
(2)代码实现
在这里插入图片描述
① 连接zk,创建lock根节点
在这里插入图片描述
② 内部类添加监听
在这里插入图片描述
③ 上锁,创建临时节点并进行判断
在这里插入图片描述
④ 释放锁
在这里插入图片描述

10. 分布式队列

在这里插入图片描述
① 在队列节点下创建临时节点,如/queue/info/192.168.1.1-0000001
② 调用getChildren接口获取/queue_info节点下所有子节点,获取队列中所有元素
③ 比较自己节点是否是序号最小的节点,不是,则等待其他节点出队列,在序号最小的几点注册watcher
④ 获取watcher通知后,重复以上操作
具体流程图如下:
在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:53:02  更:2021-07-28 07:53:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 23:06:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码