大数据学习(63)- Zookeeper详解
&&大数据学习&&
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
🍋一、zookeeper概念
Zookeeper是 Apache Hadoop项目下的一个子项目,是一个树形目录服务。
Zookeeper翻译过来就是动物园管理员,他是用来管Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员,简称zk
ZooKeeper 是一个分布式的、开源的协调服务,主要用于解决分布式系统中的一致性问题。它提供了一个简单而强大的接口,帮助开发者在分布式环境中实现诸如配置管理、命名服务、分布式锁、集群管理等功能。
🍋二、ZooKeeper 的架构
ZooKeeper 采用 主从架构,包含以下角色:
-
Leader
负责处理写请求和事务操作。通过选举机制产生。(ZooKeeper 的选举机制主要用于其集群管理,特别是在集群启动或领导者节点故障时,用于选出一个新的领导者节点。这个领导者节点将负责处理客户端的请求、维护集群状态以及与其他节点进行通信。) -
Follower
处理读请求,并将写请求转发给 Leader。参与 Leader 选举。 -
Observer(可选)
与 Follower 类似,但不参与选举,用于扩展读性能。 -
Client
与 ZooKeeper 集群交互的客户端。
🍋三、zookeeper提供的主要功能
1、配置管理
在多个应用程序(或服务器)中,假如存在一些相同的配置信息,在对该配置信息进行修改时,我们需要一个一个进行修改,这样会大大增加维护的成本,不方便管理。这时如果使用一个专门放配置中心的组件,将相同的配置信息放在配置中心,需要的时候直接拉取,这样可以大大节约维护的成本, 而zookeeper即可实现配置中心的功能。
2.分布式锁
在多个用户访问同一台主机上的应用程序数据时,我们可以通过加锁解决并发操作的问题,但是如果有多台主机相同的应用程序要访问同一数据时,这个时候我们在一台主机上加锁是不能解决另一台主机的并发问题的,换句话说自己的锁只对自己有效并不影响别的 ,这个时候就需要分布式锁解决这类问题,我个人理解分布式锁像是从所有主机中抽取出来的一把锁,或者是有一把总锁对所有主机都有效。zookeeper可以实现分布式锁的功能。
分布式锁允许在多个服务实例之间协调对共享资源的访问。在分布式环境中,传统的单机锁机制(如线程锁)无法跨进程或跨服务器工作,因此需要使用分布式锁来确保在同一时间只有一个服务实例能够访问或修改共享资源,从而避免数据竞争和数据不一致的问题。
3.分布式应用协调
分布式事务:ZooKeeper 可以用于实现分布式事务的协调,确保多个分布式节点能够协同工作,完成复杂的事务操作。
分布式选举:ZooKeeper 可以用于实现分布式系统中的领导者选举,确保在集群中只有一个节点担任领导者角色。
选举过程大致如下:
-
集群启动或领导者故障:当 ZooKeeper 集群启动时,或者当前的领导者节点因为某种原因(如崩溃或网络分区)无法继续工作时,集群会进入选举状态。
-
服务器状态转换:集群中的每个服务器都会将自己的状态转换为
LOOKING
,表示正在寻找领导者。 -
投票过程:
- 每个服务器都会为自己投一票,并将自己的投票信息(包括服务器ID和ZXID,ZXID是ZooKeeper的事务ID,用于标识服务器的版本和状态)发送给集群中的其他服务器。
- 服务器会收集来自其他服务器的投票,并根据一定的规则(如ZXID的大小和服务器ID的大小)来决定是否接受其他服务器的投票。
- 如果一个服务器发现自己的投票能够赢得多数(即超过半数的服务器投票给自己),它就会成为领导者。
-
领导者确认:一旦选举出领导者,领导者会向集群中的其他服务器发送通知,确认自己的领导地位。其他服务器在收到领导者的通知后,会将自己的状态转换为
FOLLOWING
或OBSERVER
(对于观察者节点),并开始跟随领导者工作。 -
故障恢复:如果领导者节点在工作过程中出现故障,集群会重新进入选举状态,选举出一个新的领导者。
4. 组服务
组成员管理:ZooKeeper 可以管理分布式系统中的组成员信息,如节点的加入、离开和更新。
负载均衡:通过组成员管理,ZooKeeper 可以帮助实现分布式系统中的负载均衡和故障恢复。
🍋四、使用场景
1. 分布式数据库
元数据信息管理:
- 定义:在分布式数据库中,元数据是指描述数据库结构、配置、权限等信息的数据。
- ZooKeeper 作用:ZooKeeper 可以用于集中存储和管理分布式数据库的元数据。例如,数据库管理员可以在 ZooKeeper 中创建节点来存储数据库表的结构信息、索引信息、权限设置等。
- 优势:通过 ZooKeeper,数据库管理员可以方便地查看和修改元数据,同时 ZooKeeper 的数据一致性保证确保所有节点都能获取到最新的元数据信息。
节点状态信息管理:
- 定义:节点状态信息指的是分布式数据库中各个节点的运行状态、负载情况等信息。
- ZooKeeper 作用:ZooKeeper 可以跟踪分布式数据库集群中的节点信息,监控节点的状态(如上线、下线、故障等)。例如,每个数据库节点在启动时可以向 ZooKeeper 注册自己的信息,并在故障时通知 ZooKeeper。
- 优势:数据库管理员可以通过 ZooKeeper 实时了解集群中各个节点的状态,从而进行更好的资源管理和故障恢复。
2. 分布式消息队列
元数据管理:
- 定义:在分布式消息队列中,元数据包括队列的配置信息、消费者的消费位点等。
- ZooKeeper 作用:ZooKeeper 可以存储和管理消息队列的元数据。例如,消息队列系统可以在 ZooKeeper 中创建节点来存储队列的名称、消费者的消费位点等信息。
- 优势:通过 ZooKeeper,消息队列系统可以实现元数据的集中管理和动态更新,方便管理员进行配置和监控。
消费者协调:
- 定义:在分布式消息队列中,消费者协调指的是多个消费者如何共同消费消息,避免消息重复消费或消息丢失。
- ZooKeeper 作用:ZooKeeper 可以用于实现消费者协调。例如,通过 ZooKeeper 的分布式锁机制,可以确保同一时间只有一个消费者能够处理某个消息,从而避免消息重复消费。同时,ZooKeeper 还可以用于实现消费者的负载均衡,将消息均匀分配给不同的消费者。
- 优势:通过 ZooKeeper,消息队列系统可以实现高效、可靠的消费者协调,提高消息处理的效率和稳定性。
3. 服务发现和注册
服务注册:
- 定义:服务注册是指将服务实例的信息(如服务名称、地址、端口等)注册到注册中心,以便其他服务能够发现和调用。
- ZooKeeper 作用:ZooKeeper 可以作为服务注册中心,允许服务提供者将自己的服务信息注册到 ZooKeeper 中。例如,服务提供者可以在 ZooKeeper 中创建一个节点来存储自己的服务信息。
- 优势:通过 ZooKeeper,服务提供者可以方便地将自己的服务注册到注册中心,实现服务的动态发布和更新。
服务发现:
- 定义:服务发现是指服务消费者从注册中心获取可用的服务实例信息,以便进行服务调用。
- ZooKeeper 作用:ZooKeeper 可以帮助服务消费者从注册中心获取可用的服务实例信息。例如,服务消费者可以监听 ZooKeeper 中与服务名称相关的节点,当有新的服务实例注册或已有的服务实例下线时,ZooKeeper 会通知服务消费者。
- 优势:通过 ZooKeeper,服务消费者可以实时获取可用的服务实例信息,实现服务的动态发现和调用。
4. 分布式缓存
数据一致性协调:
- 定义:在分布式缓存中,数据一致性指的是多个缓存节点之间的数据保持一致。
- ZooKeeper 作用:ZooKeeper 可以用于协调分布式缓存的一致性。例如,当某个缓存节点更新数据时,可以在 ZooKeeper 中创建一个节点来存储更新后的数据版本信息。其他缓存节点可以监听这个节点,当数据版本发生变化时,及时更新自己的缓存数据。
- 优势:通过 ZooKeeper,分布式缓存系统可以实现高效、可靠的数据一致性协调,确保多个缓存节点之间的数据保持一致。
节点状态监控:
- 定义:节点状态监控是指对分布式缓存中的各个节点进行状态监控,以便及时发现和处理故障节点。
- ZooKeeper 作用:ZooKeeper 可以跟踪分布式缓存集群中的节点信息,监控节点的状态(如上线、下线、故障等)。例如,每个缓存节点在启动时可以向 ZooKeeper 注册自己的信息,并在故障时通知 ZooKeeper。
- 优势:通过 ZooKeeper,分布式缓存系统可以实时了解集群中各个节点的状态,从而进行更好的资源管理和故障恢复。
相关文章:
大数据学习(63)- Zookeeper详解
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦🤞 …...
安卓Compose中accompanist库使用详解
安卓Compose中accompanist库使用详解 文章目录 安卓Compose中accompanist库使用详解一、Accompanist 库概览二、核心组件详解三、总结与建议 本文首发地址 https://h89.cn/archives/348.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 一、Accompanist 库概览 Acco…...
Gateway:网关路由与登录鉴权
在微服务架构中,用户登录和身份校验的处理方式确实与单体应用有所不同。在单体架构中,一旦用户通过身份验证,其会话信息可以在整个应用范围内共享,所有模块都能访问到用户信息。然而,在微服务架构下,每个服…...
【MySQL篇】MySQL内置函数
目录 1,日期函数 2,字符串函数 3,数学函数 4,其他函数 实战OJ 1,日期函数 日期类型在之前文章【数据类型】中有描述 传送门:【MySQL篇】数据类型_mysql 数据类型-CSDN博客 函数名称描述current_dat…...
爬虫案例十三js逆向模拟登录中大网校
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码 前言 提示:这里可以添加本文要记录的大概内容: js 逆向模拟登录中大网校 提示:以下是本篇文章正文内…...
高效编程指南:PyCharm与DeepSeek的完美结合
DeepSeek接入Pycharm 前几天DeepSeek的充值窗口又悄悄的开放了,这也就意味着我们又可以丝滑的使用DeepSeek的API进行各种辅助性工作了。本文我们来聊聊如何在代码编辑器中使用DeepSeek自动生成代码。 注:本文适用于所有的JetBrains开发工具,…...
前馈神经网络 - 参数学习(优化问题)
神经网络的参数学习比线性模型要更加困难,主要原因有两点:(1)非凸优化问题和 (2)梯度消失问题,本文我们来学习和分析这两类问题。 一、非凸优化问题 1、非凸优化问题演示: 神经网络的优化问题是一个非凸优化问题。 …...
AI 大模型统一集成|如何封装多个大模型 API 调用
🌟 在这系列文章中,我们将一起探索如何搭建一个支持大模型集成项目 NexLM 的开发过程,从 架构设计 到 代码实战,逐步搭建一个支持 多种大模型(GPT-4、DeepSeek 等) 的 一站式大模型集成与管理平台ÿ…...
C语言学习day25:WinAPI编程进阶06-游戏辅助窗体监视热键讲解
我们上一章已经绘制出了植物大战僵尸的一个页面 但是我们要怎么样去判断,用户是否按了F1呢。好的接下来就是我们的内容,监视热键。 思路: 我们按下的是键盘,因此我们得用键盘消息,也是:WM_KEYDOWN 同时要…...
JVM常用概念之常量
问题 final修饰的字段就一定是不能重新赋值吗? 基础知识 常量变量是使用常量表达式初始化的原始类型或 String 类型的最终变量。变量是否为常量变量可能对类初始化、二进制兼容性和明确赋值有影响。 —Java 语言规范 实验 用例源码-重新赋值 import java.lang.reflect.Fie…...
【Vue】el-dialog的2种封装方法(父子组件双向通信),$emit触发父事件/.sync修饰符双向绑定
🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回!!) 👉 个人专栏推荐:《前端项目教程以及代码》 前言 在现代Vue.js开发中,el-dialog组件作为ElementUI库中的一个…...
解决远程主机允许路由转发 【原理扫描】:将/proc/sys/net/ipv4/ip_forward 置为0
解决远程主机允许路由转发 【原理扫描】:将/proc/sys/net/ipv4/ip_forward 置为0 解决远程主机允许路由转发 【原理扫描】:将/proc/sys/net/ipv4/ip_forward 置为0问题描述解决方案临时修改永久生效验证配置 影响 解决远程主机允许路由转发 【原理扫描】…...
c++20 Concepts的简写形式与requires 从句形式
c20 Concepts的简写形式与requires 从句形式 原始写法(简写形式)等效写法(requires 从句形式)关键区别说明:组合多个约束的示例:两种形式的编译结果:更复杂的约束示例:标准库风格的约…...
安装oVirt环境
1. oVirt Engine 硬件要求 资源最低推荐 中央处理器 双核 x86_64 CPU. 一个四核 x86_64 CPU 或多个双核 x86_64 CPU。 记忆 4 GB 的可用系统 RAM(如果未安装 Data Warehouse 且现有进程未占用内存)。 16 GB 的系统 RAM。 硬盘 25 GB 本地可访问的…...
【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Tomcat 的工作原理:从启动到请求处理的流程
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、Tomcat…...
【认识OpenThread协议】
OpenThread 是一种基于 IPv6 、IEEE 802.15.4 标准的低功耗无线 Mesh 网络协议,主要用于智能家居、物联网设备等场景。它的设计目标是实现设备之间的高效通信、低功耗运行和高可靠性。 OpenThread官方文档 ① 特性 低功耗: 适合电池供电的设备。 Mesh 网络: 支持多…...
Qt入门笔记
目录 一、前言 二、创建Qt项目 2.1、使用向导创建 2.2、最简单的Qt应用程序 2.2.1、main函数 2.2.2、widget.h文件 2.2.3、widget.cpp文件 2.3、Qt按键Botton 2.3.1、创建一个Botton 2.3.2、信号与槽 2.3.3、按键使用信号与槽的方法 2.4、文件Read与Write-QFile类 2…...
【前端】【nuxt】几种在 Nuxt 客户端使用console的方式
方法1:在Vue生命周期钩子中使用 只在客户端执行的钩子(如mounted)中打印: export default {mounted() {console.log(仅在客户端显示, this.$route.path)} }方法2:通过环境判断 使用process.client判断当前环境&…...
安装 ubuntu 2404 LTS 服务器 设置 服务器名称
安装 ubuntu服务器 设置 服务器名称 hostname 打开终端(Terminal),通过快捷键CtrlAltT或在应用程序中搜索"终端"来打开;在终端中输入以下命令:hostname,然后按下回车键即可查看本机服务器名称。…...
C语言一维数组
学习任何数据结构,都可以分为三个主要步骤: 了解基本概念:首先,我们需要理解数据结构的基本概念。以数组为例,首先要知道什么是数组,数组的定义是什么。数组是一种存储固定大小的元素集合的数据结构,它的元素类型是统一的,且通过索引访问。 了解数组的构造和内存分布:…...
霍夫变换法是基于传统视觉特征的道路车道线检测算法中的一种经典方法
霍夫变换法是基于传统视觉特征的道路车道线检测算法中的一种经典方法,以下是对它的详细介绍: 基本原理 霍夫变换的基本思想是将图像空间中的点映射到参数空间中,通过在参数空间中寻找峰值来确定图像中特定形状的参数。在车道线检测中&#…...
静态时序分析:SDC约束命令set_ideal_latency详解
相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 当使用set_ideal_network命令将当前设计中的一组端口或引脚标记为理想网络源后,理想属性会沿着组合逻辑进行传播,理想网络中的线网和单元…...
DeepSeek引领端侧AI革命,边缘智能重构AI价值金字塔
目录 一、AI从“技术炫耀”到“价值兑现” 二、边缘侧部署:从技术挑战到商业必然 三、小规模模型:精度与效率的再平衡 四、Coovally的前瞻性:降低边缘AI开发门槛 五、生产级部署:跨越从实验室到车间的鸿沟 六、未来演进&…...
完整例子和调用关系qt OpenGL
项目结构 首先,你需要在 Qt 项目中创建一个类,继承自 QOpenGLWidget 来进行 OpenGL 渲染。文件结构如下: - main.cpp - MyOpenGLWidget.h - MyOpenGLWidget.cpp - vertex_shader.glsl - fragment_shader.glsl 1. main.cpp 这是 Qt 项目的入口…...
SpringBoot缓存抽象:@Cacheable与缓存管理器配置
文章目录 引言一、SpringBoot缓存抽象概述二、Cacheable注解详解2.1 Cacheable的关键属性 三、缓存管理器配置四、自定义键生成策略五、缓存同步与失效策略六、SpringBoot缓存最佳实践总结 引言 缓存是提升应用性能的关键技术,SpringBoot提供了强大的缓存抽象层&am…...
环路广播风暴演示图
以下是环路广播风暴的演示图及其说明: 环路广播风暴演示图 ----------------- ----------------- | Switch A | | Switch B | | | | | | [Port1]--------------------------[Port1] |…...
【webrtc debug tools】 rtc_event_log_to_text
一、rtc_event_log 简介 在学习分析webrtc的过程中,发现其内部提供了一个实时数据捕获接口RtcEventLog。通过该接口可以实时捕获进出webrtc的RTP报文头数据、音视频配置参数、webrtc的探测数据等。其内容实现可参考RtcEventLogImpl类的定义。其文件所在路径 loggin…...
【统计至简】【古典概率模型】联合概率、边缘概率、条件概率、全概率
联合概率、边缘概率、条件概率 联合概率边缘概率条件概率全概率 一副标准扑克牌有 54 张,包括 52 张常规牌(13 个点数,每个点数有 4 种花色)和 2 张王(大、小王)。我们从中随机抽取一张牌,定义以…...
Linux 字符设备驱动实例
编写驱动程序,并将内核模块加载到内核中,等待被用户程序调用。 在控制台中借助第一步申请到的设备号,使用 mknod 命令创建一个设备节点,并拟一个设备名称。 在用户程序中,使用 open 打开第二步中的设备名称ÿ…...
【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器---tinyEasyMuduoWebServer
【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器—tinyEasyMuduoWebServer csdn项目: 原文链接:https://blog.csdn.net/weixin_45178775/article/details/122257814 github链接:https://github.com/wyewyewye/tinyEasyMuduo…...
STM32驱动OLED屏幕全解析:从原理到温度显示实战(上) | 零基础入门STM32第五十三步
主题内容教学目的/扩展视频OLED显示屏重点课程电路原理,手册分析,驱动程序。初始化,清屏,ASCII字库,显示分区。调用显示函数。做带有加入图形和汉字显示的RTC时钟界面。讲字库的设计原理。 师从洋桃电子,杜…...
2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析
更多真题在线练习系统:历年真题在线练习系统 一、单选题 1、以下表达式的值为True的是?( ) A. all( ,1,2,3) B. any([]) C. bool(abc) D. divmod(6,0) 正确答案:C 答案解析:A和B选项,Fal…...
苍穹外卖实战附源码-DAY1
一、打开项目的Nginx 1.通过nginx成功打开包装后的前端网页 二、导入sky的数据库 sky.sql 数据 CREATE DATABASE IF NOT EXISTS sky_take_out ; USE sky_take_out;DROP TABLE IF EXISTS address_book; CREATE TABLE address_book (id bigint NOT NULL AUTO_INCREMENT COMMEN…...
Spring 框架学习
技术体系结构 总体技术体系 单一架构 一个项目,一个工程,导出为一个 war 包,在一个 Tomcat 上运行,也叫 all in one。 单一架构,项目主要应用技术框架为:Spring、SpringMVC 、Mybatis。 分布式架构 一个…...
股票交易所官方api接口有哪些?获取和使用需要满足什么条件
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...
NAT NAPT
NAT NAT(Network Address Translation,网络地址转换) 主要用于在不同网络(如私有网络和公共互联网)之间进行 IP 地址转换,解决IP 地址短缺问题,并提供一定的安全性。 IPv4 地址是 32 位…...
调优案例一:堆空间扩容提升吞吐量实战记录
📝 调优案例一:堆空间扩容提升吞吐量实战记录 🔧 调优策略:堆空间扩容三部曲 # 原配置(30MB堆空间) export CATALINA_OPTS"$CATALINA_OPTS -Xms30m -Xmx30m"# 新配置(扩容至120MB&am…...
对比 Vue2 选项式 API 与 Vue3 setup 语法
对比 Vue2 选项式 API 与 Vue3 setup 语法 1. 代码组织方式 Vue2 选项式 API 通过独立的选项(data, methods, computed, watch, 生命周期钩子等)组织代码。 export default {data() {return { count: 0 };},methods: {increment() { this.count; }},mou…...
ragflow-组件可视化工具 es默认用户名elastic
以下是针对各个后台组件的可视化工具及配置指南,基于您提供的环境变量和端口设置: 1. Elasticsearch 可视化工具: Kibana(官方推荐)、Cerebro、ElasticHQ访问方式: Kibana(集成管理): URL: http://<主机…...
MATLAB代码开发实战:从入门到高效应用
一、MATLAB生态系统的核心优势 (扩展原有内容,增加行业数据) MATLAB在全球工程领域的市场占有率已达67%(2024年IEEE统计),其核心优势体现在: 矩阵运算速度比传统编程快3-5倍包含22个专业工具箱…...
GStreamer —— 2.18、Windows下Qt加载GStreamer库后运行 - “播放教程 6:音频可视化“(附:完整源码)
运行效果 介绍 GStreamer 带有一组将音频转换为视频的元素。他们 可用于科学可视化或为您的音乐增添趣味 player 的本教程展示了: • 如何启用音频可视化 • 如何选择可视化元素 启用音频可视化实际上非常简单。设置相应的标志,当纯音频流为 found&#…...
50个经典的python库
本文整理了50个可以迅速掌握的经典Python库,了解它们的用途,无论你是刚踏上编程之路,还是希望在Python的世界里更加深入,这50个库都能帮助你快速起飞。 1. Taipy Taipy是一个开源Python库,用于轻松的端到端应用程序开…...
PostgreSQL学习笔记:PostgreSQL vs MySQL
PostgreSQL 和 MySQL 都是广泛使用的关系型数据库管理系统,它们有以下一些对比: 一、功能特性 1. 数据类型支持 PostgreSQL:支持丰富的数据类型,包括数组、JSON、JSONB、范围类型、几何类型等。对于复杂数据结构的存储和处理非…...
【CentOS】搭建Radius服务器
目录 背景简介:Radius是什么?Radius服务器验证原理搭建Radius服务器环境信息yum在线安装配置FreeRADIUS相关文件clients.conf文件users文件重启服务 验证 参考链接 背景 在项目中需要用到Radius服务器作为数据库代理用户的外部验证服务器,做…...
C#枚举(Enum)详解
在 C# 中,枚举(Enum) 是一种值类型,用于定义一组命名的常量值,提高代码的可读性和可维护性。以下是枚举的核心概念、用法和最佳实践: 1. 枚举的核心特性 类型安全:避免使用魔法数字&…...
DeepSeek进阶应用(一):结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)
🌟前言: 在软件开发、项目管理和系统设计等领域,图表是表达复杂信息的有效工具。随着AI助手如DeepSeek的普及,我们现在可以更轻松地创建各种专业图表。 名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者&…...
Golang | Gin(简洁版)
文章目录 安装使用RESTful API响应页面获取请求参数路由讲解中间件 安装使用 Gin 是一个 golang 的微框架,封装比较优雅,API 友好,源代码比较明确。具有快速灵活,容错方便等特点。其实对于 golang 而言,web 框架的依赖…...
【C++ 系列文章 基础 01 -- std::string 与 fmt::format】
文章目录 Overview1. C 中的 std::string 简介2. fmt::format 格式化函数简介3. 示例代码解析4. 应用场景与优势2. std::string 与 fmt::format 简介std::stringfmt::format 3. 代码解析3.1 格式化字符串生成3.2 调用函数 cmd_handler3.3 返回 id_code 4. 代码整体流程与应用场…...
有效封装一个 WebSocket 供全局使用
前言 在现代 Web 应用中,实时通信已经成为越来越重要的一部分。而 WebSocket 技术的出现,使得实时通信变得更加高效和便捷。 WebSocket 协议是一种基于 TCP 协议的双向通信协议,它能够在客户端和服务器之间建立起持久性的连接,从…...
使用expect工具实现远程批量修改服务器密码
使用expect工具实现远程批量修改服务器密码 linux服务器安装Expect工具 1、首先查看系统中是否有安装expect。 # whereis expect 2、Expect工具是依赖tcl的,需要先安装tcl #wget https://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz …...