《zk:分布式过程协同技术详解》读书笔记

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 《zk:分布式过程协同技术详解》读书笔记
  • zk可以使得分布式系统能够协同工作。
  • zookeeper名字由来:协调现有系统(hadoop,pig...),zookeeper,动物管理员。
  • 不适用:
  • 海量数据存储,znode最大存储1MB的数据。
  • ZK满足
  • 一致性C
  • 可用性A
  • 不满足,分区容错性P


# Zk api

<!--原生API客户端-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.6.0</version>
        </dependency>


  • zk节点可以有数据,也可以没有数据
  • 数据在节点被存储为字节数组
  • zkApi暴露的方法:
  • create /path data
  • 创建一个名为/path的znode节点,且包含数据data
  • deleta /path
  • 删除名为/path的znode节点
  • exists /path
  • 判断是否存在名为/path的节点
  • setData /path data
  • 设置名为/path的znode的数据为data
  • getData /path
  • 获取名为/path的节点的数据
  • getChildren /path
  • 获取节点名为/path的所有子节点列表


znode的类型,节点类型,mode


  • 持久节点persistent
  • 只能通过delete语句来删除
  • 临时节点ephemeral
  • 创建该节点的客户端崩溃或关闭了与zk的连接,这个节点就会被删除,或者被主动delete删除
  • 临时节点znode不能有子节点
  • znode⼀共有4种类型:持久的(persistent)、临时的(ephemeral)、持久有序的(persistent_sequential)和临时有序的(ephemeral_sequential)


监听与通知


  • 客户端向zookeeper注册需要监听的znode,通过对znode设置watch来接收通知。
  • 每次设置watch监听,只会被触发一次,所以客户端需要在每次接收通知之后再次对监听的znode注册watch。


版本


  • 每个znode都有一个版本号,随着每次数据的变化而自增。乐观锁


image.png


  • zk容许(集群/2)-1个服务器崩溃,且集群数量最好是奇数个


开始使用zookeeper


  • conf/zoo.cfg 配置文件
  • bin/zKserver.sh start 启动zk服务器
  • bin/zKCli.sh 创建zk客户端会话
  • 配置集群(也可在同一台服务器上搭建集群)

tickTime=2000
initLimit=10
syncLimit=5
dataDir=./data
clientPort=2181
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445


  • 每⼀个server.n项指定了编号为n的ZooKeeper服务器使⽤的地址和端口号。每个server.n项通过冒号分隔为三部分,第⼀部分为服务器n的IP地址或主机名(hostname),第⼆部分和第三部分为TCP端⼜号,分别⽤于仲裁通信和群⾸选举.
  • 当启动⼀个服务器时,我们需要知道启动的是哪个服务器。⼀个服务器通过读取data⽬录下⼀个名为myid的⽂件来获取服务器ID信息


使用Zookeeper进行开发


  • 客户端连接zk,创建句柄

ZooKeeper(
String connectString,
int sessionTimeout,
Watcher watcher)


  • connectString: zk主机名和端口 localhost:2181,localhost:2182
  • sessionTimeout: 以毫秒为单位,zk等待客户端通信的最长时间,推荐设置为5-10秒
  • watcher: 用于接收通知事件的对象
  • 当zk服务端宕机之后,客户端会自动发起重连,直到zk服务端重新启动,客户端再次连接上。
  • 客户端可以通过close()关闭与zk服务器的连接,否则需要等到一段时间,直到超过了会话超时时间才会下线


原子操作


Multiop可以原⼦性地执⾏多个ZooKeeper的操作,执⾏过程为原⼦性,即在multiop代码块中的所有操作要不全部成功,要不全部失败


  • 使用 multi(Ops)

public class Atomic {
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
        ZooKeeper zooKeeper = new ZooKeeper("localhost:2181,localhost:2182,localhost:2183", 2000, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println(watchedEvent);
            }
        });
        ArrayList<Op> ops = new ArrayList<>();
        ops.add(Op.create("/atomic", "原子节点".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT));
        // 整个操作会失败,因为/atomic节点已经创建了,再次创建会失败
        ops.add(Op.create("/atomic", "原子节点".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT));
        ops.add(Op.create("/atomic/node1", "原子节点".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT));
        List<OpResult> opResults = zooKeeper.multi(ops);
        opResults.forEach(System.out::println);
    }
}


相关文章
|
1月前
|
消息中间件 监控 Java
Apache Kafka 分布式流处理平台技术详解与实践指南
本文档全面介绍 Apache Kafka 分布式流处理平台的核心概念、架构设计和实践应用。作为高吞吐量、低延迟的分布式消息系统,Kafka 已成为现代数据管道和流处理应用的事实标准。本文将深入探讨其生产者-消费者模型、主题分区机制、副本复制、流处理API等核心机制,帮助开发者构建可靠、可扩展的实时数据流处理系统。
243 4
|
22天前
|
机器学习/深度学习 监控 PyTorch
68_分布式训练技术:DDP与Horovod
随着大型语言模型(LLM)规模的不断扩大,从早期的BERT(数亿参数)到如今的GPT-4(万亿级参数),单卡训练已经成为不可能完成的任务。分布式训练技术应运而生,成为大模型开发的核心基础设施。2025年,分布式训练技术已经发展到相当成熟的阶段,各种优化策略和框架不断涌现,为大模型训练提供了强大的支持。
|
1月前
|
JSON 监控 Java
Elasticsearch 分布式搜索与分析引擎技术详解与实践指南
本文档全面介绍 Elasticsearch 分布式搜索与分析引擎的核心概念、架构设计和实践应用。作为基于 Lucene 的分布式搜索引擎,Elasticsearch 提供了近实时的搜索能力、强大的数据分析功能和可扩展的分布式架构。本文将深入探讨其索引机制、查询 DSL、集群管理、性能优化以及与各种应用场景的集成,帮助开发者构建高性能的搜索和分析系统。
163 0
|
7月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
5月前
|
安全 JavaScript 前端开发
HarmonyOS NEXT~HarmonyOS 语言仓颉:下一代分布式开发语言的技术解析与应用实践
HarmonyOS语言仓颉是华为专为HarmonyOS生态系统设计的新型编程语言,旨在解决分布式环境下的开发挑战。它以“编码创造”为理念,具备分布式原生、高性能与高效率、安全可靠三大核心特性。仓颉语言通过内置分布式能力简化跨设备开发,提供统一的编程模型和开发体验。文章从语言基础、关键特性、开发实践及未来展望四个方面剖析其技术优势,助力开发者掌握这一新兴工具,构建全场景分布式应用。
562 35
|
6月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
8月前
|
机器学习/深度学习 存储
DeepSeek进阶开发与应用4:DeepSeek中的分布式训练技术
随着深度学习模型和数据集规模的扩大,单机训练已无法满足需求,分布式训练技术应运而生。DeepSeek框架支持数据并行和模型并行两种模式,通过将计算任务分配到多个节点上并行执行,显著提高训练效率。本文介绍DeepSeek中的分布式训练技术,包括配置与启动方法,帮助用户轻松实现大规模模型训练。数据并行通过`MirroredStrategy`同步梯度,适用于大多数模型;模型并行则通过`ParameterServerStrategy`异步处理大模型。DeepSeek简化了分布式环境配置,支持单机多卡和多机多卡等场景。
|
10月前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
613 1
|
10月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
360 2
|
11月前
|
供应链 算法 安全
深度解析区块链技术的分布式共识机制
深度解析区块链技术的分布式共识机制
563 0