ZooKeeper知识点总结及分布式锁实现

    最初接触ZooKeeper是之前的一个公司的微服务项目中,涉及到Dubbo和ZooKeeper,ZooKeeper作为微服务的注册和配置中心。好了,开始介绍ZooKeeper了。

目录

1.ZooKeeper的基本概念

2.ZooKeeper的节点(ZNode)

3. ZooKeeper的Watcher机制

4. ZooKeeper的会话(Session)

5. ZooKeeper的领导者选举

6. ZooKeeper的持久性和临时性节点

7. ZooKeeper的ACL(访问控制列表)

 8.ZooKeeper的集群模式

9. ZooKeeper的典型应用场景

 10.ZooKeeper的会话超时和重连机制

11. ZooKeeper的故障恢复机制

 12.ZooKeeper的事务处理

13. ZooKeeper的Watcher事件和状态

14. ZooKeeper的四字节数字表示

 15.ZooKeeper的Chroot特性

16.ZooKeeper的JMX(Java Management Extensions)管理 

17. ZooKeeper的Quorum Peer通信

18. ZooKeeper的Follower和Observer角色

19. ZooKeeper Administrator(ZK Admin)命令行工具

20.ZooKeeper的ZooInspector可视化工具

​ 21.Spring Boot整合ZooKeeper实现分布式锁


1.ZooKeeper的基本概念
知识点描述示例
什么是ZooKeeper分布式协调服务ZooKeeper是一个开源的分布式协调服务,用于维护配置信息、命名、提供分布式同步和提供组服务等。
设计目标简单、健壮、易于编程ZooKeeper的设计目标是简单、健壮、易于编程,它能够保证在分布式环境中的一致性。
核心特性一致性、可靠性、有序性ZooKeeper的核心特性包括一致性、可靠性和有序性,确保分布式环境中的数据一致性。
数据模型树形结构ZooKeeper的数据模型是类似于文件系统的树形结构,称为ZNode。每个ZNode可以存储数据和子节点。
应用场景分布式锁、配置管理等ZooKeeper常用于实现分布式锁、配置管理、负载均衡、命名服务等。
2.ZooKeeper的节点(ZNode)
知识点描述示例
ZNode类型持久节点和临时节点持久节点会一直存在,直到被显式删除;临时节点在创建它的会话结束时自动删除。
ZNode数据存储数据每个ZNode可以存储一定量的数据,通常用于存储配置信息或状态信息。
顺序性顺序ZNode可以创建顺序ZNode,ZooKeeper会在创建时在ZNode名称后添加一个数字,表示创建顺序。
监听器监听节点变化可以为ZNode设置监听器,当ZNode的数据或子节点发生变化时,监听器会被触发。
权限控制ACL(Access Control Lists)ZooKeeper支持权限控制,可以为不同的ZNode设置不同的访问权限。
3. ZooKeeper的Watcher机制
知识点描述示例
Watcher定义事件监听器Watcher是ZooKeeper中的事件监听器,用于监听ZNode上的变化。
触发事件数据变更、状态变更Watcher可以监听数据节点的内容变化、子节点的添加或删除,以及客户端与服务器之间的状态变化。
一次性触发单次触发Watcher是一次性的,一旦触发,就会移除,如果需要持续监听,需要重新注册。
事件类型多种事件类型包括节点创建、删除、更改以及客户端连接状态变化等。
应用场景状态同步、触发动作常用于实现分布式协调、状态同步,以及在节点变化时触发某些动作。
4. ZooKeeper的会话(Session)
知识点描述示例
会话概念客户端与ZooKeeper的连接会话是客户端与ZooKeeper之间的一个TCP连接,用于客户端与ZooKeeper之间的通信。
会话ID唯一标识每个会话都有一个唯一的会话ID,用于识别特定的会话。
超时机制保持会话活跃如果会话在一定时间内没有收到心跳,ZooKeeper将认为会话超时,并释放该会话创建的所有临时节点。
心跳维持连接客户端周期性地向ZooKeeper发送心跳以保持会话活跃。
状态连接状态会话状态包括连接成功、连接超时、会话关闭等。
5. ZooKeeper的领导者选举
知识点描述示例
领导者选举集群中的主节点在ZooKeeper集群中,领导者(Leader)负责处理所有事务请求,并与跟随者(Follower)和观察者(Observer)进行通信。
选举过程自动进行当集群中的领导者崩溃或失去连接时,集群会自动进行领导者选举。
投票机制基于ZXID领导者选举过程中,节点通过投票来决定新的领导者,投票通常基于ZXID(事务ID)来确保一致性。
法定人数多数投票选举新的领导者需要集群中多数节点的投票。
容错能力高可用性领导者选举机制确保了ZooKeeper集群的高可用性,即使部分节点失效,集群也能继续工作。
6. ZooKeeper的持久性和临时性节点
知识点描述示例
持久性节点长期存储创建后,除非被客户端显式删除,否则持久性节点会一直存在于ZooKeeper中。
临时性节点会话关联临时性节点与创建它的会话生命周期绑定,会话结束时,临时节点被自动删除。
顺序节点自增序号可以创建带有顺序的持久性或临时性节点,ZooKeeper会在节点名后添加一个自增的序列号。
持久性顺序节点持久且有序结合了持久性和顺序性的特点,适用于需要持久化存储且需要顺序标识的场景。
应用场景任务调度、分布式锁持久性节点常用于存储长时间不变的信息,而临时性节点常用于实现轻量级的分布式锁或任务调度。
7. ZooKeeper的ACL(访问控制列表)
知识点描述示例
ACL定义访问控制机制ACL是ZooKeeper提供的访问控制机制,用于控制对ZNode的访问权限。
权限类型认证与授权包括对ZNode的读、写、创建、删除等操作的权限。
认证方案基于角色的访问控制可以为不同的角色或用户设置不同的权限,实现细粒度的访问控制。
权限设置与ZNode关联权限是与特定的ZNode关联的,可以为每个ZNode设置不同的ACL。
安全性增强系统安全性通过ACL可以增强ZooKeeper集群的安全性,防止未授权访问。
 8.ZooKeeper的集群模式
