深入探秘 ZooKeeper:架构、设计、角色与 ZNode 全解析 前言
1.ZooKeeper 分布式锁怎么实现的?
ZooKeeper 是一个高效的分布式协调服务,常用于实现分布式系统中的配置管理、命名服务、分布式锁等。下面简要介绍如何使用 ZooKeeper 实现分布式锁。
分布式锁的特性
在讨论如何实现之前,先了解分布式锁应具备的特性:
- 互斥性:同一时刻只能有一个客户端持有锁。
- 可见性:所有客户端都能看到最新的锁状态。
- 容错性:即使有部分节点失败,锁机制仍然能正常工作。
- 死锁避免:系统设计应该尽量避免死锁情况的发生。
使用 ZooKeeper 实现分布式锁
创建临时顺序节点
- 加锁:当一个客户端想要获取锁时,它会在 ZooKeeper 的某个预先约定好的目录下创建一个临时顺序节点(ephemeral sequential node)。因为是顺序节点,所以每个节点都会被分配一个全局唯一的递增序号。
- 检查前序节点:创建完节点后,客户端会获取该目录下的所有子节点列表,并检查自己创建的节点是否是当前最小序号的节点。如果是,则认为成功获得了锁;如果不是,则监听比自己小的那个节点的变化(等待其删除事件)。
- 等待锁释放:如果客户端发现前面还有其他节点,那么它将进入等待状态,直到前一个节点被删除(即前一个锁被释放),这时再重新检查是否可以获得锁。
释放锁
- 当业务逻辑执行完毕或者客户端异常退出时,由于创建的是临时节点,所以一旦客户端与 ZooKeeper 断开连接(例如客户端崩溃或主动断开),ZooKeeper 会自动删除这个节点,从而释放锁。
- 如果客户端正常执行完业务逻辑并打算主动释放锁,它可以显式地删除自己创建的节点。
处理会话失效
- 客户端必须处理好会话失效的情况,因为这可能导致锁丢失。通常需要结合 ZooKeeper 的 Watcher 机制和会话心跳来确保客户端的状态同步和及时响应。
通过这种方式,多个客户端可以安全地竞争同一把锁,并且保证了锁的正确性和高可用性。需要注意的是,实际应用中还需要考虑更多细节问题,比如网络分区、时钟偏差等,以确保分布式锁的健壮性。
2.了解Zookeeper的系统架构吗?
ZooKeeper 是一个分布式协调服务,它为分布式应用提供了一套简单而强大的原语。它的系统架构设计用于在分布式环境中提供高可用性和可靠性。以下是 ZooKeeper 的主要架构组件和工作原理:
ZooKeeper 架构组件
Leader:
- 在一个 ZooKeeper 集群中,有一个服务器被选举为 Leader。
- Leader 负责处理所有的写请求(更新操作),并将其复制到集群中的其他服务器(Follower)。
- 写操作只有在大多数服务器确认后才会成功。
Follower:
- Follower 服务器接收来自客户端的读请求,并返回结果给客户端。
- 它们也参与 Leader 发起的选举过程。
- 接收来自 Leader 的消息,并向 Leader 发送投票。
Observer:
- Observer 类似于 Follower,但不参与选举也不参与写操作的投票。
- 这意味着 Observer 可以减轻集群的负载,因为它只处理读请求。
- Observer 不会影响写操作的法定人数(quorum),即不影响写操作的成功条件。
Client:
- 客户端连接到 ZooKeeper 集群来执行各种操作,如创建节点、删除节点、获取节点数据等。
- 客户端通常会与其中一个服务器保持长连接。
工作流程
- 选举机制 (Leader Election): 当启动一个新的 ZooKeeper 集群或者 Leader 失效时,ZooKeeper 使用一种称为“Fast Leader Election”(ZAB协议的一部分)的算法来选出一个新的 Leader。
- 写操作 (Write Operations): 所有写操作必须通过 Leader 来进行。Leader 会将这些操作广播给所有的 Follower 和 Observer。只有当超过半数的服务器确认了这个写操作,这个操作才会被认为已经提交。
- 读操作 (Read Operations): 读操作可以直接由任何 Follower 或 Observer 处理,不需要 Leader 的介入,因此它们可以快速响应读请求。
- 法定人数 (Quorum): ZooKeeper 需要确保至少有一半以上的服务器正常运行才能正确地处理写操作。这意味着如果集群中有 N 台机器,那么最多可以容忍 (N-1)/2 台机器故障而不影响服务。
数据模型和层次命名空间
ZooKeeper 提供了一个类似文件系统的层次化命名空间,其中的数据单元被称为 znode。每个 znode 可以存储少量的数据(最大为 1MB),并且可以有子 znode。这种结构非常适合用来表示配置信息、状态信息等。
稳定性保证
ZooKeeper 设计的一个关键特性是其对顺序性的保证:所有更新都是全局有序的,这对于实现诸如分布式锁等一致性服务非常重要。
综上所述,ZooKeeper 的架构设计使得它能够在一个分布式环境下提供可靠的协调服务,同时支持高可用性和容错性。
3.Zookeeper为什么要这么设计?
ZooKeeper 的设计决策是为了满足分布式系统中协调服务的特定需求,其设计哲学和架构选择旨在解决一致性、可靠性、性能以及可扩展性等问题。以下是 ZooKeeper 采用这种设计的主要原因:
1. 强一致性
- ZooKeeper 被设计为提供严格的顺序一致性,这意味着所有的客户端看到的数据更新都是按照全局一致的顺序进行的。这对于实现分布式锁、选举领导者等需要严格一致性的场景非常重要。
- 通过使用 ZAB (ZooKeeper Atomic Broadcast) 协议来保证所有服务器对状态变更达成一致,确保了即使在部分服务器故障的情况下,也能保持数据的一致性。
2. 高可用性和容错性
- ZooKeeper 是一个分布式的系统,它允许集群中的某些节点失败而不影响整体服务的可用性。这通过法定人数(quorum)机制实现,即只要超过一半的节点是活跃的,那么整个系统就可以继续工作。
- 使用 Leader-Follower 架构,Leader 负责处理写请求,Follower 和 Observer 可以分担读请求,提高系统的可用性和负载均衡能力。
3. 简单性
- ZooKeeper 提供了一个简单的 API 和类似文件系统的层次化命名空间,使得开发者可以更容易地理解和使用。这样的抽象层简化了复杂分布式应用的开发。
- 简化的模型也有助于减少潜在的错误来源,并且让 ZooKeeper 本身更加稳定可靠。
4. 性能优化
- ZooKeeper 通过将读操作分散到 Follower 和 Observer 上来减轻 Leader 的负担,从而提高了读取性能。
- 写操作虽然需要通过 Leader 并等待多数派确认,但是一旦提交,它们就会被快速传播给其他节点,保证了良好的写入性能。
5. 事件驱动的通知机制
- ZooKeeper 支持 Watcher 机制,允许客户端监听某个 znode 的变化并在变化发生时得到通知。这种事件驱动的方式减少了轮询带来的开销,提高了效率。
6. 持久性和临时节点
- ZooKeeper 支持创建持久节点(Persistent node)和临时节点(Ephemeral node),后者在创建它的会话结束时自动删除。这为实现诸如分布式锁等功能提供了便利,因为当拥有锁的进程崩溃后,锁可以自动释放。
综上所述,ZooKeeper 的设计是为了在复杂的分布式环境中提供一个可靠的、高效的协调服务。它特别适合那些需要严格一致性和高可用性的应用场景,如分布式配置管理、命名服务、集群管理和分布式锁定等。
4.你知道Zookeeper中有哪些角色?
在 ZooKeeper 中,集群内的服务器可以扮演几种不同的角色,这些角色对于实现其高可用性和一致性至关重要。以下是 ZooKeeper 中的主要角色:
- Leader
- 职责:在一个 ZooKeeper 集群中,只有一个 Leader 角色。Leader 负责处理所有的写请求,并将这些更改广播给其他服务器(Follower 和 Observer)。Leader 还负责协调选举过程。
- 特点:所有更新操作都必须通过 Leader 来完成,以确保数据的一致性。只有当大多数的 Follower 或 Observer 确认了写操作后,该操作才会被认为已经提交。
- Follower
- 职责:Follower 参与 Leader 的选举过程,并接收来自 Leader 的消息和状态更新。它们也能够直接处理客户端的读请求。
- 特点:Follower 是集群中的主要工作成员之一,它们参与法定人数投票(quorum),这意味着它们对写操作的成功与否有决定权。如果一个写操作得到了超过半数 Follower 的确认,则认为该操作成功。
- Observer
- 职责:Observer 类似于 Follower,但不参与选举也不参与写操作的投票。因此,它们不会影响法定人数的计算。
- 特点:Observer 主要用来增加系统的读取容量,因为它们也可以处理读请求。这有助于分担 Leader 和 Follower 的负载,特别是在大型集群中。
- Client
- 职责:虽然 Client 不是 ZooKeeper 集群的一部分,但它是一个重要的组成部分,因为它代表了使用 ZooKeeper 服务的应用程序或用户。客户端连接到 ZooKeeper 集群来执行各种操作,如创建节点、删除节点、获取节点数据等。
- 特点:客户端通常会与其中一个服务器保持长连接,并且可以通过 Watcher 监听特定事件的变化。
- Election Participant (选举参与者)
- 职责:这个不是一种独立的角色,而是指那些参与 Leader 选举过程的服务器,即所有的 Follower 和潜在的新的 Leader。
- 特点:在选举期间,每个服务器都会尝试成为新的 Leader,或者为另一个合适的候选者投票。
- Learner
- 职责:这是对 Follower 和 Observer 的统称,表示那些从 Leader 学习最新状态的服务器。
- 特点:Learner 接收来自 Leader 的更新,并将其应用到自己的状态上,以保持与集群其余部分同步。
总结来说,ZooKeeper 的角色设计是为了确保系统能够在分布式环境中提供高效、一致的服务,同时保证高可用性和容错能力。每个角色都有其特定的任务,共同协作以维护整个系统的健康运行。
5.你熟悉Zookeeper节点ZNode和相关属性吗?
ZooKeeper 的核心概念之一是 ZNode,即 ZooKeeper 节点。每个 ZNode 都可以存储数据,并且可以拥有子节点,形成一个层次化的命名空间,类似于文件系统。但是,与传统文件系统不同的是,ZooKeeper 的设计更注重于协调服务和配置管理等场景。以下是关于 ZNode 及其相关属性的详细介绍:
ZNode 类型
- 持久节点 (Persistent node)
- 创建后一直存在,直到显式删除。
- 临时节点 (Ephemeral node)
- 依赖于创建它的会话(session)。如果会话结束(如客户端断开连接),该节点会被自动删除。
- 注意:临时节点不能有子节点。
- 持久顺序节点 (Persistent Sequential node)
- 创建时会在节点名称后面追加一个全局唯一的递增序号。
- 持久存在,除非被显式删除。
- 临时顺序节点 (Ephemeral Sequential node)
- 具有临时节点的特点,同时也会在节点名称后追加一个唯一递增序号。
ZNode 属性
- dataLength: 存储在这个 ZNode 上的数据大小(以字节为单位)。ZooKeeper 对单个 ZNode 数据大小有限制,默认最大为 1MB。
- ctime: 表示这个 ZNode 第一次被创建的时间戳。
- mtime: 最近一次更新 ZNode 数据或元数据的时间戳。
- version: 记录了 ZNode 数据被修改的次数。每次数据变更时版本号都会增加。
- cversion: 子节点变化的版本号。每当一个子节点被添加、删除或重命名时,此版本号就会递增。
- aversion: ACL(访问控制列表)的变化版本号。每当 ACL 被修改时,这个版本号就会增加。
- ephemeralOwner: 如果这是一个临时节点,则该字段表示创建它的会话 ID。对于非临时节点,这个值为 0。
- data: ZNode 中存储的实际数据内容。
- children: ZNode 的直接子节点列表。
特殊特性
- Watcher: 客户端可以在 ZNode 上设置 Watcher 来监听特定事件(例如节点创建、删除、数据变化等)。一旦这些事件发生,ZooKeeper 会通知设置了 Watcher 的客户端。
- ACLs (Access Control Lists): 提供了一种机制来控制哪些用户或应用程序可以对某个 ZNode 进行读写操作。ACLs 是基于 scheme 和 id 的权限控制系统。
通过上述特性和属性,ZooKeeper 提供了一个强大而灵活的基础架构,适用于构建分布式应用中的协调服务,如配置管理、命名服务、分布式锁、集群管理和领导者选举等。
相关文章:
深入探秘 ZooKeeper:架构、设计、角色与 ZNode 全解析 前言
1.ZooKeeper 分布式锁怎么实现的? ZooKeeper 是一个高效的分布式协调服务,常用于实现分布式系统中的配置管理、命名服务、分布式锁等。下面简要介绍如何使用 ZooKeeper 实现分布式锁。 分布式锁的特性 在讨论如何实现之前,先了解分布式锁应…...
计算机图形学【绘制立方体和正六边形】
工具介绍 OpenGL:一个跨语言的图形API,用于渲染2D和3D图形。它提供了绘制图形所需的底层功能。 GLUT:OpenGL的一个工具库,简化了窗口创建、输入处理和其他与图形环境相关的任务。 使用的函数 1. glClear(GL_COLOR_BUFFER_BIT |…...
日志模块和Plus模块升级以及问题修复
文章目录 1.common-log4j2-starter1.目录2.LogAspectProperties.java 日志切面配置3.TraceProperties.java 链路追踪配置4.Log4j2AutoConfiguration.java 条件注入链路追踪过滤器 2.common-mybatis-plus-starter1.目录2.引入依赖3.SqlBeautyProperties.java 读取sql.beauty相关…...
【Bug】报错信息:Required request body is missing(包含五种详细解决方案)
大家好,我是摇光~ 遇到“Required request body is missing”错误通常意味着服务器期望在HTTP请求中包含一个请求体(body),但是实际上并没有收到。 例如: 当你在使用网页或应用程序的后台(比如一个网站或手…...
Ceph分布式存储集群,不仅仅是一个简单的对象存储解决方案
Ceph 作为 OpenStack 的存储后端 块存储(Cinder 后端) Ceph 的 RBD(RADOS Block Device)模块作为 OpenStack Cinder 服务的后端,为虚拟机提供块级别的存储资源。RBD 支持快照、克隆和恢复等功能,能够满足虚…...
6.business english--updates
能够运用一系列表达方式来提供和接收最新情况,并讨论后续行动事项。 be able to use a range of expression to give and receive updates and to discuss follow-up action items in a typical week 在平常的一周里 The company promises that the quality will …...
Lianwei 安全周报|2024.1.7
以下是本周「Lianwei周报」,我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件,保证大家不错过本周的每一个重点! 政策/标准/指南最新动态 01 国家发改委等三部门印发《国家数据基础设施建设指引》 国家数据基础设施是从数据…...
加速科技荣获“浙江省企业研究院”认定
近日,浙江省经济和信息化厅公布“2024年认定(备案)省级企业研发机构名单”。经过多轮严格评审和公示,加速科技荣获“省企业研究院”认定。这是加速科技继获国家级专精特新“小巨人”企业认定荣誉后的又一里程碑。 “浙江省企业研究…...
嵌入式C语言:什么是指针?
目录 一、指针的基本概念 1.1. 定义指针 1.2. 赋值给指针 1.3. 解引用指针 1.4. 指针运算 1.5. 空指针 1.6. 函数参数 1.7. 数组和指针 1.8. 示例代码 二、指针在内存中的表示 2.1. 内存地址存储 2.2. 内存模型 2.3. 指针与硬件交互 2.4. 示例代码 三 、指针的重…...
Python 管理 GitHub Secrets 和 Workflows
在现代软件开发中,自动化配置管理变得越来越重要。本文将介绍如何使用 Python 脚本来管理 GitHub 仓库的 Secrets 和 Workflows,这对于需要频繁更新配置或管理多个仓库的团队来说尤为有用。我们将分三个部分进行讨论:设置 GitHub 权限、创建 GitHub Secret 和创建 GitHub Wo…...
wireshark排除私接小路由
1.wireshark打开,发现了可疑地址,合法的地址段DHCP是192.168.100.0段的,打开后查看发现可疑地址段,分别是,192.168.0.1 192.168.1.174 192.168.1.1。查找到它对应的MAC地址。 ip.src192.168.1.1 2.通过show fdb p…...
Vue3初学之Element-plus
用于快速的上手开发,以做项目为导向,所以借用element-plus插件 发现淘宝的镜像有时候也是很慢的,还可以换个 npm config set registry https://registry.npmmirror.com 安装element-plus npm install element-plus --save 查看安装是否成…...
day06_Spark SQL
文章目录 day06_Spark SQL课程笔记一、今日课程内容二、DataFrame详解(掌握)5.清洗相关的API6.Spark SQL的Shuffle分区设置7.数据写出操作写出到文件写出到数据库 三、Spark SQL的综合案例(掌握)1、常见DSL代码整理2、电影分析案例…...
苍穹外卖07——来单提醒和客户催单(涉及SpringTask、WebSocket协议、苍穹外卖跳过微信支付同时保证可以收到订单功能)
Spring Task介绍 应用场景: 信用卡每月还款提醒银行贷款每月还款提醒火车票销售系统处理未付款订单入职纪念日为用户发送通知 cron表达式 cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间。 构成规则:分为6或7个域&…...
IDEA的常用设置
目录 一、显示顶部工具栏 二、设置编辑区字体按住鼠标滚轮变大变小(看需要设置) 三、设置自动导包和优化导入的包(有的时候还是需要手动导包) 四、设置导入同一个包下的类,超过指定个数的时候,合并为*&a…...
【GoLang】两个字符串如何比较大小?以及字典顺序的比较规则
在 Go 语言中,字符串的比较是基于字典顺序进行的。 字典顺序的比较规则: 比较两个字符串从左到右逐个字符的Unicode码点值, 若比较结果不相等则将此结果作为字符串大小的结果, 若比较结果相等则比较下一位, 若其中一个…...
3d打印材料是塑料么?pla petg
3D 打印材料不仅限于塑料,但塑料确实是最常见的材料类型之一。以下是一些常用的3D打印塑料材料的介绍: 1. PLA(聚乳酸) • 特点:可生物降解,环保,容易打印,表面光滑。 • 适用…...
HTML5 语义元素:网页构建的新时代
HTML5 语义元素:网页构建的新时代 HTML5,作为网页开发的新标准,引入了一系列语义元素,这些元素不仅为网页内容提供了明确的含义,还极大地提高了网页的可访问性和搜索引擎优化(SEO)效果。本文将…...
下载导出Tomcat上的excle文档,浏览器上显示下载
目录 1.前端2.Tomcat服务器内配置3.在Tomcat映射的文件内放置文件4.重启Tomcat,下载测试 1.前端 function downloadFile() {let pictureSourceServer "http://192.168.1.1:8080/downFile/";let fileName "测试文档.xlsx";let fileURL pictu…...
Edge浏览器内置的截长图功能
Edge浏览器内置截图功能 近年来,Edge浏览器不断更新和完善,也提供了长截图功能。在Edge中,只需点击右上角的“...”,然后选择“网页捕获”->“捕获整页”,即可实现长截图。这一功能的简单易用,使其成为…...
【测试】持续集成CI/CD
近期更新完毕,建议关注收藏点赞~ 目录 概括gitJenkinspostman集成jenkins代码集成jenkins 概括 CI/CD stands for Continuous Integration and Continuous Deployment 定义 团队成果持续集成到公共平台。一天可以集成1次or多次 本地代码管理 git 远程代…...
大数据数据治理精讲
前言 首先明确,数据治理是一个很大的概念。 在许多与数据相关的文章中,我们经常能看到“数据治理”这一术语。从字面意思来看,它主要强调对数据进行有效管理。作为数据基础支撑工作的一部分,数据治理的重要性不言而喻。在日常工作…...
Spring Boot项目中增加MQTT对接
在Spring Boot项目中增加MQTT对接,通常涉及以下几个步骤: 一、搭建MQTT服务器 首先,你需要搭建一个MQTT服务器(Broker)。这可以通过多种方式实现,例如使用Docker来部署EMQX或Mosquitto等MQTT Broker。 以…...
Python自学 - 类进阶(迭代器)
<< 返回目录 1 Python自学 - 类进阶(迭代器) 迭代器是一个实现了 __iter__ 和 __next__ 方法的对象。实现这两个方法是Python迭代行为一种约定。 为什么要用迭代器?迭代器的好处是不占内存,它并不会像列表一样,把每个成员都占满。…...
FreePBX 17 on ubuntu24 with Asterisk 20
版本配置: FreePBX 17(最新) Asterisk 20(最新Asterisk 22,但是FreePBX 17最新只支持Asterisk 21,但是21非LTS版本,所以选择Asterisk 20) PHP 8.2 Maria DB (v10.11) Node J…...
SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门
本篇博客将通过实例演示如何在 Spring Cloud 中使用 Nacos 实现服务注册与发现,并使用 OpenFeign 进行服务间调用。你将学到如何搭建一个完整的微服务通信框架,帮助你快速开发可扩展、高效的分布式系统。 目录 前言 服务注册和发现 服务注册 编辑 …...
[应用类App] 轮廓线 aia源码 UI界面精美,画布实现手柄摇杆
屏幕数量:10个,仅主界面近3000代码块,请自行研究参考。 实现了手柄摇杆功能,界面做的比较好。 下载地址:轮廓线 aia源码 UI界面精美,画布实现手柄摇杆 - .aia 案例源码 - 清泛IT社区,为创新赋能…...
慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(一)
通过左侧导航菜单〖业务建模〗→〖业务对象〗,进入该界面;在该界面可以查看到系统中已存在的业务对象; 1.新建业务对象 在DatalinkX中进入【业务建模】的【业务对象】页面,点击【新建】按钮进入新建页面; 新建页面左侧…...
uniapp 之 uni-forms校验提示【提交的字段[‘xxx‘]在数据库中并不存在】解决方案
目录 场景问题代码结果问题剖析解决方案 场景 uni-forms官方组件地址 使用uniapp官方提供的组件,某个表单需求,单位性质字段如果是高校,那么工作单位则是高校的下拉选择格式,单位性质如果是其他的类型,工作单位则是手动…...
JVM 触发类加载的条件有哪些?
目录 一、类加载生命周期 二、主动引用 2.1、创建类的实例 2.2、访问类的静态字段或静态方法 2.3、反射 2.4、初始化类的子类时,先初始化父类 2.5、虚拟机启动时,初始化 main 方法所在的类 2.6、动态语言支持 三、被动引用 3.1、通过子类引用父…...
01 springboot集成mybatis后密码正确但数据库连接失败
01 springboot集成mybatis后密码正确但数据库连接失败 问题描述: 1.datasource配置: //application.yaml spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&serverTime…...
学习threejs,导入assimp assimp2json格式的模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.AssimpJSONLoader as…...
NLTK分词以及处理方法
在自然语言处理(NLP)的领域中,文本的处理是一个基础且核心的环节,特别是在大规模数据分析和文本挖掘中。无论是聊天机器人、情感分析,还是机器翻译,分词都是必不可少的步骤之一。分词的目的是将长篇的文本拆解为较小的单位(如单词或句子),这些单位是后续分析和处理的基…...
容器技术全面攻略:Docker的硬核玩法
文章背景 想象一下,一个项目终于要上线了,结果因为环境配置不一致,测试服务器一切正常,生产环境却宕机了。这是开发者噩梦的开始,也是Docker救世主角色的登场!Docker的出现颠覆了传统环境配置的方式&#…...
什么是顶级思维?
在现代社会,我们常常听到“顶级思维”这个概念,但究竟什么才是顶级思维?它又是如何影响一个人的成功和幸福呢?今天,我们就来探讨一下顶级思维的几个关键要素,并分享一些实用的生活哲学。 1. 身体不适&…...
Chromium 132 编译指南 Windows 篇 - 配置核心环境变量 (三)
1. 引言 在之前的 Chromium 编译指南系列文章中,我们已经完成了编译前的准备工作以及 depot_tools 工具的安装与配置。本篇我们将聚焦于 Chromium 编译过程中至关重要的环境变量设置,这些配置是您顺利进行 Chromium 构建的基石。 2. 启用本地编译&…...
Linux查看服务器日志
一、tail 这个是我最常用的一种查看方式 用法如下: tail -n 10 test.log 查询日志尾部最后10行的日志; tail -n 10 test.log 查询10行之后的所有日志; tail -fn 10 test.log 循环实时查看最后1000行记录(最常用的)一般还会配合着grep用ÿ…...
Docker 专栏 —— Dockerfile 指令详解
文章目录 ADD 复制文件COPY 复制文件ARG 设置构建参数CMD 容器启动命令ENTRYPOINT ⼊⼝点ENV 设置环境变量EXPOSE 声明暴露的端⼝FROM 指定基础镜像LABEL 为镜像添加元数据MAINTAINER 指定维护者的信息RUN 执⾏命令USER 设置⽤户VOLUME 指定挂载点WORKDIR 指定⼯作⽬录 ADD 复制…...
IntelliJ IDEA 优化设置
针对 Java 开发,IntelliJ IDEA 有许多优化设置,可以帮助提高代码编写、调试、构建和运行的效率。以下是一些针对 Java 开发的优化建议: 1. 增加 JVM 内存和性能优化 增加堆内存: 通过调整 idea.vmoptions 文件,增加 IntelliJ ID…...
git打补丁
1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞,作者进行了修复,我们可以通过使用git补丁的方式,将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量,生成…...
开源CMS建站系统的安全优势有哪些?
近年来,用户们用开源CMS系统搭建网站的比例也越来越高,它为用户提供了便捷的网站建设解决方案。其中,亿坊CMS建站系统更因安全方面备受用户欢迎,下面带大家一起全面地了解一下。 一、什么是开源CMS? 开源CMS指的是那…...
【linux系统之redis6】redis的基础命令使用及springboot连接redis
redis的基础命令很多,大部分我们都可以在官网上找到,真的用的时候可以去官网找,不用全部记住这些命令 redis通用的基础命令的使用 代码测试 string类型常见的命令 key值的结构,可以区分不同的需求不同的业务名字 hash类型 创建…...
HDFS异构存储和存储策略
一、HDFS异构存储类型 1.1 冷、热、温、冻数据 通常,公司或者组织总是有相当多的历史数据占用昂贵的存储空间。典型的数据使用模式是新传入的数据被应用程序大量使用,从而该数据被标记为"热"数据。随着时间的推移,存储的数据每周…...
VSCode 使用鼠标滚轮控制字体
一、 文件 | 首选项 | 设置 二、单击在 settings.json中编辑 "editor.mouseWheelZoom": true 注注注意:保存哦!ctrlS 三、测试 按住ctrl鼠标滚轮,控制字体大小...
全面教程:Nacos 2.4.2 启用鉴权与 MySQL 数据存储配置
全面教程:Nacos 2.4.2 启用鉴权与 MySQL 数据存储配置 1. 配置 Nacos 开启鉴权功能 1.1 修改 application.properties 配置文件 在 Nacos 2.4.2 中,开启鉴权功能需要修改 conf/application.properties 文件。按照以下方式配置: # 开启鉴权…...
pycharm-pyspark 环境安装
1、环境准备:java、scala、pyspark、python-anaconda、pycharm vi ~/.bash_profile export SCALA_HOME/Users/xunyongsun/Documents/scala-2.13.0 export PATH P A T H : PATH: PATH:SCALA_HOME/bin export SPARK_HOME/Users/xunyongsun/Documents/spark-3.5.4-bin…...
论文解析 | 基于语言模型的自主代理调查
论文 《A Survey on Large Language Model-based Autonomous Agents》 对基于大型语言模型(LLM)的自主智能体(Autonomous Agents)进行了全面调查。随着大型语言模型(如 GPT 系列、BERT、T5 等)的快速发展&a…...
Jupyter Notebook 安装PyTorch
1、判断当前环境 通过如下命令可以看出是Anaconda 环境 2、Anaconda 环境安装 PyTorch 2.1 要执行的命令 如果你使用的是 Anaconda 环境,可以使用以下命令来安装 PyTorch: conda install pytorch -c pytorch 2.2 执行遇到的问题:没有权…...
计算机网络之---ICMP协议与Ping命令
ICMP 协议 ICMP (Internet Control Message Protocol) 是一种网络层协议,主要用于在 IP 网络中传递控制消息。ICMP 主要用于网络设备之间的故障报告和诊断,帮助设备检测网络连接问题。它是 IP 协议的核心部分之一,用于发送错误消息和操作信息…...
Flutter项目开发模版,开箱即用(Plus版本)
前言 当前案例 Flutter SDK版本:3.22.2 本文,是由这两篇文章 结合产出,所以非常建议大家,先看完这两篇: Flutter项目开发模版: 主要内容:MVVM设计模式及内存泄漏处理,涉及Model、…...