《从Paxos到Zookeeper》——第五、六章:经典应用场景

目录

第五章 使用Zookeeper

5.1 服务端部署与运行

5.2 客户端相关

5.2.1 客户端运行

5.2.2 客户端命令

5.3 Java客户端API

5.4 开源客户端

第六章 经典应用场景

6.1 典型应用场景及实现

6.1.1 数据发布/订阅(全局配置中心)

6.1.2 负载均衡(Load Balance)

6.1.3 命名服务

6.1.4 分布式协调/通知

6.1.5 集群管理

6.1.6 Master选举

6.1.7 分布式锁

6.1.8 分布式队列

6.2 Zk在大型分布式系统中的应用

6.2.1 Hadoop

6.2.2 HBase

6.2.3 Kafka

6.3 Zk在阿里的实践与应用

本章不是重点,粗略的介绍了下Zk的应用场景

第五章 使用Zookeeper

环境:Zk是基于Java语言编写的,因此运行环境需要Java环境的支持

5.1 服务端部署与运行

Zk有两种运行模式:单机模式与集群模式

Zk提供的可执行脚本

5.2 客户端相关

5.2.1 客户端运行
## 连接本地服务端
sh zkCli.sh

## 连接指定服务端
sh zkCli.sh -server ip:port
5.2.2 客户端命令

内容

命令

格式

创建

create

create [-s] [-e] path data acl

  • -s或-e分别指定节点特性:顺序 或 临时。默认不加参数,创建的是持久节点

读取

ls

ls path [watch]

  • 查看该节点下所有子节点

get

get path [watch]

  • 获取该节点下数据内容和属性信息

更新

set

set path data [version]

删除

delete

delete path [version]

5.3 Java客户端API

5.4 开源客户端

  • ZkClient

  • Curator

  • 其他:zkui


第六章 经典应用场景

数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁,分布式队列......

6.1 典型应用场景及实现

近年来很多分布式系统都以Zk为核心组件:

  • Hadoop:用于高可用性(HA)配置中的名称节点选举和一些子项目的协调服务

  • HBase:用于Region服务器的状态管理、元数据存储和Master服务器的选举

  • Kafka:在早期版本中,用于集群管理、领导者选举、配置管理等。2.8.0后不再依赖Zk

  • Dubbo:作为注册中心,管理服务的地址和配置信息

6.1.1 数据发布/订阅(全局配置中心)
  • 即所谓的配置中心:发布者将数据发布到zk的一个或一系列节点上,订阅者进行数据订阅,动态获取数据。

    • 通常全局配置有以下特点

      • 数据量小

      • 运行时动态发生变化

      • 集群中各机器共享,配置一致

  • 数据发布/订阅一般有两种设计模式:Push模式和Pull模式

    • Push:服务端主动将数据更新发送给订阅的客户端

    • Pull:客户端定时轮询,主动发请求拉取数

  • Zk采用推拉结合的模式:客户端订阅需要关注的节点,一旦节点数据更变,服务端通过发生Watcher事件通知客户端,客户端再主动拉取

  • Zk的实现方式

    • ①存储配置:在Zk上选取一个节点用于配置存储,如/app1/database_config

    • ②配置获取

      • 启动:集群中每台机器在启动初始化阶段,首先会从上面提到的Zk配置节点上读取该配置

      • 注册:同时在该配置节点上注册一个数据变更的Watcher监听。一旦数据发生变化,订阅的客户端能够得到通知

    • ③配置变更

      • 发生变更后,Zk会发送通知到各个客户端,客户端收到通知后拉取

6.1.2 负载均衡(Load Balance)
  • 什么是负载均衡

    • 对多个计算机,网络连接,CPU,磁盘驱动器或其他资源进行分配负载,以达到优化资源使用,最大化吞吐率,最小化响应时间,避免过载的目的

    • 负载均衡分为两种

      • 硬件:直连交换机,比如F5,成本比较高

      • 软件:Zk是基于软件的

  • 基于Zk实现的动态DNS方案("DDNS",Dynamic DNS)

6.1.3 命名服务
  • 命名服务场景

    • 在分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等。比较常见的就是一些分布式服务框架中的服务地址列表

    • 在分布式环境中,上层应用有时仅仅需要一个全局唯一的名字,类似数据库中的唯一主键

  • Zk全局唯一ID命名的实现方式:通过Zk节点的顺序递增性质,获取全局唯一ID

    • 根据任务类型(type),在该节点下创建顺序节点,获取全局唯一ID

6.1.4 分布式协调/通知
  • 对于分布式机器而言,需要一个协调者(Coordinator)来控制整个系统的运行流程,如分布式事务的处理,机器间的相互协调等

  • Zk通过让客户端对同一个数据节点进行Watcher注册,来实现不同系统间的协调,如果数据节点发生变化,会通知所有订阅的客户端

  • 常用场景

    • 任务注册

    • 心跳检测

    • 系统调度

6.1.5 集群管理

集群管理包括两部分

  • 集群监控:对整个集群运行时的状态信息收集,如:希望知道当前有多少台机器工作,每台机器运行时数据收集

  • 集群控制:对集群的操作与控制,如:针对某台机器进行上下线操作