知识点描述示例
集群组成多个ZooKeeper服务器一个ZooKeeper集群由多个ZooKeeper服务器组成,提供高可用性和可扩展性。
领导者(Leader)事务处理Leader服务器负责处理所有事务请求,是集群中的主要工作节点。
跟随者(Follower)数据复制Follower服务器从Leader复制数据,处理非事务请求,参与领导者选举。
观察者(Observer)读请求处理Observer服务器不参与投票,只用于处理客户端的读请求,提高集群的读取性能。
容错机制自动故障转移当Leader服务器出现故障时,集群会自动进行领导者选举,实现故障转移。
9. ZooKeeper的典型应用场景
知识点描述示例
分布式锁协调分布式系统中的进程使用ZooKeeper的临时性节点和监听器实现分布式锁,确保资源在分布式环境中的互斥访问。
配置管理集中管理配置信息将系统配置存储在ZooKeeper的ZNode中,便于分布式系统中的各个节点获取和监听配置变化。
集群管理管理集群节点状态利用ZooKeeper来监控和管理集群中的节点状态,如节点的加入、退出和故障检测。
队列管理分布式队列使用ZooKeeper的顺序节点和监听器实现分布式队列,用于任务调度和负载均衡。
发布/订阅事件通知客户端可以订阅ZooKeeper上的主题,当主题发生变化时,ZooKeeper可以通知所有订阅的客户端。
 10.ZooKeeper的会话超时和重连机制
序号知识点描述示例
1会话超时客户端连接丢失当客户端与ZooKeeper服务器的连接中断,如果在超时时间内未能重新连接,则会话将被认为超时。
2超时时间可配置会话超时时间是可以配置的,通常根据应用需求和网络状况来设置。
3临时节点自动删除如果会话超时,客户端创建的所有临时节点将被ZooKeeper自动删除。
4重连机制客户端尝试重新连接客户端在检测到连接丢失后,会尝试重连到ZooKeeper集群中的其他服务器。
5监听器重新注册在重连成功后,客户端需要重新注册之前设置的监听器,以继续监控ZNode的变化。
11. ZooKeeper的故障恢复机制
知识点描述示例
故障检测心跳机制ZooKeeper使用心跳机制来检测服务器和客户端的连接状态,如果心跳超时则认为连接断开。
领导者选举自动进行当领导者出现故障时,集群会自动触发领导者选举过程以选出新的领导者。
数据同步确保一致性跟随者和观察者节点会与领导者节点进行数据同步,以保证数据的一致性。
持久化存储保证数据不丢失ZooKeeper的事务日志和快照用于数据的持久化存储,确保在故障恢复后数据不会丢失。
快速恢复减少停机时间通过优化故障恢复流程,ZooKeeper可以快速从故障中恢复,减少系统的停机时间。
 12.ZooKeeper的事务处理
