Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/5)

博主介绍:Java领域优质创作者,博客之星城市赛道TOP20专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。

🍅文末获取源码下载地址🍅

👇🏻 精彩专栏推荐订阅👇🏻 欢迎点赞收藏评论拍砖........

【Docker Swarm总结】《容器技术 Docker+K8S专栏》✅

【uniapp+uinicloud多用户社区博客实战项目】《完整开发文档-从零到完整项目》✅

【Springcloud Alibaba微服务分布式架构 | Spring Cloud】《系列教程-更新完毕》✅

【SpringSecurity-从入门到精通】《学习完整笔记-附(完整demo源码)》✅

【从零开始Vue项目中使用MapboxGL开发三维地图教程】《系列教程-不定时更新》✅

【Vue.js学习详细课程系列】《共32节专栏收录内容》✅

感兴趣的可以先收藏起来相关问题都可以给我留言咨询,希望帮助更多的人。


目录

1、swarm 理论基础

1.1 简介

1.2 节点架构

1.3 服务架构

1.4 服务部署模式

2、swarm 集群搭建

2.1 需求

​2.2 克隆主机

2.3 启动5个docker宿主机

2.4 查看 swarm 激活状态

 2.5 关闭防火墙

2.6 swarm 初始化

2.7 添加 worker 节点

2.8 添加 manager 节点

3、swarm 集群维护

3.1 退出 swarm 集群

3.2 swarm 自动锁定

3.3 注意事项(重点)

4、 swarm 节点维护

4.1 角色转换

4.2 节点标签

4.3 节点删除

5、 swarm 安全(PKI)

5.1 TLS 安全保障

5.2 CA 数字证书轮换

6 、manager 集群容灾

6.1 热备容灾

6.2 容灾能力

6.3 容灾模拟

7 、service 创建

7.1 创建 service

7.2 查看服务列表

7.3 查看服务详情

7.4 用户访问服务

7.5 查看 task 节点

7.6 查看节点 task

7.7 查看服务日志

7.8 查看节点容器

7.9 负载均衡


1、swarm 理论基础

1.1 简介

Docker Swarm 是由 Docker 公司推出的 Docker 的原生集群管理系统,它将一个 Docker主机池变成了一个单独的虚拟主机,用户只需通过简单的 API 即可实现与 Docker 集群的通信。Docker Swarm 使用 GO 语言开发。从 Docker 1.12.0 版本开始,Docker Swarm 已经内置于Docker 引擎中,无需再专门的进行安装配置。


Docker Swarm 在 Docker 官网的地址为:https://docs.docker.com/engine/swarm/

需要注意的是:docker swarm与docker classic swarm是不同的。

1.2 节点架构

(1) 架构图

官网链接地址:How nodes work | Docker Docs

docker主机 、虚拟机、节点之间的关系:docker主机可以认为与虚拟机是等同的,但是docker主机与节点之间是一对多的关系。

(2) swarm node

从物理上讲,一个 Swarm 是由若干安装了 Docker Engine 的物理机或者虚拟机组成,这
些主机上的 Docker Engine 都采用 Swarm 模式运行。


从逻辑上讲,一个 Swarm 由若干节点 node 构成,每个 node 最终会落实在一个物理Docker 主机上,但一个物理 Docker 主机并不一定就是一个 node。即 swarm node 与 Docker主机并不是一对一的关系。


swarm node 共有两种类型:manager 与 worker。

(3) Manager

Manager 节点用于维护 swarm 集群状态、调试 servcie、处理 swarm 集群管理任务。为了防止单点故障问题,一个 Swarm 集群一般都会包含多个 manager。这些 manager 间通过Raft 算法维护着一致性。

(4) Worker

Worker 节点用于在其 Contiainer 中运行 task 任务,即对外提供 service 服务。默认情况
下,manager 节点同时也充当着 worker 角色,可以运行 task 任务。

(5) 角色转换

manager 节点与 worker 节点角色并不是一成不变的,它们之间是可以相互转换的。

  • manager 转变为 worker 称为节点降级
  • worker 转变为 manager 称为节点升级