Zk做集群管理的两大优势

  • 基于Watcher的订阅与监听特性

  • Zk上的临时节点,一旦会话失效,临时节点会自动清除

6.1.6 Master选举
  • 客户端集群每天都会定时往Zk上创建临时节点。在这个过程中,由于Zk原子性,只有一个客户端能创建成功,成功的即为Master
  • 一旦Master挂了,通过Watcher机制,其余的客户端会重新选举
6.1.7 分布式锁

不赘述

6.1.8 分布式队列

不赘述,各类消息中间件已经很成熟了,不一定要用到Zk

6.2 Zk在大型分布式系统中的应用

6.2.1 Hadoop
6.2.2 HBase
6.2.3 Kafka
  • 注:在 Kafka 的早期版本中,Kafka 是基于 ZooKeeper 的。从 Kafka 2.8.0 版本开始,Kafka 引入了 KRaft 模式(Kafka Raft Metadata mode)这是一个不依赖于 ZooKeeper 的元数据管理模式。在 KRaft 模式下,Kafka 可以使用自己的内部 Raft 实现来管理集群元数据,从而摆脱对 ZooKeeper 的依赖。

Zk在kafka的应用体现在以下几方面

  • 管理所有Broker节点:所有Broker节点启动上线时,都会在(路径/brokers/ids)下进行注册创建属于自己的节点,并按ID排序

    • 例如/brokers/ids/1和/brokers/ids/2代表了两个Broker服务器

    • 创建完broker节点后,会把ip地址和端口写入该节点

    • 由于注册的是临时节点,Broker宕机或下线后会自动删除

  • Topic注册

    • 每一个Topic都会记录在(路径/brokers/topics)下

      • 例如/brokers/topics/topic1和/brokers/topics/topic2代表了两个Topic

      • /brokers/topics/login/3->2,这个节点表明了 BrokerID=3的一个服务器,对于login的topic,提供了两个分区进行存储

  • 生产者的负载均衡(如何将消息合理的发送到分布式Broker上):Kafka提供了两种负载均衡方案

    • 传统的四层负载均衡:生产者IP地址和端口 —> 关联Broker

      • 优点:实现简单,生产者直接TCP维护到Broker

      • 缺点:写死,无法真正意义上的负载均衡,实际过程中,不同生产者的生产速率不一致

    • 基于Zk进行负载均衡:能实现动态负载均衡

  • 消费者的负载均衡

6.3 Zk在阿里的实践与应用

  • Metamorphosis:消息中间件

  • Dubbo:RPC服务框架

  • Canal:基于MySQL Binlog的增量订阅和消费组件

  • ......

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT Web Midjourney一键集成最新版

准备工具 服务器一台 推荐使用浪浪云服务器 稳定 安全 有保障 chatgpt api 推荐好用白嫖的api 项目演示 项目部署 浏览器访问casaos 添加软件原添加 https://gitee.com/langlangy_1/CasaOS-AppStore-LangLangy/raw/master/chatmjd.zip 安装此软件 等待安装 安装后再桌面设置…

什么是模版方法模式,有哪些应用?

模板方法模式是一种行为设计模式,他的主要作用就是复用代码。在很多时候,我们的代码中可能会有-些公共的部分并且还有一些定制的部分,那么公共这部分就可以定义在一个父类中,然后将定制的部分实现在子类中。这样子类可以根据需要扩…

TRIZ理论助力充电桩产业跨越技术瓶颈,实现产业升级!

随着新能源汽车市场的迅猛发展和电动汽车保有量的不断增加,充电桩作为电动汽车的“能量补给站”,其重要性日益凸显。然而,充电桩产业在发展过程中也面临着诸多技术瓶颈,如何突破这些瓶颈,推动充电桩产业升级成为行业亟…

《Video Mamba Suite》论文笔记(2)Mamba对于多模态交互的作用

原文翻译 4.2 Mamba for Cross-Modal Interaction Tasks and datasets.除了单模态任务外,我们还评估了 Mamba 在跨模态交互方面的性能。我们首先使用视频时间定位 (Video Temporal Grounding) 任务进行评估。所涉及的数据集包含 QvHighlight [44] 和 Charade-STA …

Vue阶段练习:初始化渲染、获取焦点、记账清单

阶段练习主要承接Vue 生命周期-CSDN博客 ,学习完该部分内容后,进行自我检测,每个练习主要分为效果显示、需求分析、静态代码、完整代码、总结 四个部分,效果显示和准备代码已给出,我们需要完成“完整代码”部分。 练习…

交直流充电桩测试系统解决方案,你了解多少?

交直流充电桩测试系统是电动汽车充电设施的重要组成部分,它对充电桩的性能、安全性和可靠性进行全方位的检测和评估。随着电动汽车的普及,充电桩测试系统的需求也在不断增加。本文将对交直流充电桩测试系统的解决方案进行简要介绍。 1. 系统组成 交直流…

微信小程序如何使用svg矢量图标

微信小程序如何使用自定义SVG矢量图标 在微信小程序中,经常会用到小图标来装饰界面,我们常用的方法就是引用第三方的图标,但会存在收费或者找不到合适的图标,这时候我建议可以自行编写svg图标代码,就可以随心所欲的使…

纯干货,源代码防泄密之环境加密与文档加密的区别

环境加密和文档加密是两种不同的数据保护方法,下面用SDC沙盒及文档加密系统作对比,它们在设计理念、管控对象、安全性、性能以及适用场景等方面有所区别: 来百度APP畅享高清图片 1、设计理念: 环境加密(如SDC沙盒&am…

JavaScript继承的方法和优缺点

原型链继承 让一个构造函数的原型是另一个类型的实例,那么这个构造函数new出来的实例就具有该实例的属性。 优点: 写法方便简洁,容易理解。 缺点: 在父类型构造函数中定义的引用类型值的实例属性,会在子类型原型上…

华中科技大学雷达站部署

一:项目地址 GitHub - HUSTLYRM/HUST_Radar_2023: 华中科技大学狼牙战队 RoboMaster 2023赛季 雷达站 二:安装依赖 2.1创建虚拟环境 首先是程序是基于python3.8完成,所以创建虚拟环境的时候,选择3.8的虚拟环境 conda create -…

【算法刷题日志】吸氧羊的StarryCoding之旅 - 贡献法计算

题目链接:https://www.starrycoding.com/problem/3 题目描述 吸氧羊终于注册了一个StarryCoding账号!(她很开心) 但是吸氧羊忘记了它的密码,她想起你是计算机大师,于是就来请教你。 她虽然不记得密码了…

nacos开启登录开关启动报错“Unable to start embedded Tomcat”

nacos 版本:2.3.2 2.2.2版本之前的Nacos默认控制台,无论服务端是否开启鉴权,都会存在一个登录页;在之后的版本关闭了默认登录页面,无需登录直接进入控制台操作。在这里我们可以在官网可以看到相关介绍 而我现在所用的…

中国各地级市城投债详细数据(2006年-2023年2月)

01、数据简介 城投债又称为准市政债,发行主体是地方ZF投资平台,公开发行企业债和中期票据,其业主一般是地方基础设施建设,或者公益性项目主体,参与债券发行环节的当地ZF发债。 数据整理中国各地级市的城投债详细数据…

opencv图片的旋转-------c++

图片的旋转 /// <summary> /// 图片的旋转 /// </summary> /// <param name"img"></param> /// <param name"angle">旋转角度:正数&#xff0c;则表示逆时针旋转;负数&#xff0c;则表示顺时针旋转</param> /// <…

【intro】图卷积神经网络(GCN)

本文为Graph Neural Networks(GNN)学习笔记-CSDN博客后续&#xff0c;内容为GCN论文阅读&#xff0c;相关博客阅读&#xff0c;kaggle上相关的数据集/文章/代码的阅读三部分&#xff0c;考虑到本人是GNN新手&#xff0c;会先从相关博客开始&#xff0c;进一步看kaggle&#xff…

考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型

1 主要内容 程序主要参考《考虑极端天气线路脆弱性的配电网分布式电源配置优化模型-马宇帆》&#xff0c;针对极端天气严重威胁配电网安全稳定运行的问题。基于微气象、微地形对配电网的线路脆弱性进行分析&#xff0c;然后进行分布式电源接入位置与极端天气的关联性分析&…

优优嗨聚集团:法律明灯,个债处理中的法律咨询力量

在现代社会&#xff0c;个人债务问题日益突出&#xff0c;无论是因生活消费、投资失利还是其他原因&#xff0c;债务问题都可能成为个人财务的一大负担。面对复杂的债务困境&#xff0c;许多人感到迷茫和无助。此时&#xff0c;法律咨询如同一盏明灯&#xff0c;能够为个人债务…

Docker 安装部署 postgres

Docker 安装部署 postgres 1、拉取 postgres 镜像文件 [rootiZbp19a67kznq0h0rgosuxZ ~]# docker pull postgres:latest latest: Pulling from library/postgres b0a0cf830b12: Pull complete dda3d8fbd5ed: Pull complete 283a477db7bb: Pull complete 91d2729fa4d5: Pul…

自动化测试 selenium基础

前言 我们都知道测试开发工程师的任务是根据用户需求测试用例的同时,害的开发自动化工具来减轻测试压力且提高测试的效率以及质量,这一节我们就来简单谈谈开发简单的自动化工具基础 什么是自动化测试呢?就是将我们需要做的测试交给机器去做,也就是使用代码来模拟人对于机器的行…

openKylin 2.0 Alpha2 X86 安装教程

原文链接&#xff1a;openKylin 2.0 Alpha2 X86 安装教程 Hello&#xff0c;大家好啊&#xff01;今天我们将讨论如何在VMware Workstation上安装openKylin 2.0 Alpha2 X86版。openKylin是一个基于Linux的操作系统&#xff0c;旨在提供高性能、可靠性强的系统体验。在虚拟化软件…