知识点描述示例
事务定义操作序列事务是一组不可分割的ZooKeeper操作序列,要么全部成功,要么全部失败。
事务IDZXID每个事务都有一个唯一的事务ID(ZXID),用于标识事务操作。
写操作更新ZNode写操作包括创建节点、删除节点、设置节点数据等。
原子性事务操作的原子性事务保证了操作的原子性,要么所有操作都被执行,要么都不执行。
事务日志持久化事务信息事务信息会被记录在事务日志中,确保事务的持久性和可靠性。
13. ZooKeeper的Watcher事件和状态
知识点描述示例
事件类型多种事件Watcher可以监听包括节点变更、子节点列表变更、连接状态变更等多种事件。
事件触发异步通知当Watcher监听的事件被触发时,ZooKeeper会异步地通知客户端。
状态变化连接状态Watcher可以监听客户端与ZooKeeper服务器之间的连接状态,如连接丢失或重新连接。
一次性触发后移除Watcher在触发一次后会被自动移除,需要重新设置以继续监听。
应用实时响应通过Watcher机制,客户端可以实时响应ZooKeeper中的变化,如节点数据更新或子节点添加。
14. ZooKeeper的四字节数字表示
知识点描述示例
四字节数字计数方式ZooKeeper使用四字节数字来表示节点版本号、事务ID等,范围从1到2^31-1。
计数器递增每个事务后,相关的计数器(如ZXID的计数器)递增,确保每个事务ID唯一。
持久性持久化四字节数字的持久化确保了在ZooKeeper重启后,计数器不会丢失。
版本号节点版本控制每个ZNode都有版本号,包括节点版本和子节点版本,用于冲突解决和缓存一致性。
应用事务一致性四字节数字在ZooKeeper的内部事务处理中起到关键作用,确保事务的顺序和一致性。
 15.ZooKeeper的Chroot特性
知识点描述示例
Chroot特性命名空间隔离Chroot允许在ZooKeeper实例中创建一个命名空间,用于隔离不同用户或应用的数据。
使用场景多租户支持通过Chroot,可以在单个ZooKeeper实例上运行多个虚拟ZooKeeper服务。
语法路径指定使用Chroot时,通过在ZooKeeper的连接字符串后面添加一个斜杠和特定路径来指定命名空间。
限制性能影响Chroot特性可能会对ZooKeeper的性能产生一定影响,尤其是在大量的watcher和频繁的节点操作时。
应用数据隔离适用于需要严格数据隔离和安全性要求的场景,如不同团队或项目之间的数据隔离。
16.ZooKeeper的JMX(Java Management Extensions)管理 
知识点描述示例
JMX定义管理接口JMX是Java平台内建的一套管理接口,用于监控和管理Java应用程序。
MBeans管理豆MBeans是JMX的组件,代表可以被监控和管理的资源,如内存使用、线程状态等。
连接使用JMX连接ZooKeeper提供了JMX连接,允许管理员远程监控和操作ZooKeeper实例。
监控实时数据通过JMX可以实时监控ZooKeeper的运行状态,包括客户端连接数、请求数、数据节点状态等。
管理动态调整JMX允许管理员在运行时动态地调整ZooKeeper的配置,如更改日志级别、重启服务等。
17. ZooKeeper的Quorum Peer通信
知识点描述示例
Quorum Peer集群节点在ZooKeeper中,每个服务器节点被称为一个Quorum Peer,它们组成一个领导者和多个跟随者的集群。
通信机制TCP/IP协议Quorum Peers之间的通信基于TCP/IP协议,用于数据同步和领导者选举。
领导者选举集群协调当集群中的领导者崩溃时,Quorum Peers会进行领导者选举以选出新的领导者。
消息传递心跳和提案Quorum Peers通过发送心跳消息来维持连接,并使用提案消息来提交事务。
持久化事务日志每个Quorum Peer都会持久化事务日志,确保在故障恢复后数据的一致性。
18. ZooKeeper的Follower和Observer角色
知识点描述示例
Follower角色数据复制Follower节点接收来自Leader的更新,并将这些更新应用到本地数据库。
Observer角色读请求Observer节点不参与投票,主要处理客户端的读取请求,提高读取吞吐量。
角色转换动态变化在ZooKeeper集群中,Follower可以在需要时被配置为Observer,反之亦然。
数据同步保持一致Follower和Observer都会从Leader同步数据,以保证集群中数据的一致性。
应用场景高可用与扩展性Observer用于提高集群的读取性能,而不增加投票过程的开销,适用于读多写少的场景。
19. ZooKeeper Administrator(ZK Admin)命令行工具
知识点描述示例
ZK Admin命令行工具ZK Admin是ZooKeeper提供的命令行工具,用于管理ZooKeeper集群。
功能集群管理可以执行如查看集群状态、查看服务器统计信息、触发领导者选举等操作。
使用命令行界面通过命令行界面,输入特定的命令来执行管理任务。
参数命令选项提供多种参数和选项,允许管理员根据需要定制操作。
应用场景集群运维常用于ZooKeeper的日常运维,如配置更改、状态监控和故障排查。
20.ZooKeeper的ZooInspector可视化工具
知识点描述示例
ZooInspector可视化工具ZooInspector是一个用于可视化ZooKeeper数据树的Java应用程序。
功能数据浏览允许用户浏览和管理ZooKeeper服务中的ZNode数据。
用户界面图形界面提供图形用户界面,使得操作ZooKeeper的数据更加直观和方便。
特点实时更新可以实时显示ZooKeeper中的更改,包括节点的创建、删除和数据变更。
应用场景数据管理和调试适用于开发和测试阶段,帮助开发者更好地理解和管理ZooKeeper中的数据结构。