1.3 服务架构


(1) 架构图

(2) service

搭建 docker swarm 集群的目的是为了能够在 swarm 集群中运行应用,为用户提供具备更强抗压能力的服务。docker swarm 中的服务 service 就是一个逻辑概念,表示 swarm 集群对提供的服务。

(3) task

一个 service 最终是通过任务 task 的形式出现在 swarm 的各个节点中,而每个节点中的task 又都是通过具体的运行着应用进程的容器对外提供的服务。

(4) 编排器

在 swarm manager 中具有一个编排器,用于管理副本 task 任务的创建与停止。例如,当在 swarm manager 中定义一个具有 3 个 task 副本任务的 service 时,编排器首先会创建 3个task,为每个 task 分配一个 taskID,并通过分配器为每个 task 分配一个虚拟 IP,即 VIP。然后再将该 task 注册到内置的 DNS 中。当 service 的某 task 不可用时,编排器会在 DNS 中注销该 task。

(5) 分发器

在 swarm manager 中具有一个分发器,用于完成对副本 task 任务的监听、调度等操作。在前面的例子中,当编排器创建了 3 个 task 副本任务后,会调用分发器为每个 task 分配节点。分发器首先会在 swarm 集群的所有节点中找到 3 个 available node 可用节点,每个节点
上分配一个 task。而每个 task 就像是一个“插槽”,分发器会在每个“插槽”中放入一个应用容器。每个应用容器其实就是一个具体的 task 实例。一旦应用容器运行起来,分发器就可以监测到其运行状态,即 task 的运行状态。


如果容器不可用或被终止,task 也将被终止。此时编排器会立即在内置 DNS 中注销该task,然后编排器会再生成一个新的 task,并在 DNS 中进行注册,然后再调用分发器为之分配一个新的 available node,然后再该节点上再运行应用容器。编排器始终维护着 3 个 task副本任务。


分发器除了为 task 分配节点外,还实现了对访问请求的负载均衡。当有客户端来访问swarm 提供的 service 服务时,该请求会被 manager 处理:根据其内置 DNS,实现访问的负载均衡。

1.4 服务部署模式

(1) 官方图

service 以副本任务 task 的形式部署在 swarm 集群节点上。根据 task 数量与节点数量的关系,常见的 service 部署模式有两种:replicated 模式与 global 模式。


(2) replicated 模式

replicated 模式,即副本模式,service 的默认部署模式。需要指定 task 的数量。当需要的副本任务 task 数量不等于 swarm 集群的节点数量时,就需要使用 replicated 模式。manager中的分发器会找到指定 task 个数的 available node 可用节点,然后为这些节点中的每个节点分配一个或若干个 task。

(3) global 模式

global 模式,即全局模式。分发器会为每个 swarm 集群节点分配一个 task,不能指定 task的数量。swarm 集群每增加一个节点,编排器就会创建一个 task,并通过分发器分配到新的
节点上。

2、swarm 集群搭建

2.1 需求

现要搭建一个 docker swarm 集群,包含 5 个 swarm 节点。这 5 个 swarm 节点的 IP 与暂
时的角色分配如下(注意,是暂时的):

hostnameIProle
docker01192.168.162.201manager
docker02192.168.162.202manager
docker03192.168.162.203manager
docker04192.168.162.204worker
docker05192.168.162.205worker

​2.2 克隆主机

克隆两台前面 docker 主机,这两台主机名分别为 docker2、docker3、docker4 与 docker5。
克隆完毕后修改如下配置文件:

  • 修改主机名:/etc/hostname
  • 修改网络配置:/etc/sysconfig/network-scripts/ifcfg-ens33
vi /etc/hostname #修改主机名vi /etc/sysconfig/network-scripts/ifcfg-ens33  修改网络配置

2.3 启动5个docker宿主机

systemctl start docker

2.4 查看 swarm 激活状态

在任意 docker 主机上通过 docker info 命令可以查看到当前 docker 引擎 Server 端对于
swarm 的激活状态。由于尚未初始化 swarm 集群,所以这些 docker 主机间没有任何关系,

