当前位置: 首页 > news >正文

三、Docker 集群管理与应用

(一)项目案例

1、准备主机

(1)关闭防火墙,或者开放TCP端口2377(用于集群管理通信)、TCP/UPD端口7946(用于节点之间的通信)、UDP端口4789(用于overlay网络流量监控)

(2)安装docker

(3)设置静态ip

(4)修改主机名

2、创建Swarm集群

(1)主节点创建新的Swarm集群

[root@manager01 ~]# docker swarm init --advertise-addr 192.168.75.129
Swarm initialized: current node (y8rm15jh2qs5e3qsh6n13cxfh) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

(2)第一个工作节点加入集群

[root@worker01 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377

(3)第二个工作节点加入集群

[root@worker02 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377
This node joined a swarm as a worker.

(4)查看集群节点信息

[root@manager01 ~]# docker info

3、查看节点信息

[root@manager01 ~]# docker node inspect worker01 --pretty

注:

(1)STATUS列表示节点当前状态,Ready表示正常,Down表示已宕机

(2)AVAILABILITY列表示该节点的可用性状态,有3种状态

  • 活动(Active):调度器能够安排任务到该节点。
  • 暂停(Pause):调度器不能安排任务到该节点。但是已经存在的任务会继续运行
  • 候选者(Drain):调度器不能安排任务到该节点,且会停止已存在的任务,并将这些任务分配到其他处于活动状态的节点中。

(3)MANAGER STATUS列表示管理器状态,共有以下4中状态

  • 领导者(Leader):为Swarm集群做出所有管理和编排的主要管理器节点
  • 候选者(Reachable):如果领导节点变为不可用,则候选者节点有资格成为新的领导者节点。
  • 不可用(Unavailable):该节点不能和其他管理节点产生任何联系,这种情况下,应该添加一个新的管理器节点到集群中,或者将一个工作节点升级为管理器节点。
  • 空白:表明该节点是工作者节点

4、让节点脱离集群

(1)在工作节点执行,使worker02脱离集群,要在worker02主机上执行

[root@worker02 ~]# docker swarm leave

(2)在主节点查看worker02的信息,并删除该节点

[root@manager01 ~]# docker node ls
ID                            HOSTNAME    STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
y8rm15jh2qs5e3qsh6n13cxfh *   manager01   Ready     Active         Leader           23.0.2
f0aw8dor6hlkth9kzy4m3k0vt     worker01    Ready     Active                          23.0.2
xjpsue874nrm0hm3tw39mvwhl     worker02    Down      Active                          23.0.2
[root@manager01 ~]# docker node rm worker02
worker02
[root@manager01 ~]#

5、让节点以管理器角色加入集群

(1)获取加入管理角色的命令

[root@manager01 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-3davlb9zjkr6gvvkrtu8mz3w2 192.168.75.129:2377[root@manager01 ~]# 

(2)worker02加入集群的管理节点

[root@worker02 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-3davlb9zjkr6gvvkrtu8mz3w2 192.168.75.129:2377

(3)查看集群节点信息

[root@manager01 ~]# docker node ls
ID                            HOSTNAME    STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
y8rm15jh2qs5e3qsh6n13cxfh *   manager01   Ready     Active         Leader           23.0.2
f0aw8dor6hlkth9kzy4m3k0vt     worker01    Ready     Active                          23.0.2
pgm7vq62akim0ms9kz8duguru     worker02    Ready     Active         Reachable        23.0.2
[root@manager01 ~]# 

6、降级和升级节点

(1)在管理节点降级为工作节点,在管理节点执行

[root@worker02 ~]# docker node demote worker02

(2)在工作节点升级为管理节点,在工作节点执行

[root@worker02 ~]# docker node promote worker02

(二)Docker Swarm 集群部署和管理服务

1、将服务部署到Swarm集群中

(1)创建服务

# docker service create --name swarm-web01 nginx

(2)使用docker service ls 命令查看正在运行的服务列表

# docker service ls
ID             NAME          MODE         REPLICAS   IMAGE          PORTS
r5wx100nb2t6   swarm-web01   replicated   1/1        nginx:latest 
REPLICAS列为m/n:n代表副本数,m代表正在运行的副本

(3)使用 docker service ps 命令查看显示任务列表信息,查看每个副本运行节点的状态信息

[root@master01 ~]# docker service ps swarm-web01

(4)使用docker service inspect 显示有关服务的详细信息,–pretty选项表示易于阅读的格式

[root@master01 ~]# docker service inspect --pretty swarm-web01ID:		r5wx100nb2t6vrtdsobnc1deg     #服务ID
Name:		swarm-web01               #服务名称
Service Mode:	Replicated            #服务模式,这里为复制模式Replicas:	1                         #副本数
Placement:                            #服务配置
UpdateConfig:Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Update order:      stop-first
RollbackConfig:                       #回滚配置Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Rollback order:    stop-first
ContainerSpec:                        #容器定义Image:		nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Init:		false
Resources:
Endpoint Mode:	vip                   #端点模式

2、伸缩服务

(1)增加服务副本数
# docker service scale  swarm-web01=5 

查看任务列表(管理节点)

# docker service ps swarm-web01
(2)减少文件副本数
# docker service scale swarm-web01=3

3、删除swarm服务

# docker service rm swarm-web01

4、对服务的任务进行滚动更新

(1)部署nginx到集群中,并配置8秒的更新延迟策略
# docker service create --replicas 3 --name my-web01 --update-delay 8s nginx

–update-delay 选项用于配置更新一个或多个任务之间的延迟时间,时间可以使用的单位有秒(s)、分钟(min)或小时(h)、还可以组合使用更多单位的时间,如5min30s,表示延迟5分钟30秒

默认情况下,调度器一次更新一个任务,可以通过 --update-parallelism 选项来配置调度器同事(并发)更新的最大服务任务数。

默认情况下,当对单个任务的更新完成并返回运行状态时,调度器会调度另一个任务来更新,直到所有任务被更新。如果在任务更新期间的任何时间都返回失败(FAILED)状态,则调度器会暂停更新。可以使用 --update-failure-action 选项来控制 docker service create 或 docker service update 命令的行为。

(2)查看my-web01服务的详细信息
[root@master01 ~]# docker service inspect my-web01 --prettyID:		c5k770ixaswchg3p96lsh9g3p
Name:		my-web01
Service Mode:	ReplicatedReplicas:	3
Placement:
UpdateConfig:                     #更新配置Parallelism:	1                 #同时更新的最大任务数Delay:		8s                    #更新之间的延迟操作时间On failure:	pause             #更新失败后的操作Monitoring Period: 5s            #每个任务更新后的延迟时间Max failure ratio: 0             #更新期间容许的失败率Update order:      stop-first    #更新顺序
RollbackConfig:Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Rollback order:    stop-first
ContainerSpec:                    #容器定义Image:		nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Init:		false
Resources:
Endpoint Mode:	vip
(3)使用 docker service update 命令更新容器镜像
# docker service update --image nginx:latest my-web01
(4)手动回滚到前一个版本
# docker service update --rollback my-web01

(三)配置和管理Docker Swarm网络

1、创建自定义overlay网络

# docker network create -d overlay nginx-net01

查看创建的overlay网络

# docker network ls

2、将swarm服务连接到自定义overlay网络

部署服务时,如果不使用 --network 选项显示声明,则服务将连接到默认的ingress网络,在生产环境下,建议使用自定义 overlay 网络。

(1)创建服务并连接到 nginx-net01 网络

# docker service create --name my-nginx01 --publish published=8000,target=80 --replicas=3 --network nginx-net01 nginx

(2)查看该服务的详细信息

[root@master01 ~]# docker service inspect my-nginx01 --prettyID:		qxmmj8przpjlrdulxm57sz1l6
Name:		my-nginx01
Service Mode:	ReplicatedReplicas:	3
Placement:
UpdateConfig:Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Update order:      stop-first
RollbackConfig:Parallelism:	1On failure:	pauseMonitoring Period: 5sMax failure ratio: 0Rollback order:    stop-first
ContainerSpec:Image:		nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Init:		false
Resources:
Networks: nginx-net01 
Endpoint Mode:	vip
Ports:PublishedPort = 8000         #发布端口Protocol = tcp              #发布协议TargetPort = 80             #目标端口PublishMode = ingress       #发布模式

注:自定义 overlay 网络的服务发布模式仍然为ingress,即通过路由网发布。

(2)为 swarm 服务更换overlay 网络连接。

创建新的网络

# docker network create -d overlay nginx-net100

为服务添加overlay网络

# docker service update --network-add nginx-net100 my-nginx01

(3)overlay 网络在工作节点上会随着服务的删除而自动删除,但在管理器节点上并不会自动删除,在管理器节点上一次执行以下命令删除上述服务和网络

# docker service rm my-nginx01
# docker network rm nginx-net01 nginx-net100

3、验证swarm服务发布模式

  • ipgress:路由网模式,不管该节点有没有部署该服务,都能通过该节点访问该服务
  • host:主机模式,如果该节点没有部署该服务,这 curl http://未部署节点ip:80 无法访问

(1)创建2个副本的服务,并以路由网模式对外发布端口

# docker service create --name my-nginx01 --publish published=8088,target=80 --replicas 2 nginx

(2)访问worker02 节点上的服务(目前在worker02 节点未运行该服务),发现可以访问

[root@master01 ~]# curl http://192.168.65.141:8088

(3)创建2个副本的服务,并以主机模式对外发布端口

# docker service create --name my-nginx02 --publish published=8080,target=80,mode=host --replicas 2 nginx

(4)查看服务的发布模式

[root@master01 ~]# docker service inspect my-nginx02 --pretty
...
...
Ports:PublishedPort = 8080Protocol = tcpTargetPort = 80PublishMode = host   #发布模式

(5)访问worker02 节点上的服务(目前在worker02 节点未运行该服务),发现访问被拒绝

[root@master01 ~]# curl http://192.168.65.141:8080
curl: (7) Failed connect to 192.168.65.141:8080; 拒绝连接

相关文章:

三、Docker 集群管理与应用

(一)项目案例 1、准备主机 (1)关闭防火墙,或者开放TCP端口2377(用于集群管理通信)、TCP/UPD端口7946(用于节点之间的通信)、UDP端口4789(用于overlay网络流…...

Spring 注解解析

一、Import 1、核心作用 Import 是 Spring 模块化配置的核心注解,用于将外部配置类、组件或动态逻辑导入当前 Spring 上下文。其核心功能包括: 配置类聚合:整合多个分散的 Configuration 类,解决大型项目中配置分散的问题。动态…...

DeepSeek-R1思路训练多模态大模型-Vision-R1开源及实现方法思路

刚开始琢磨使用DeepSeek-R1风格训练多模态R1模型,就看到这个工作,本文一起看看,供参考。 先提出问题,仅靠 RL 是否足以激励 MLLM 的推理能力? 结论:不能,因为如果 RL 能有效激励推理能力&#…...

mysql select distinct 和 group by 哪个效率高

在有索引的情况下,SELECT DISTINCT和GROUP BY的效率相同;在没有索引的情况下,SELECT DISTINCT的效率高于GROUP BY‌。这是因为SELECT DISTINCT和GROUP BY都会进行分组操作,但GROUP BY可能会进行排序,触发filesort&…...

阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台

阿里云操作系统控制台评测:国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展,企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具,正逐步成为企业高效管理…...

Linux基础开发工具—vim

目录 1、vim的概念 2、vim的常见模式 2.1 演示切换vim模式 3、vim命令模式常用操作 3.1 移动光标 3.2 删除文字 3.3 复制 3.4 替换 4、vim底行模式常用命令 4.1 查找字符 5、vim的配置文件 1、vim的概念 Vim全称是Vi IMproved,即说明它是Vi编辑器的增强…...

11 应用层的域名知识点

一、DNS 1、理解 定义:DNS(Domain Name System,域名系统)是互联网的一项核心服务,它将人类可读的域名(也叫网址,如 www.example.com)转换为机器可读的IP地址(如 192.0.…...

5-24 色彩与风格——T2IA自适应

前言: 上一节我们介绍了ControlNet中的inpaint局部重绘 主要介绍ControlNet中的T2IA自适应。 色彩风格的参考和借鉴能力,有点类似于5-17 reference参考图 或者 5-16 画面风格迁移-shuffle洗牌 。当然在硬件的要求,软件的算法实现和使用方式…...

JAVA-Thread类实现多线程

引言: 本章博客涉及进程线程内容,如果不了解的可以看:什么是进程线程-CSDN博客 线程是操作系统的概念,操作系统提供的API供程序员使用操作。但是不同的操作系统(Winodws、Linux、Unix……差别很大),但是做为JAVA程序员就不需要担心…...

顺序表,单链表,双链表,循环链表(01星球)

文章目录 数据结构前导------C语言复习程序为什么要被编译器编译之后才能运行编译器把C语言程序转换成可以执行的机器码的过程做了什么宏定义typedef 关键字全局变量和局部变量常量字符的输入输出运算符冯诺依曼架构存储器容量数据类型指针指针本质为什么需要指针 数组数组指针…...

代码社区开源协议

开源协议是一种法律文件,用于规定开源软件的使用、修改和分发条件。它平衡了开发者和使用者的权益,同时推动开放协作与技术创新。以下是常见的开源协议及其特点和适用场景: 常见开源协议列表及介绍 1. MIT License 特点:非常宽…...

[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版),分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…...

树莓派:更新源

发行版本 Debian 一直维护着至少三个发行版本:“稳定版(stable)”,“测试版(testing)”和“不稳定版(unstable)”。 发行版目录 下一代 Debian 正式发行版的代号为 bullseye — 发布…...

树与二叉树的遍历

我们平时用的树都是二叉树 一、一些基础概念 1. 树就是一种:一对多的数据结构。树离不开递归,因为“树”就是“树”中有“树”。 二叉树就是 :空树 或者 每个结点的子结点个数小于等于2。 满二叉树: 除叶子结点外所有结点的…...

Web基础:HTML快速入门

HTML基础语法 HTML(超文本标记语言) 是用于创建网页内容的 标记语言,通过定义页面的 结构和内容 来告诉浏览器如何呈现网页。 超文本(Hypertext) 是一种通过 链接(Hyperlinks) 将不同文本、图像…...

异常(8)

今天补充一些异常的细节,帮助大家更好的理解异常. 注:关于异常的处理方式 异常的种类有很多,我们要根据不同的业务场景来决定. 对于比较严重的问题(例如和算钱相关的场景),应该让程序直接崩溃,防止造成更严重的结果 对于不太严重的问题(大多数场景),可以记录错误日志,并通过…...

平时作业

java作业 package zuoye; ​ public class zuoye02 {public static int Random(int n) {return (int)(n * Math.random());}public static void main(String[] args) {int n 100;//System.out.println(Random(n));int[]random new int[50];for(int i 0; i <50; i) {rand…...

宇树人形机器人开源模型

1. 下载源码 https://github.com/unitreerobotics/unitree_ros.git2. 启动Gazebo roslaunch h1_description gazebo.launch3. 仿真效果 H1 GO2 B2 Laikago Z1 4. VMware: vmw_ioctl_command error Invalid argument 这个错误通常出现在虚拟机环境中运行需要OpenGL支持的应用…...

**ResNet-SE + MFCC** 训练框架,包括 **数据加载、训练流程**,以及 **混淆矩阵** 可视化示例

1. 依赖库安装 如果你还没安装相关库&#xff0c;请先执行&#xff1a; pip install torch torchaudio torchvision scikit-learn matplotlib tqdm2. 数据加载 这里假设你有一个 音频分类数据集&#xff0c;其文件结构如下&#xff1a; dataset/ │── train/ │ ├──…...

Golang | 每日一练 (5)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Golang | 每日一练 (5)题目参考答案线程与协程线程切换…...

搞定python之四----函数、lambda和模块

本文是《搞定python》系列专栏的第四篇&#xff0c;通过代码演示列python自定义函数、lambda和模块的用法。本文学习完成后&#xff0c;python的基础知识就完了。后面会学习面向对象的内容。 1、自定义函数 # 测试python自定义函数# 有参数&#xff0c;没有返回值 def say_he…...

算法分享———进制转换通用算法

模板一&#xff1a;任意&#xff08;K&#xff09;进制转10进制 将k进制的x转化为10进制的x ll x0; for(int i1;i<n;i) { xx*ka[i]; } cout<<x<<endl;模板二&#xff1a;十进制转m进制 ll x; cin>>x; while(x) { a[cnt]x%k; x/k; } reverse(a1,a1cnt);…...

Proser:新增指令批次发送功能

Proser中的批次发送功能&#xff0c;是通过指令集进行管理的。 起初设计时&#xff0c;希望指令集窗口自身包含指令的编辑功能&#xff0c;这部分功能与传输窗口的功能重合度高&#xff0c;所以设计上进行了简化&#xff0c;由用户在传输窗口输入指令&#xff0c;添加到指令集窗…...

rpc grpc

RPC Remote Procedure Call&#xff0c;远程过程调用&#xff0c;是用来屏蔽分布式计算中的各种调用细节&#xff0c;使得调用远端的方法就像调用本地的一样。 客户端与服务端沟通的过程 客户端发送数据(以字节流的方式)&#xff1b;&#xff08;编码&#xff09;服务端接受…...

AI赋能铁道安全巡检探索智能巡检新时代,基于YOLOv7全系列【tiny/l/x】参数模型开发构建铁路轨道场景下轨道上人员行为异常检测预警系统

在交通强国的战略引领下&#xff0c;中国铁路网如巨龙般纵贯大江南北&#xff0c;将五湖四海紧密相连&#xff0c;极大地促进了人员出行与物流运输的便捷性。然而&#xff0c;随着铁路线路的不断扩展&#xff0c;管理层面的安全问题也日益凸显。历史上&#xff0c;多起与铁路相…...

Kubernetes安全:集群保护的最佳实践

随着容器化技术的广泛应用&#xff0c;Kubernetes已经成为企业IT基础设施的重要组成部分。然而&#xff0c;Kubernetes集群的复杂性也带来了独特的安全挑战。如何在动态变化的云原生环境中保障集群的安全性&#xff0c;成为每一位运维工程师和安全专家关注的焦点。本文将详细探…...

R+VIC模型融合实践技术应用及未来气候变化模型预测

在气候变化问题日益严重的今天&#xff0c;水文模型在防洪规划&#xff0c;未来预测等方面发挥着不可替代的重要作用。目前&#xff0c;无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然&#xff0c;这些软件有各自的优点&#xff1b;但是&am…...

前端开发:混合技术栈的应用

目录 前言 混合技术栈的优势 移动端开发嵌入H5 1、场景描述 2、实现方法 3、源码示例 OC项目嵌入Swift的使用 1、场景描述 2、实现方法 3、源码示例 HarmonyOS开发中嵌入WebView 1、权限配置 2、加载网页 结束语 前言 随着技术的不断进步&#xff0c;软件开发领域…...

Machine Learning: 十大基本机器学习算法

机器学习算法分类&#xff1a;监督学习、无监督学习、强化学习 基本的机器学习算法&#xff1a; 线性回归、支持向量机(SVM)、最近邻居(KNN)、逻辑回归、决策树、k平均、随机森林、朴素贝叶斯、降维、梯度增强。 机器学习算法大致可以分为三类&#xff1a; 监督学习算法 (Sup…...

react实现一个列表的拖拽排序(react实现拖拽)

需求场景&#xff1a; 我的项目里需要实现一个垂直列表的拖拽排序&#xff0c;效果图如下图&#xff1a; 技术调研&#xff1a; 借用antd Table实现&#xff1a; 我的项目里使用了antd&#xff0c;antd表格有一个示例还是挺像的&#xff0c;本来我想用Table实现&#xff0…...

通过mybatis的拦截器对SQL进行打标

1、背景 在我们开发的过程中&#xff0c;一般需要编写各种SQL语句&#xff0c;万一生产环境出现了慢查询&#xff0c;那么我们如何快速定位到底是程序中的那个SQL出现的问题呢&#xff1f; 2、解决方案 如果我们的数据访问层使用的是mybatis的话&#xff0c;那么我们可以通过…...

【MySQL】MySQL服务器——mysqld

1.MySQL服务器 是名为 mysqld 的数据库服务器程序&#xff0c;和“主机”&#xff08;host&#xff09;不一样是一个多线程的单进程管理对磁盘和内存中数据库的访问支持并发的客户端连接支持多个存储引擎&#xff0c;常见的存储引擎包括InnoDB、MyISAM、Memory、Archive支持事…...

JAVA面试_进阶部分_Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)

在什么时候&#xff1a; 首先需要知道&#xff0c;GC又分为minor GC 和 Full GC&#xff08;major GC&#xff09;。Java堆内存分为新生代和老年代&#xff0c;新生代 中又分为1个eden区和两个Survior区域。 一般情况下&#xff0c;新创建的对象都会被分配到eden区&#xff…...

【探秘海洋伤痕】海洋环境污染损害的警世启示

在地球这个蓝色星球上&#xff0c;广袤无垠的海洋孕育了无数生命&#xff0c;支撑着地球的生态平衡与人类的生存发展。然而&#xff0c;随着工业化和现代化的加速&#xff0c;海洋环境遭受的伤害日益严重&#xff0c;海洋环境污染损害成为了我们必须直面的严峻问题。本文将带您…...

过滤器(Filter)与拦截器(Interceptor)

在Java Web开发中&#xff0c;**拦截器&#xff08;Interceptor&#xff09;和过滤器&#xff08;Filter&#xff09;**都用于在请求处理过程中拦截和处理HTTP请求或响应&#xff0c;但它们有不同的应用场景和工作原理。下面将详细解释它们的区别&#xff0c;并提供代码演示。 …...

智慧城市运行管理服务平台建设方案

随着城市化的快速发展&#xff0c;城市运行管理面临着前所未有的挑战。智慧城市的概念应运而生&#xff0c;旨在通过信息技术手段提升城市管理效率和居民生活质量。智慧城市运行管理服务平台作为智慧城市建设的核心组成部分&#xff0c;其建设方案的科学性和前瞻性至关重要。 …...

Java是怎么解决并发问题的?

Happens-Before规则(前言) Happens-Before规则 是 Java 内存模型&#xff08;JMM&#xff09;中用于定义线程间操作可见性和有序性的一种规范。它的核心目的是&#xff1a;确保一个线程的某些操作结果对其他线程是可见的&#xff0c;并且这些操作在时间上的顺序不会被重排序破…...

使用 Chrome Flags 设置(适用于 HTTP 站点开发)

使用 Chrome Flags 设置&#xff08;适用于 HTTP 站点开发&#xff09; 在 Chrome 地址栏输入&#xff1a;chrome://flags/在搜索框输入 “Insecure origins” 或 “Allow invalid certificates”。找到 “Insecure origins treated as secure” 选项&#xff08;或者 #allow-…...

解锁 AI 开发的无限可能:邀请您加入 coze-sharp 开源项目

大家好&#xff01;今天我要向大家介绍一个充满潜力的开源项目——coze-sharp&#xff01;这是一个基于 C# 开发的 Coze 客户端&#xff0c;旨在帮助开发者轻松接入 Coze AI 平台&#xff0c;打造智能应用。项目地址在这里&#xff1a;https://github.com/zhulige/coze-sharp&a…...

【Swift】面向协议编程之HelloWorld

定义一个协议(protocol)&#xff0c;swift 中可以对protocol 进行扩展(extension)通过协议的扩展可以对函数有默认的实现 protocol Sleepable {func sleep() } protocol Eatable {func eat() } extension Eatable {func eat() {print("eat food")} }在类(class)或结…...

图神经网络学习笔记—纯 PyTorch 中的多 GPU 训练(专题十二)

对于许多大规模的真实数据集,可能需要在多个 GPU 上进行扩展训练。本教程将介绍如何通过 torch.nn.parallel.DistributedDataParallel 在 PyG 和 PyTorch 中设置多 GPU 训练管道,而无需任何其他第三方库(如 PyTorch Lightning)。请注意,此方法基于数据并行。这意味着每个 …...

Linux云计算SRE-第二十周

完成ELK综合案例里面的实验&#xff0c;搭建完整的环境 一、 1、安装nginx和filebeat&#xff0c;配置node0(10.0.0.100)&#xff0c;node1(10.0.0.110)&#xff0c;node2(10.0.0.120)&#xff0c;采用filebeat收集nignx日志。 #node0、node1、node2采用以下相同方式收集ngin…...

springcloud gateway搭建及动态获取nacos注册的服务信息信息

前言 Spring Cloud Gateway 通过集成 Nacos 服务发现&#xff0c;可以动态获取注册到 Nacos 的微服务实例信息&#xff0c;并根据服务名&#xff08;Service Name&#xff09;自动生成路由规则或手动配置路由规则&#xff0c;实现请求的动态路由和负载均衡。 一个最简单的网关就…...

SSM基础专项复习6——Spring框架AOP(3)

系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架&#xff08;1&#xff09;-CSDN博客 3、SSM基础专项复习3——Spring框架&#xff08;2&#xff09;-CSDN博客 4、SSM基础专项复习4——Maven项目管理工具&#xff08;1&#xff…...

【嵌入式linux】网口和USB热插拔检测

在Linux常常需要对网口和USB等外设接口进行插拔检测&#xff0c;从而执行部分初始化操作。下面简要介绍Linux的Netlink机制&#xff0c;并在C程序中使用Linux的Netlink机制完成网口和USB口插拔检测。 Netlink 是 Linux 内核与用户空间进程通信的一种机制&#xff0c;主要用于内…...

C++(13)—类和对象(中) ③拷贝构造函数

文章目录 一、拷贝构造函数的基本概念1.1 什么是拷贝构造函数&#xff1f;1.2 拷贝构造函数的调用场景 二、拷贝构造函数的核心特性2.1 拷贝构造函数的参数2.2 默认拷贝构造函数 三、深拷贝与浅拷贝3.1 浅拷贝的问题 四、拷贝构造函数的实际应用4.1 何时需要显式定义拷贝构造函…...

【GPT入门】第17课 RAG向量检索分类、原理与优化

【GPT入门】第16课 RAG向量检索分类、原理与优化 1.向量检索概念1.1 文本检索的两类方式1.2 向量的定义1.3 文本向量(Text Embeddings)1.4 文本向量如何得到1.5 向量间相似度计算1.6 向量数据库功能对比1.7 open ai发布的两个向量模型2.向量数据库1.8 向量检索的优化3.检索后…...

Operator <=> (spaceship operator)

operator <>动机 在C20以前定义比较运算符&#xff1a;其他比较运算符基于<和实现 struct Type {int value;// 相等运算符friend bool operator(const Type& a, const Type& b) {return a.value b.value;}// 不等运算符friend bool operator!(const Type&a…...

队列的简单例题

题目如下 模拟队列 首先你要明白队列的话 只有队尾才能进行新增&#xff0c;也就是入队 只有队首才能出队&#xff0c;也就是删除 队首队尾指针一开始默认都是0 相当于队列中一开始是有一个元素的就是 0的位置 队首指针head0 队尾指针tail0 1.入队也就是队尾要先赋值&#xf…...

Calibre-Web-Automated:打造你的私人图书馆

有没有小伙伴在工作、学习或生活中喜欢保存一些书籍或PDF文件&#xff0c;结果过一段时间想找的时候却怎么也找不到&#xff0c;最后只能无奈放弃&#xff1f;你是否已经厌倦了手动管理电子书的繁琐&#xff1f;是否梦想拥有一个私人图书馆&#xff0c;随时随地都能轻松访问自己…...