Windows系统可以使用zktool工具,需要jdk1.8以上。

 
21.Spring Boot整合ZooKeeper实现分布式锁

在Spring Boot中整合ZooKeeper实现分布式锁,通常需要以下步骤:

  1. 添加ZooKeeper依赖:在项目的pom.xml文件中添加ZooKeeper客户端库的依赖。

  2. 配置ZooKeeper连接:在application.propertiesapplication.yml中配置ZooKeeper的连接字符串。

  3. 创建分布式锁的接口:定义一个分布式锁的接口,包含加锁和释放锁的方法。

  4. 实现分布式锁:使用ZooKeeper的客户端库实现分布式锁的逻辑。

  5. 使用分布式锁:在需要同步的代码块中使用分布式锁。

下面是一个简单的代码示例:

pom.xml 添加ZooKeeper依赖:

<dependencies>
    <!-- ZooKeeper客户端 -->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.7.0</version>
    </dependency>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.7.0</version>
    </dependency>
</dependencies>

application.yml 配置ZooKeeper连接:

spring:
  zookeeper:
    host: localhost:2181 # ZooKeeper服务器地址

 分布式锁接口和实现

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.concurrent.CountDownLatch;

@Component
public class DistributedLock {
    
    @Value("${spring.zookeeper.host}")
    private String zkHost;

    private ZooKeeper zkClient;
    
    private static final String LOCK_PATH = "/distributed_lock";

    public void init() throws Exception {
        // 连接ZooKeeper
        CountDownLatch countDownLatch = new CountDownLatch(1);
        zkClient = new ZooKeeper(zkHost, 5000, (watchedEvent) -> {
            if (watchedEvent.getState() == Watcher.Event.KeeperState.SyncConnected) {
                countDownLatch.countDown();
            }
        });
        countDownLatch.await();
    }

    public boolean tryLock(String lockName) throws Exception {
        String lockNode = zkClient.create(
                LOCK_PATH + "/" + lockName,
                "".getBytes(),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.EPHEMERAL_SEQUENTIAL
        );

        // 检查是否是最小序号的节点,即获取锁
        Stat stat = zkClient.exists(lockNode, false);
        if (stat != null) {
            long currentSequence = Long.parseLong(lockNode.substring(lockNode.lastIndexOf('-') + 1));
            while (true) {
                List<String> children = zkClient.getChildren(LOCK_PATH, false);
                long minSequence = Long.MAX_VALUE;
                for (String node : children) {
                    long sequence = Long.parseLong(node.substring(node.lastIndexOf('-') + 1));
                    if (sequence < minSequence) {
                        minSequence = sequence;
                    }
                }
                if (currentSequence == minSequence) {
                    // 成功获得锁
                    return true;
                }
                Thread.sleep(100);
            }
        } else {
            // 创建节点失败
            return false;
        }
    }

    public void unlock(String lockNode) throws Exception {
        zkClient.delete(lockNode, -1);
    }
}

使用分布式锁

@Service
public class SomeService {

    private final DistributedLock distributedLock;

    public SomeService(DistributedLock distributedLock) {
        this.distributedLock = distributedLock;
    }

    public void someMethod() {
        try {
            if (distributedLock.tryLock("myLock")) {
                // 执行业务逻辑
                distributedLock.unlock("/path/to/lock/node");
            } else {
                // 没有获得锁,进行其他逻辑处理
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

请注意,这个示例只是一个比较简略的版本,实际的项目中使用,可能需要考虑更多的异常处理和资源清理。另外,分布式锁的实现可能需要根据具体的业务场景和需求进行调整。

      昨晚把大学时期总结的英语形近词从我的百度文库个人主页下载下来优化整理了一下,那时候大概总结整理了几千个英语形近词,当时是为了应付一下考研英语科目。现在准备学习英语口语,单词仍然是基础,还需要再次复习复习。过几天会把这些整理到CSDN中,哈哈哈,马上要做英语博主了!

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

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

相关文章

【Java笔记】第5章:函数

前言1. 函数的理解2. 函数的基本使用3. 函数的参数4. 函数的返回值5. 函数的执行机制6. 函数的递归调用结语 ↓ 上期回顾: 【Java笔记】第4章&#xff1a;深入学习循环结构 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;【Java学习】 ↑ 前言 各位小伙伴大家好&#xff…

[随记]Mac安装Docker及运行开源Penpot

下载Docker Desktop for Mac&#xff1a;https://www.docker.com/products/docker-desktop/ 安装Docker Desktop for Mac&#xff0c;安装完成后&#xff0c;启动Docker&#xff0c;然后在终端输入&#xff1a; docker version 在Mac电脑的Desktop&#xff0c;随便创建一个文…

【真实体验】使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试【YashanDB迁移体验官】

一、前言 说一下我和崖山数据库的结缘&#xff0c;大概在去年吧&#xff0c;因为我经常在墨天轮写文章&#xff0c;看到崖山数据库推出了一崖山体验官的活动&#xff0c;我就报名参加了。第一次体验了崖山数据库&#xff0c;也测试了我司数据库到崖山数据库的兼容性&#xff0…

钉钉手机端调试前端H5项目流程

此流程以Vue项目为例 一、操作步骤 在根目录下 vue.config.js 文件中将 devServer.host 设置为 0.0.0.0 // vue.config.js module.exports {devServer: {host: 0.0.0.0,...},...}本地启动项目&#xff0c;获取 Network App running at:- Local: http://localhost:8080/ -…

JAVA 学习·泛型(二)——通配泛型

有关泛型的基本概念&#xff0c;参见我的前一篇博客 JAVA 学习泛型&#xff08;一&#xff09;。 协变性 泛型不具备协变性 在介绍通配泛型之前&#xff0c;先来看一下下面的例子。我们定义了一个泛型栈&#xff1a; import java.util.ArrayList; class GenericStack<E>…

全新TOF感知RGBD相机 | 高帧率+AI,探索3D感知新境界

海康机器人在近期的机器视觉新品发布会上推出的全新TOF感知RGBD相机,无疑是对当前机器视觉技术的一次革新。这款相机不仅融合了高帧率、轻松集成、体积小巧以及供电稳定等诸多优点,更重要的是,它将AI与3D感知技术完美结合,通过高帧率+AI算法,实现了对不同场景的快速捕捉与…

Android Studio报错:Constant expression required

【出现的问题】&#xff1a; 使用JDK17以上版本&#xff0c;switch语句报错&#xff1a;Constant expression required 【解决方法】&#xff1a; 在gradle.properties配置文件下添加代码&#xff1a; android.nonFinalResIdsfalse 如图&#xff1a; 接着再点击右上角的Sync…

asyncionetworkxFuncAnimation学习--动态显示计算图的运行情况

asyncio&networkx&FuncAnimation学习--动态显示计算图的运行情况 一.效果二.代码 一.目的 1.动态显示计算图的运行状态(点或边是否已完成) 二.步骤: 1.定义计算图 2.asyncio 并行计算 3.networkx 显示计算图 4.FuncAnimation 动态更新 三.依赖: conda install pygraphv…

Linux shell编程学习笔记48:touch命令

0 前言 touch是csdn技能树Linux基础练习题中最常见的一条命令&#xff0c;这次我们就来研究它的功能和用法。 1. touch命令的功能、格式和选项说明 我们可以使用命令 touch --help 来查看touch命令的帮助信息。 purpleEndurer bash ~ $ touch --help Usage: touch [OPTION]…

pyqt 按钮常用格式Qss设置

pyqt 按钮常用格式Qss设置 QSS介绍按钮常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS&#xff08;Cascading Style Sheets&#xff09;&#xff0c;但专门为 Qt 应用程序设计。使用 QSS&am…

数据分析--客户价值分析RFM(分箱法/标准化)

原数据 原数据如果有异常或者缺失等情况&#xff0c;要先对数据进行处理 &#xff0c;再进行下面的操作&#xff0c;要不然会影响结果的正确性 一、根据RFM计算客户价值并对客户进行细分 1. 数据预处理 1.1 创建视图存储 R、F、M的最大最小值 创建视图存储R 、F、M 的最大最小…

力扣练习题(2024/5/2)

1填充每个节点的下一个右侧节点指针 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个…

C#知识|Dictionary泛型集合的使用总结

哈喽,你好,我是雷工! 以下是C#Dictionary泛型集合的学习笔记。 01 Dictionary泛型集合 1.1、Dictionary<K,V>通常称为字典, 1.2、其中<K,V>是自定义的,用来约束集合中元素类型。 1.3、在编译时检查类型约束, 1.4、无需装箱拆箱操作, 1.5、操作与哈希表(Ha…

C++ string类

目录 0.前言 1.为什么学习string类 1.1 C语言字符串的局限性 1.2 C string类的优势 2.标准库中的string类 2.1 字符串作为字符序列的类 2.2 接口与标准容器类似 2.3 基于模板的设计 2.4 编码和字符处理 3.string类的常用接口说明 3.1构造函数 3.1.1默认构造函数 3…

前端Web开发基础知识

HTML定义 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言。 什么是 HTML? HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言: HyperText Markup LanguageH…

ELK Stack 8 接入ElasticFlow

介绍 Netflow v5 / v9 / v10&#xff08;IPFIX&#xff09;&#xff0c;支持大部分网络厂商及VMware的分布式交换机。 NetFlow是一种数据交换方式。Netflow提供网络流量的会话级视图&#xff0c;记录下每个TCP/IP事务的信息。当汇集起来时&#xff0c;它更加易于管理和易读。…

EasyExcel 处理 Excel

序言 本文介绍在日常的开发中&#xff0c;如何使用 EasyExcel 高效处理 Excel。 一、EasyExcel 是什么 EasyExcel 是阿里巴巴开源的一个 Java Excel 操作类库&#xff0c;它基于 Apache POI 封装了简单易用的 API&#xff0c;使得我们能够方便地读取、写入 Excel 文件。Easy…

常用AI工具分享 + IDEA内使用通义灵码

引言 随着人工智能技术的飞速发展&#xff0c;AI工具已经渗透到我们日常生活和工作的各个领域&#xff0c;带来了前所未有的便利。现在我将分享一下常用的AI工具&#xff0c;以及介绍如何在IDEA中使用通义灵码。 常用AI工具 1. 通义灵码 (TONGYI Lingma) - 由阿里云开发的智能…

Neo4j v5 中 Cypher 的变化

How Cypher changed in Neo4j v5 Neo4j v5 中 Cypher 的变化 几周前&#xff0c;Neo4j 5 发布了。如果你像我一样&#xff0c;在 Neo4j 4 的后期版本中忽略了所有的弃用警告&#xff0c;你可能需要更新你的 Cypher 查询以适应最新版本的 Neo4j。幸运的是&#xff0c;新的 Cyp…

【翻译】REST API

自动伸缩 API 创建或更新自动伸缩策略 API 此特性设计用于 Elasticsearch Service、Elastic Cloud Enterprise 和 Kubernetes 上的 Elastic Cloud 的间接使用。不支持直接用户使用。 创建或更新一个自动伸缩策略。 请求 PUT /_autoscaling/policy/<name> {"rol…