docker info

 2.5 关闭防火墙

# 查看防火墙状态
systemctl status firewalld# 停止防火墙
systemctl stop firewalld# 永久关闭
systemctl disable firewalld

2.6 swarm 初始化

在主机名为“docker01”的主机上运行 docker swarm init 命令,创建并初始化一个 swarm。

 docker swarm init

2.7 添加 worker 节点

复制 docker swarm init 命令的响应结果中添加 worker 节点的命令在 docker4 与 docker5
节点上运行,将这两个节点添加为 worker 节点。(docker04和docker05)

2.8 添加 manager 节点

(1) 获取添加命令
若要为 swarm 集群添加 manager 节点,需要首先在 namager 节点获取添加命令。

docker swarm join-token manager

(2) 添加节点
复制 docker swarm join-token 命令生成的 manager 添加命令,然后在 docker2 与 docker3
节点上运行,将这两个节点添加为 manager 节点。(docker02和docker03)

(3) 查看 swarm 节点
在 manager 节点 docker、docker2、docker3 上通过 docker node ls 命令可以查看到当前
集群所包含的节点状态数据。

 docker node ls

但在 worker 节点上是不能运行 docker node ls 命令的。

3、swarm 集群维护

3.1 退出 swarm 集群

当一个节点想从 swarm 集群中退出时,可以通过 docker swarm leave 命令。不过 worker
节点与 manager 节点的退群方式是不同的。
(1) worker 退群
对于 worker 节点退群,直接运行 docker swarm leave 命令即可。(docker05)

docker swarm leave 

此时在 manager 节点中查看节点情况,可以看到 docker5 已经 Down 了。

(2) worker 重新加入
首先在 manager 节点上运行 docker swarm join-token worker 命令,生成加入 worker 节点
的命令。

docker swarm join-token worker

复制生成的命令,在 docker05 节点上运行,将此节点添加到 swarm 集群。

(3) 查看节点情况 (docker01)
此时在 manager 节点中查看节点情况,可以看到原来的 docker5 依然是 Down,但又新
增了一个新的 docker5 节点,其状态为 Ready。

docker node ls

此时在 manager 节点通过 docker info 命令可以查看到节点数量变为了 6 个,这增加的
一个就是两种状态的 docker5。

(4) 删除 Down 状态节点
对于Down状态的节点是完全可以将其删除的。通过在manager节点运行docker node rm
命令完成。

docker node rm ID

(5) manager 退群
对于 manager 节点,原则上是不推荐直接退群的,这样会导致 swarm 集群的一致性受
到损坏。如果 manager 执意要退群,可在 docker swarm leave 命令后添加-f 或--force 选项进
行强制退群。

3.2 swarm 自动锁定

(1) swarm 集群自动锁定原理

在 manager 集群中,swarm 通过 Raft 日志方式维护了 manager 集群中数据的一致性。
即在 manager 集群中每个节点通过 manager 间通信方式维护着自己的 Raft 日志。
但在通信过程中存在有一种风险:Raft 日志攻击者会通过 Raft 日志数据的传递来访问、
篡改 manager 节点中的配置或数据。为了防止被攻击,swarm 开启了一种集群自动锁定功能,为 manager 间的通信启用了 TLS 加密。用于加密和解密的公钥与私钥,全部都维护在各个节点的 Docker 内存中。一旦节点的 Docker 重启,则密钥丢失


swarm 中通过 autolock 标志来设置集群的自动锁定功能:为 true 则开启自动锁定,为
false 则关闭自动锁定。

docker info


(2) 设置自动锁定

在 manager 节点通过 docker swarm update –autolock=true 命令可以开启当前 swarm 集群
的自动锁定功能。

docker swarm update --autolock=true

此时查看 manager 的 docker info 可以看到,autolock 已经为 true 了。

docker info

(3) 查看解锁密钥

如果没有保存 docker swarm update --autolock=true 命令中生成的密钥,也可通过在
manager 中运行 docker swarm unlock-key 命令查看。

 docker swarm unlock-key 

(4) 关闭一个 manager

直接关闭 docker3 的 docker 引擎,模拟一个 manager 宕机的情况。

systemctl stop docker

(5) 加入 manager

启动 docker3 的 docker 引擎。

systemctl start docker

此时再查看该节点的 docker info,可以看到 Swarm 值为 locked,即当前节点看到的 Swarm
集群的状态为锁定状态,其若要加入,必须先解锁。

docker info

在 docker3 中运行 docker swarm unlock 命令,解锁 swarm。

docker swarm unlock

此时再查看节点信息,该 manager 已经加入。

3.3 注意事项(重点)

swarm自动锁定,一般锁定的是mananger节点;manager节点一旦设置开启了自动锁定功能,manager节点中的至少保证一台主机启动状态,否则,如果所有manager节点主机都宕机了,那么这个swarm集群也就不复存在了!!!

4、 swarm 节点维护


4.1 角色转换

Swarm 集群中节点的角色只有 manager 与 worker,所以其角色也只是在 manager 与worker 间的转换。即 worker 升级为 manager,或 manager 降级为 worker。

(1) worker 升级为 manager

通过 docker node promote 命令可以将 worker 升级为 manager。例如,下面的命令是将
docker4 与 docker5 两个节点升级为了 manager,即当前集群中全部为 manager。

docker node promote wmq8o6m1mes2c6xknzfhgr8yb

(2) manager 降级为 worker

通过 docker node demote 命令可以将 manager 降级为 worker。例如,下面的命令是将
docker2 与 docker3 两个节点降级为了 worker

docker node demote 8dtmsmtpg1dlwcn43dj1sk92qdocker node demote x8yitf9zuad9r0g7kmxp6i74g

(3) docker node update 变更角色

除了通过 docker node demote|promote 可以变更节点角色外,通过 docker node update 
--role [manager|worker] [node]也可变更指定节点的角色。

以下命令将 docker2 与 docker3 两个节点又变为了 manager。

docker node update --role manager docker02docker node update --role manager docker03

以下命令将 docker4 与 docker5 两个节点又变为了 worker。

docker node update --role worker docker04docker node update --role worker docker05

4.2 节点标签

swarm 可以通过命令为其节点添加描述性标签,以方便管理员去了解该节点的更多信息。

(1) 添加/修改节点标签

通过 docker node update --label-add 命令可以为指定 node 添加指定的 key=value 的标签。
若该标签的 key 已经存在,则会使用新的 value 替换掉该 key 的原 value。不过需要注意的是,若要添加或修改多个标签,则需要通过多个--label-add 选项指定。

 docker node update --label-add auth=tiger --label-add email=tigerhhzz@163.com docker02

通过 docker node inspect 在查看该节点详情时可看到添加的标签。

docker node inspect docker02

docker node inspect --pretty 可以 key:value 的形式显示信息。

docker node inspect --pretty docker02

(2) 删除节点标签

通过 docker node update --label-rm 命令可以为指定的 node 删除指定 key 的标签。同样,
若要删除多个标签,则需要通过多个--label-rm 选项指定要删除 key 的标签。

docker node update --label-rm auth --label-rm email docker02

查看节点详情,发现这两个标签已经消失。

4.3 节点删除

manager 节点通过 docker node rm 命令可以删除一个 Down 状态的、指定的 worker 节点。
注意,该命令只能删除 worker 节点,不能删除 manager 节点。

(1) 有问题的删除

对于 Ready 状态的 worker 节点是无法直接删除的。

docker node rm rq3ea29miho50jf0wxc9nmdo9

对于 manager 节点也是无法删除的。

(2) 正确的删除

若要删除一个 worker 节点,首先要将该节点的 Docker 关闭,使该节点变为 Down 状态,
然后再进行删除。
关闭 docker2 节点的 Docker 引擎:

删除节点:

(3) 强制删除
前面的删除方式有些麻烦,其实也可以通过添加-f 选项来实现强制删除。

但对于 manager 节点,强制删除也不能删除。

docker node rm –f 命令会使一个节点强制退群,而 docker swarm leave 命令是使当前的
docker 主机关闭 swarm 模式。

5、 swarm 安全(PKI)

Docker 内置了 PKI(public key infrastructure,公钥基础设施),使得保障发布容器化的业
务流程系统的安全性变得很简单。

5.1 TLS 安全保障

Swarm 节点之间采用 TLS 来鉴权、授权和加密通信。

具体来说是,当运行 docker swarm init 命令时,Docker 指定当前节点为一个 manager
节点。默认情况下,manager 节点会生成一个新的 swarm 的 CA 根证书以及一对密钥。同时,manager 节点还会生成两个 token,一个用于添加 worker 节点,一个用于添加 manager 节点。每个 token 包含上了 CA 根证书的 digest 和一个随机密钥。CA 根证书、一对密钥和随机密钥都将会被用在节点之间的通信上。


当有节点加入 Swarm 时,需要复制 manager 中相应的 docker swarm join 加入命令,并
在该节点中运行。而这个过程主要是通过随机密钥这种对称验证方式保障通信安全的。

一旦节点加入了 Swarm 集群,那么它们间的通信全部都是通过 TLS 加密方式进行的。
首先是通过 CA 证书对通信对方的身份进行验证,在验证通过后再进行数据通信。而通信的
数据则是通过随机密钥加密过的。


5.2 CA 数字证书轮换

(1) 轮换周期

Swarm 的 CA 数字证书也是有可能被攻击、篡改的。为了保证 swarm 的数字证书的安全
性,Swarm 提供了 CA 数字证书轮换机制,定期更换 CA 数字证书。默认 swarm 的 CA 数字
证书 90 天轮换一次。

(2) 指定证书

那么,用于轮换的新的 CA 数字证书来自于哪里呢?通过 docker swarm ca 命令可以指定外部 CA 数字证书,或生成新的 CA 数字证书。无论哪种数字证书变更方式,都需要 CA 根证
书的加密/解密。而根证书也是会发生变化的,具体见“轮转过程”。

(3) 轮转过程

当 manager 运行了 docker swarm ca --rotate 命令后,会按顺序发生下面的事情:

  • Docker 会生成一个交叉签名(cross-signed)根证书,即新根证书是由旧的根证书签署

生成的,这个交叉签名根证书将作为一个过渡性的根证书。这是为了确保节点仍然能够
信任旧的根证书,也能使用新的根证书验证签名。

  • 在 Docker 17.06 或者更高版本中,Docker 会通知所有节点立即更新根证书。根据 swarm

中节点数量多少,这个过程可能会花费几分钟时间。

  • 在所有的节点都更新了新 CA 根证书后,manager 会通知所有节点仅信任新的根证书,

不再信任旧根证书及交叉签名根证书。

  • 所有节点使用新根证书签发自己的数字证书。

如果直接使用外部的 CA 根证书,那么就不存在交叉签名根证书的生成过程,直接由运
行docker swarm ca命令的节点通知所有节点立即更新根证书。后续过程与前面的就相同了。

6 、manager 集群容灾

6.1 热备容灾

Swarm 的 manager 节点集群采用的是热备方式来提升集群的容灾能力。即在 manager集群中只有一个处于 leader 状态,用于完成 swarm 节点的管理,其余 manager 处于热备状
态。当 manager leader 宕机,其余 manager 就会自动发起 leader 选举,重新选举产生一个新的 manager leader。

6.2 容灾能力

manager 集群的 leader 选举采用的是 Raft 算法。Raft 算法是一种比较复杂的一致性算法,
具体见后面“Raft 算法”。其选举 leader 的简单思路是,所有可用的 manager 全部具有选举
权与被选举权。最终获得过半选票的 manager 当选新的 leader。为了保证一次性可以选举出
新的leader,官方推荐使用奇数个manager。但并不是说偶数个manager就无法选举出leader。

6.3 容灾模拟

目前是 docker01、docker02、docker03 三个 manager,其中 docker01 为 leader。

现在关闭 docker 主机的 docker daemon,模拟其宕机。

然后在 docker2 或 docker3 主机上查看当前的节点情况,可以看到 docker2 或 docker3
已经成为了新的 leader。

此时如果再使某个 manager 宕机,例如使 docker2 的 docker daemon 关闭,那么整个
swarm 就会瘫痪。因为剩下的 manager 已经无法达成过半的选票,无法选举出新的 leader。

7 、service 创建

注意,service 只能依附于 docker swarm 集群,所以 service 的创建前提是,swarm 集群
搭建完毕。

7.1 创建 service

docker service create 命令用于创建 service,需要在 manager 中运行。其与创建容器的命
令 docker run 非常类似,具有类似的选项。
目前的节点状态如下:

现在要在 swarm 中创建一个运行 tomcat:8.5.49 镜像的 service,服务名称为 toms,包含
3 个副本 task,对外映射端口号为 9000。

docker service create --name tomcats --replicas 3 -p 9000:8080 tomcat:8.5.49

7.2 查看服务列表

docker service ls 命令用于查看当前 swarm 集群中正在运行的 service 列表信息。一个
swarm 中可以运行多个 service。

docker service ls 

7.3 查看服务详情

通过 docker service inspect [service name|service ID]命令可以查看指定 service 的详情。

docker service inspect tomcates

7.4 用户访问服务

当服务创建完毕后,该服务也就运行了起来。此时用户就可通过浏览器进行访问了。用
户可以访问 swarm 集群中任意主机。

访问 manager:

访问 worker:

7.5 查看 task 节点

docker service ps [service name|service ID]命令可以查看指定服务的各个 task 所分配的节
点信息。

docker service ps tomcates

可以看到,toms 服务的 3 个 task 被分配到了 docker01、docker04、docker05 三个主机。其中 ID 为 task ID,NAME 为 task 的 name。task name 是 service name 后添加从 1 开始的流水号形成的。


7.6 查看节点 task

通过 docker node ps [node]可以查看指定节点中运行的 task 的信息。默认查看的是当前
节点的 task 信息。

 docker node ps docker05

7.7 查看服务日志

通过 docker service logs 命令可以查看指定 service 或 task 的日志。通过 docker service logs –f 命令可动态监听指定 service 或 task 的日志。


(1) 查看 service 日志

通过 docker service logs [service name|service ID]命令可以查看指定 service 的日志。这些
日志实际是所有 task 在节点容器中的运行日志。

docker service logs tomcates

(2) 查看 task 日志

通过 docker service logs [task ID]命令可以查看指定 task 的日志。注意,这里只能指定
taskID,不能指定 task name。这些日志实际是指定 task 在节点容器中的运行日志。

docker service logs ID

7.8 查看节点容器

在 docker01、docker04、docker05 三个主机中查看正在运行的容器列表,可以看到相应的
tomcat 容器。

容器的 NAME 是由 task name 后添加 task ID 形成的。
不过,在 docker02、docker03 主机中是没有该服务的 task 容器的。

7.9 负载均衡

当一个 service 包含多个 task 时,用户对 service 的访问最终会通过负载均衡方式转发给
各个 task 处理。这个负载均衡为轮询策略,且无法通过修改 service 的属性方式进行变更。

但由于该负载均衡为三层负载均衡,所以其可以通过第三方实现负载均衡策略的变更,例如
通过 Nginx、HAProxy 等。

(1) 创建 service

为了能够展示出 service 对访问请求负载均衡的处理方式,这里使用一个镜像tomocate。该镜像中应用端口号为9001,通过浏览器访问,返回结果中包含很多信息,其中最重要的是处理该请求的容器 ID。为了提高 service 的创建效率,可以先将该镜像
下载到所有节点主机。

下面的命令用于创建该镜像的一个 service,包含 5个副本 task。

docker service create --name web --replicas 5 -p 8181:80 containous/whoami

(2) 记录容器 ID
可以看到,每个节点上都分配了一个 task,即每个节点上都运行了一个该 task 的容器。

docker service lsdocker service ps web

访问其中一个主机:

为了体现负载均衡的效果,这里需要将各个节点主机中该 service 的 task 容器的 ID 查询
并记录下来。

(3) 访问

在任意主机上使用curl命令访问swarm集群中的任意节点,无论是manager还是worker,
快速访问后,在返回结果中的 Hostname 值就是处理该请求的容器的 ID,第 2 个 IP 为该节点在 Swarm 集群局域网中的 IP。


从结果可以看出,这些请求被轮询分配给了各个 task 容器进行的处理,实现了 service
对访问请求的负载均衡。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线上异步任务突然不能回写100%

项目场景: 需求是一个作业,需要运行一组sql,所有sql运行完成,更新作业进度为100%,状态为完成。sql需要是在大数据平台,通过yarn调度,异步执行。 kafka监听每个sql的执行状态,所有sql…

vue el-table表格中每行上传文件(上传简历)操作

1、HTML中 <el-table :data"formInfo.userListDto" border stripe max-height"400"><el-table-column type"index" label"序号" width"50"> </el-table-column><el-table-column prop"realName&q…

自动化接口测试:Pytest让你轻松搞定!了解一般流程及方法

首先我们要明确&#xff0c;通常所接口测试其实就属于功能测试&#xff0c;主要校验接口是否实现预定的功能&#xff0c;虽然有些情况下可能还需要对接口进行性能测试、安全性测试。 在学习接口自动化测试之前&#xff0c;我们先来了解手工接口测试怎样进行。 URL组成 为了更…

灰度发布专题---2、Dubbo灰度发布

通过上面描述&#xff0c;我们理解了什么是灰度发布&#xff0c;接下来我们基于Dubbo实现灰度发布。Dubbo的灰度发布常见的方式有版本控制灰度发布、路由灰度发布、基于Apollo实现灰度发布&#xff0c;我们把这每种灰度发布都实现一次。 在学习Dubbo灰度发布之前&#xff0c;我…

5款最常用的Android测试框架(含代码示例)

前言 今天&#xff0c;我们就要说说5款最常用的Android测试框架&#xff0c;并且每个框架都给出了基本的代码示例。 在这我为大家准备了一份软件测试视频教程&#xff08;含面试、接口、自动化、性能测试等&#xff09;&#xff0c;就在下方&#xff0c;需要的可以直接去观看…

csdn博客编写技巧

随便记录一下csdn博客编写时候用的到技巧&#xff0c;以作备忘。 1. 表格 1.1 Markdown-Table-Generator 这个是csdn编辑器中&#xff0c;工具栏自带的表格用法。主要优点是比较直观&#xff0c;缺点是无法设置表格中行列的宽高。 用法&#xff1a; | 表头一 | 表头二 | |-…

分享错误代码0x8007007b的解决办法,有效解决错误代码0x8007007b

错误代码0x8007007b是Windows操作系统中常见的错误代码之一。出现这样的错误代码0x8007007b通常与许可证问题相关&#xff0c;并表示Windows无法激活或验证已安装的操作系统副本&#xff0c;导致应用程序不能正常运行。下面是关于错误代码0x8007007b的解决办法希望能帮助大家解…

Vue3-Pinia

Pinia是什么 Pinia是Vue的最新状态管理工具&#xff0c;是Vuex的替代品 比Vuex更大的优势在于&#xff1a; 1.提供更加简单的API&#xff08;去掉了mutation&#xff09; 2.提供符合&#xff0c;组合式风格的API&#xff08;和Vue3新语法统一&#xff09; 3.去掉了modules…

微信小程序nodejs+vue+uniapp视力保养眼镜店连锁预约系统

作为一个视力保养连锁预约的网络系统&#xff0c;数据流量是非常大的&#xff0c;所以系统的设计必须满足使用方便&#xff0c;操作灵活的要求。所以在设计视力保养连锁预约系统应达到以下目标&#xff1a; &#xff08;1&#xff09;界面要美观友好&#xff0c;检索要快捷简易…

GAN:ImprovedGAN-训练GAN的改进策略

论文&#xff1a;https://arxiv.org/abs/1606.03498 代码&#xff1a;https://github.com/openai/improved_gan 发表&#xff1a;NIPS 2016 一、文章创新 1&#xff1a;Feature matching&#xff1a;特征匹配通过为生成器指定新目标来解决GANs的不稳定性&#xff0c;从而防止…

亚马逊低价产品广告怎么打?亚马逊造成成本高的原因——站斧浏览器

亚马逊低价产品广告怎么打&#xff1f; 设置合适的出价&#xff1a;在低价自动广告中&#xff0c;设置适当的出价是关键。过高的出价可能导致广告成本过高&#xff0c;而过低的出价可能使广告曝光度不足。可以根据产品的竞争情况和预算来调整出价&#xff0c;找到一个平衡点。…

Mysql更新varchar存储的Josn数据

Mysql更新varchar存储的Josn数据 记录一次mysql操作varchar格式存储的json字符串数据 1、检查版本 -- 版本5.7以上才可以能执行json操作 select version(); 2、创建测试数据 -- 创建测试表及测试数据 CREATE TABLE test_json_table AS SELECT UUID(), {"test1": …

详解HTTP协议(介绍--版本--工作过程--Fiddler 抓包显示--请求响应讲解)

目录 一.HTTP协议的介绍 1.1HTTP是什么&#xff1f; 1.2HTTP版本的演变 二.HTTP的工作过程 三.使用Fiddler抓包工具 3.1简单讲解Fiddler 3.2Fiddler工作的原理 3.3抓包结果分析 四.HTTP请求 4.1认识URL 4.2关于URL encode 4.3认识方法 4.3.1认识get和post 4.3.…

Docker 安装kafka 并创建topic 进行消息通信

Apache Kafka是一个分布式流处理平台&#xff0c;用于构建高性能、可扩展的实时数据流应用程序。本文将介绍如何使用Docker容器化技术来安装和配置Apache Kafka。 一、使用镜像安装 1、kafka安装必须先安装Zookpper 2、下载镜像 docker pull wurstmeister/kafka 3、查看下载…

揭秘!9个月完成亚运会的整体数字化观测

项目背景与业务场景 2023 第 19 届亚运会在杭州举办&#xff0c;这将提高杭州的国际知名度&#xff0c;促进杭州经济、社会的全面发展&#xff0c;并将进一步推动奥林匹克运动在中国的发展&#xff0c;并且提升杭州城市形象和国际影响力。为亚运村村民提供便捷周到的服务和丰富…

不确定度校准和可靠性图简介

图片来源 项杰 一、说明 不确定性校准是机器学习中最容易被误解的概念之一。它可以概括为这个简单的问题&#xff1a;“鉴于上述下雨的可能性&#xff0c;您是否带伞&#xff1f;” 我们在日常生活中使用主观概率和不确定性校准的概念&#xff0c;但没有意识到它们。对于不确定…

第四节HarmonyOS 熟知开发工具DevEco Studio

一、设置主体样式 默认的代码主题样式是黑暗系的&#xff0c;如下图所示&#xff1a; 如果你不喜欢&#xff0c;可以按照一下步骤进行修改&#xff1a; 左上角点击Flie->Settings->Appearance&Behavior->Appearance&#xff0c;点击Theme&#xff0c;在弹出的下拉…

XXDD——UUII(交互设计)

今天我们再次回到Adobe全家桶的怀抱&#xff0c;今天介绍的这一位成员&#xff0c;是最直接帮助大家进行平面交互式设计的软件。他就是XD~ Adobe XD全称Adobe Experience Design CC&#xff0c; 官方版跨平台支持Win10 与 macOS&#xff0c;并且所有用户均可免费下载使用。Adob…

Linux fork笔试练习题

1.打印结果&#xff1f; #include <stdio.h> #include <unistd.h> #include <stdlib.h>int main() {int i0;for(;i<2;i){fork();printf("A\n");}exit(0); } 结果打印 A A A A A A 2.将上面的打印的\n去掉,结果如何? printf("…

Java小游戏 王者荣耀

GameFrame类 所需图片&#xff1a; package 王者荣耀;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayLis…