目录

Replication Controller(RC)

概念

关键字段

Replica Set(RS)

概念

关键字段

RC 与 RS 的区别

无状态应用管理Deployment

无状态应用(Stateless Application)

什么是无状态?

无状态服务的特点

典型无状态应用

Kubernetes Deployment 管理无状态应用

实例:用 Deployment 部署 Nginx

有状态应用(Stateful Application)

什么是有状态?

有状态服务的特点

典型有状态应用

Kubernetes StatefulSet 管理有状态应用

 实例:用 StatefulSet 部署 MySQL

 无状态 vs 有状态:关键区别

守护进程集DaemonSet

DaemonSet 的核心概念

什么是 DaemonSet?

DaemonSet 的工作原理

DaemonSet 的典型应用场景

日志收集

监控代理

网络插件

存储插件

DaemonSet 的关键配置

节点选择(Node Selector)

污点容忍(Tolerations)

更新策略(Update Strategy)

资源限制

 DaemonSet vs Deployment vs StatefulSet区别

CronJob 的核心概念

什么是 CronJob?

CronJob 的工作原理

CronJob 的关键组成部分

Cron 表达式

Job 模板

并发策略

历史记录保留

CronJob 的典型应用场景

定时备份数据库

 定期清理日志

定时发送通知 

CronJob 的常见问题与排查

任务未执行

任务并发冲突

任务失败重试

CronJob vs Deployment vs DaemonSet区别


在 Kubernetes 中,Replication Controller(RC,复制控制器)Replica Set(RS,复制集)是用于管理 Pod 副本数量的核心控制器,它们确保集群中始终运行指定数量的 Pod 副本,实现应用的高可用性和弹性伸缩。

Replication Controller(RC)

概念
  • 核心功能:确保在任何时刻都有指定数量的 Pod 副本运行。如果实际 Pod 数量少于期望值,RC 会自动创建新的 Pod;如果多于期望值,RC 会终止多余的 Pod。
  • 适用场景:适用于需要长期运行的服务(如 Web 服务器),确保服务始终可用。
  • 历史地位:RC 是 Kubernetes 早期版本中管理 Pod 副本的主要方式,现已逐渐被 Deployment 取代,但在旧版本或简单场景中仍可能使用。
关键字段
  • replicas:期望的 Pod 副本数量。
  • selector:通过标签选择器匹配需要管理的 Pod。
  • template:定义 Pod 的模板,包括容器镜像、端口等。

实例

RC实例,确保始终运行 3 个 nginx Pod

apiVersion: v1
kind: ReplicationController
metadata:name: nginx-rc
spec:replicas: 3selector:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80

操作步骤

创建 RC:kubectl apply -f rc.yaml

查看 RC 状态:kubectl get rc

查看 Pod:kubectl get pods --selector=app=nginx

验证高可用性

  • 手动删除一个 Pod:kubectl delete pod <pod-name>
  • 观察 RC 是否自动创建新的 Pod 以维持 3 个副本。

Replica Set(RS)

概念
  • 核心功能:与 RC 类似,但支持更灵活的标签选择器(基于集合的匹配规则),是 RC 的升级版。
  • 适用场景:通常与 Deployment 配合使用,实现 Pod 的滚动更新和回滚。
  • 现状:RS 是 Kubernetes 推荐的管理 Pod 副本的方式,但直接使用 RS 的场景较少,更多是通过 Deployment 间接使用。
关键字段
  • replicas:期望的 Pod 副本数量。
  • selector:支持基于集合的标签选择器(如 matchLabels 或 matchExpressions)。
  • template:定义 Pod 的模板。

实例

 RS实例,确保始终运行 3 个 nginx Pod

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: nginx-rs
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80

操作步骤

创建 RS:kubectl apply -f rs.yaml

查看 RS 状态:kubectl get rs

查看 Pod:kubectl get pods --selector=app=nginx

验证高可用性

  • 手动删除一个 Pod:kubectl delete pod <pod-name>
  • 观察 RS 是否自动创建新的 Pod 以维持 3 个副本。

RC 与 RS 的区别

特性Replication Controller(RC)Replica Set(RS)
标签选择器基于等式的简单选择器(如 app=nginx支持基于集合的选择器(如 matchLabelsmatchExpressions
灵活性较低更高,支持更复杂的标签匹配规则
推荐使用场景旧版本或简单场景推荐与 Deployment 配合使用
API 版本v1apps/v1

无状态应用管理Deployment

在 Kubernetes 中,无状态应用有状态应用的管理方式不同,Deployment 是管理无状态应用的核心控制器,而 StatefulSet 则用于有状态应用。

无状态应用(Stateless Application)

什么是无状态?

无状态应用是指不依赖本地存储或持久化数据的应用,每个请求的处理不依赖于之前的请求或会话状态。所有实例(Pod)都是完全相同的,可以随时被替换或扩展。

无状态服务的特点

  • 可扩展性:可以随意增加或减少实例数量,不影响服务逻辑。
  • 高可用性:单个实例崩溃不会影响整体服务,其他实例可以继续处理请求。
  • 无持久化需求:数据通常存储在外部数据库(如 MySQL、Redis)或对象存储(如 S3)中,而非本地磁盘。
  • 无顺序依赖:实例之间没有固定的启动顺序或依赖关系。
  • 水平扩展简单:通过增加副本(Replica)即可提升处理能力。

典型无状态应用

  • Web 服务器(如 Nginx、Apache)
  • API 服务(如 RESTful 服务)
  • 微服务(如用户认证服务、订单服务)
  • 计算任务(如批处理、数据处理)

Kubernetes Deployment 管理无状态应用

Deployment 是 Kubernetes 中管理无状态应用的标准方式,它通过 ReplicaSet 控制 Pod 副本数量,支持滚动更新、回滚和自动扩缩容。

实例:用 Deployment 部署 Nginx

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3  # 3 个副本selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80

操作步骤

创建 Deployment:kubectl apply -f nginx-deployment.yaml

查看 Pod:kubectl get pods -l app=nginx

扩展副本:kubectl scale deployment nginx-deployment --replicas=5

滚动更新:修改镜像版本后执行 kubectl rollout restart deployment/nginx-deployment 


有状态应用(Stateful Application)

什么是有状态?

有状态应用是指依赖本地存储或持久化数据的应用,每个实例(Pod)可能有唯一的身份标识,并且数据、状态或配置不能随意丢失或替换。

有状态服务的特点

  • 持久化存储:数据通常存储在本地磁盘(如 PV/PVC),且需要保证数据不丢失。
  • 固定身份标识:每个实例有唯一的名称或 ID(如 pod-0pod-1),不能随意替换。
  • 启动顺序依赖:实例之间可能有固定的启动顺序(如主从架构)。
  • 水平扩展复杂:不能简单增加副本,需要考虑数据同步和一致性。
  • 高可用性挑战:单个实例崩溃可能导致数据不一致或服务中断。

典型有状态应用

  • 数据库(如 MySQL、PostgreSQL、MongoDB)
  • 分布式存储(如 Ceph、GlusterFS)
  • 消息队列(如 Kafka、RabbitMQ)
  • 分布式计算框架(如 Spark、Flink)

Kubernetes StatefulSet 管理有状态应用

StatefulSet 是 Kubernetes 中管理有状态应用的核心控制器,它提供以下功能:

  • 稳定的网络标识:每个 Pod 有唯一的 DNS 名称(如 pod-0.nginx.default.svc.cluster.local)。
  • 持久化存储:通过 PVC(PersistentVolumeClaim) 绑定存储卷,确保数据不丢失。
  • 有序部署和扩展:按顺序启动或终止 Pod(如 pod-0 → pod-1 → pod-2)。
  • 有序滚动更新:支持分批更新,确保数据一致性。

 实例:用 StatefulSet 部署 MySQL

apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql
spec:serviceName: "mysql"  # 用于 DNS 发现replicas: 3selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalue: "password"ports:- containerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumeClaimTemplates:  # 自动创建 PVC- metadata:name: mysql-dataspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 10Gi

操作步骤

创建 StatefulSet:kubectl apply -f mysql-statefulset.yaml

查看 Pod:kubectl get pods -l app=mysql(会看到 mysql-0mysql-1mysql-2

查看 PVC:kubectl get pvc(会自动创建 3 个 PVC)

测试数据持久化:删除 Pod 后,数据仍然存在(因为 PVC 绑定到 PV)。


 无状态 vs 有状态:关键区别

数据存储数据存储在外部(数据库、对象存储)数据存储在本地(PV/PVC)
实例标识所有实例相同,可随意替换每个实例有唯一标识(如 pod-0
启动顺序无顺序依赖可能有固定启动顺序(如主从)
扩展方式直接增加副本需要考虑数据同步和一致性
Kubernetes 控制器DeploymentStatefulSet
典型用例Web 服务、API 服务数据库、分布式存储、消息队列

守护进程集DaemonSet

DaemonSet 是 Kubernetes 中的一种核心控制器,用于在集群中的每个节点(Node)上运行一个指定的 Pod 副本(或特定节点上运行)。它确保所有(或部分)节点都运行一个特定的守护进程(如日志收集、监控代理、网络插件等),通常用于管理节点级别的服务

DaemonSet 的核心概念

什么是 DaemonSet?

  • 定义:DaemonSet 是一种 Kubernetes 工作负载资源,用于在集群中的每个节点(或符合条件的节点)上部署并运行一个 Pod 副本。
  • 用途:运行节点级别的守护进程,例如:
    • 日志收集(如 Fluentd、Filebeat)
    • 监控代理(如 Prometheus Node Exporter、Datadog Agent)
    • 网络插件(如 Calico、Flannel、Cilium)
    • 存储插件(如 Ceph、NFS 客户端)
    • 设备管理(如 GPU 驱动、特殊硬件代理)

DaemonSet 的工作原理

  • 自动部署:当新节点加入集群时,DaemonSet 会自动在该节点上创建对应的 Pod。
  • 自动清理:当节点被移除时,DaemonSet 会自动删除该节点上的 Pod。
  • 节点选择:可以通过 nodeSelector 或 tolerations 控制 DaemonSet 在哪些节点上运行(例如,仅在特定标签的节点上运行)。
  • 更新策略:支持滚动更新(RollingUpdate)或静态更新(OnDelete)。

DaemonSet 的典型应用场景

日志收集

  • 需求:每个节点上的容器日志需要集中收集到日志系统(如 ELK、Loki)。
  • 实现:使用 DaemonSet 部署 Fluentd 或 Filebeat,确保每个节点都有一个日志收集器。
  • 实例:
apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentd
spec:selector:matchLabels:name: fluentdtemplate:metadata:labels:name: fluentdspec:containers:- name: fluentdimage: fluent/fluentd:latestvolumeMounts:- name: varlogmountPath: /var/logvolumes:- name: varloghostPath:path: /var/log  # 挂载节点本地目录

监控代理

  • 需求:收集每个节点的资源指标(CPU、内存、磁盘等)。
  • 实现:使用 DaemonSet 部署 Prometheus Node Exporter 或 Datadog Agent。
  • 示例
apiVersion: apps/v1
kind: DaemonSet
metadata:name: node-exporter
spec:selector:matchLabels:app: node-exportertemplate:metadata:labels:app: node-exporterspec:containers:- name: node-exporterimage: prom/node-exporter:latestports:- containerPort: 9100

网络插件

  • 需求:为每个节点提供网络功能(如 CNI 插件)。
  • 实现:Calico、Flannel、Cilium 等网络插件通常以 DaemonSet 形式部署。
  • 示例(Calico)
apiVersion: apps/v1
kind: DaemonSet
metadata:name: calico-node
spec:selector:matchLabels:k8s-app: calico-nodetemplate:metadata:labels:k8s-app: calico-nodespec:containers:- name: calico-nodeimage: calico/node:latestenv:- name: CALICO_NETWORKING_BACKENDvalue: "bird"

存储插件

  • 需求:为节点提供本地存储或分布式存储访问能力。
  • 实现:Ceph CSI、NFS Client Provisioner 等存储插件通常以 DaemonSet 形式部署。
  • 示例(NFS Client)
apiVersion: apps/v1
kind: DaemonSet
metadata:name: nfs-client
spec:selector:matchLabels:app: nfs-clienttemplate:metadata:labels:app: nfs-clientspec:containers:- name: nfs-clientimage: quay.io/external_storage/nfs-client-provisioner:latestvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesvolumes:- name: nfs-client-rootnfs:server: nfs-server.example.compath: /exports

DaemonSet 的关键配置

节点选择(Node Selector)

  • 通过 nodeSelector 指定 DaemonSet 在哪些节点上运行
spec:template:spec:nodeSelector:disktype: ssd  # 仅在标签为 disktype=ssd 的节点上运行

污点容忍(Tolerations)

  • 如果节点有污点(Taint),DaemonSet 需要配置 tolerations 才能运行:
spec:template:spec:tolerations:- key: "node-role.kubernetes.io/master"operator: "Exists"effect: "NoSchedule"  # 允许在 Master 节点上运行

更新策略(Update Strategy)

  • RollingUpdate(默认):自动滚动更新 Pod(逐个节点更新)。
  • OnDelete:仅在手动删除 Pod 后更新(适用于需要严格控制更新的场景)。
spec:updateStrategy:type: RollingUpdate  # 或 OnDelete

资源限制

  • 为 DaemonSet 的 Pod 设置 CPU/内存限制:
spec:template:spec:containers:- name: fluentdimage: fluent/fluentd:latestresources:limits:cpu: "500m"memory: "512Mi"

 DaemonSet vs Deployment vs StatefulSet区别

特性DaemonSetDeploymentStatefulSet
部署目标每个节点运行一个 Pod任意数量的 Pod(可扩展)每个 Pod 有唯一标识和持久化存储
典型用例日志收集、监控代理、网络插件Web 服务、API 服务数据库、分布式存储、消息队列
节点绑定强制绑定到节点不绑定节点不绑定节点(除非配合 PVC)
更新策略RollingUpdate 或 OnDeleteRollingUpdate 或 RecreateRollingUpdate(有序更新)
扩展方式不能直接扩展(每个节点一个)可随意扩展副本数可扩展,但需考虑数据一致性
  • DaemonSet 适用于:需要在每个节点上运行一个守护进程的场景(如日志、监控、网络、存储)。
  • 与 Deployment 的区别:DaemonSet 强制在每个节点运行一个 Pod,而 Deployment 可以任意扩展副本数。
  • 与 StatefulSet 的区别:DaemonSet 不关心 Pod 的唯一标识或持久化存储,而 StatefulSet 会为每个 Pod 分配唯一名称并绑定 PVC。

CronJob 的核心概念

CronJob 是 Kubernetes 中的一种控制器资源,用于在预定的时间或周期性地运行任务(如备份、数据清理、日志轮转等)。它基于 Unix/Linux 的 cron 定时任务机制,但扩展到了 Kubernetes 集群环境中,支持容器化任务的调度。

什么是 CronJob?

  • 定义:CronJob 是 Kubernetes 中用于管理定时任务的资源,它会在指定的时间或周期性触发 Job(一次性任务),进而运行一个或多个 Pod。
  • 用途
    • 定时备份数据库(如每天凌晨 3 点执行)。
    • 定期清理临时文件或日志。
    • 定时发送通知或报告。
    • 执行批处理任务(如数据聚合、ETL)。

CronJob 的工作原理

Cron 表达式:定义任务的执行时间(如 0 3 * * * 表示每天凌晨 3 点)。

Job 创建:CronJob 根据 Cron 表达式创建 Job,Job 再创建 Pod 执行任务。

历史记录:默认保留最近 3 次成功的 Job(可配置)。

并发控制:支持禁止并发执行(避免上次任务未完成时新任务启动)。


CronJob 的关键组成部分

Cron 表达式

  • 格式分钟 小时 日 月 星期(共 5 个字段,用空格分隔)。
  • 示例
    • 0 3 * * *:每天凌晨 3 点执行。
    • */15 * * * *:每 15 分钟执行一次。
    • 0 0 * * 0:每周日午夜执行。
    • 0 2 1 * *:每月 1 日凌晨 2 点执行。
  • 时区支持:Kubernetes 1.25+ 支持通过 spec.timeZone 指定时区(如 Asia/Shanghai)。

Job 模板

  • CronJob 通过 spec.jobTemplate 定义要运行的 Job 配置,包括:
    • Pod 模板(镜像、命令、环境变量等)。
    • 重启策略(默认 Never,即任务失败不重试)。
    • 资源限制(CPU/内存)。

并发策略

  • Allow(默认):允许并发执行(上次任务未完成时新任务仍会启动)。
  • Forbid:禁止并发执行(上次任务未完成时跳过新任务)。
  • Replace:替换当前任务(取消上次任务并启动新任务)。

历史记录保留

  • successfulJobsHistoryLimit:保留成功的 Job 数量(默认 3)。
  • failedJobsHistoryLimit:保留失败的 Job 数量(默认 1)。

CronJob 的典型应用场景

定时备份数据库

apiVersion: batch/v1
kind: CronJob
metadata:name: mysql-backup
spec:schedule: "0 3 * * *"  # 每天凌晨 3 点jobTemplate:spec:template:spec:containers:- name: backupimage: mysql:5.7command: ["/bin/sh", "-c"]args: ["mysqldump -u root -ppassword mydb > /backup/mydb-$(date +\\%Y\\%m\\%d).sql"]volumeMounts:- name: backup-storagemountPath: /backupvolumes:- name: backup-storagepersistentVolumeClaim:claimName: backup-pvc  # 绑定到 PVCrestartPolicy: Never  # 任务失败不重试

 定期清理日志

 

apiVersion: batch/v1
kind: CronJob
metadata:name: clean-logs
spec:schedule: "0 0 * * *"  # 每天午夜jobTemplate:spec:template:spec:containers:- name: cleanerimage: busyboxcommand: ["/bin/sh", "-c"]args: ["find /var/log -name '*.log' -mtime +7 -delete"]volumeMounts:- name: varlogmountPath: /var/logvolumes:- name: varloghostPath:path: /var/log  # 挂载节点本地日志目录restartPolicy: Never

定时发送通知 

apiVersion: batch/v1
kind: CronJob
metadata:name: send-report
spec:schedule: "0 9 * * 1"  # 每周一上午 9 点jobTemplate:spec:template:spec:containers:- name: senderimage: curlimages/curlcommand: ["/bin/sh", "-c"]args: ["curl -X POST -H 'Content-Type: application/json' -d '{\"message\":\"Weekly report\"}' https://api.example.com/notify"]restartPolicy: Never

CronJob 的常见问题与排查

任务未执行

  • 检查 Cron 表达式:确认时间格式正确(如 0 3 * * * 不是 3 0 * * *)。
  • 检查时区:Kubernetes 1.25+ 支持 spec.timeZone,旧版本使用 UTC 时间。
  • 检查 Job 历史kubectl get jobs --sort-by='.metadata.creationTimestamp'

任务并发冲突

  • 如果任务执行时间超过间隔周期,需设置 concurrencyPolicy: Forbid 或 Replace

任务失败重试

  • CronJob 默认不重试失败任务(restartPolicy: Never),如需重试需在 Job 模板中配置:
backoffLimit: 3  # 失败后重试 3 次

查看任务日志

# 获取最近一次 Job 的名称
JOB_NAME=$(kubectl get jobs -l cronjob-name=hourly-task --sort-by='.metadata.creationTimestamp' -o jsonpath='{.items[-1].metadata.name}')# 查看 Pod 日志
kubectl logs -l job-name=$JOB_NAME


CronJob vs Deployment vs DaemonSet区别

特性CronJobDeploymentDaemonSet
用途定时任务(如备份、清理)长运行服务(如 Web 服务)节点级守护进程(如日志收集)
执行方式周期性创建 Job → Pod直接运行 Pod每个节点运行一个 Pod
生命周期任务完成后 Pod 终止Pod 持续运行Pod 持续运行
并发控制支持禁止并发(Forbid无并发控制(可扩展副本)无并发控制(每个节点一个)
典型用例数据库备份、日志轮转API 服务、微服务Fluentd、Node Exporter
  • CronJob 适用于:需要在固定时间或周期性执行的任务(如备份、清理、通知)。
  • 与 Deployment 的区别:CronJob 是临时任务,而 Deployment 是长期运行的服务。
  • 与 DaemonSet 的区别:CronJob 是定时任务,而 DaemonSet 是节点级守护进程。

 

 

 

 

 

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

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

相关文章

Vue + RuoYi 前后端分离入门手册

Vue RuoYi 前后端分离技术栈是一个非常流行且成熟的企业级后台管理系统开发方案&#xff0c;尤其在国内 Java 开发社区中广泛应用。它结合了现代化的前端框架 Vue.js 和基于 Spring Boot 的后端框架 RuoYi&#xff0c;提供了开箱即用的权限管理、代码生成、监控等功能&#xf…

JSON 安装使用教程

一、JSON 简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。它广泛应用于前后端数据通信、配置文件、API 传输等场景。 二、JSON 是否需要安装&#xff1f; 不需要…

十大网络协议

十大网络协议 标题1. HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;标题2. HTTPS&#xff08;Secure Hypertext Transfer Protocol&#xff0c;安全超文本传输协议&#xff09;标题3. HTTP/3标题4. TCP&#xff08;Transmission Control…

【语音告警】博灵智能语音报警灯Modbus TCP触发告警实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以Python代码为例&#xff0c;讲解如何通过Python代码调用博灵语音通知终端A4实现声光语音告警。 本代码实现Python触发Modbus写多寄存器和写单寄存器实现调用通知终端模板播报功能&#xff08;通知终端内置TTS语音合成技术&#xff0c;本案例不讲解如何文本转…

摄像头 rtsp数据量 和正常数据流有什么区别

摄像头RTSP数据流和正常数据流&#xff08;如HTTP传输的普通文件或网页数据&#xff09;在多个方面存在显著差异&#xff0c;主要体现在协议特性、数据量、实时性、应用场景等方面。以下是具体对比&#xff1a; 1. 协议与传输方式 RTSP流&#xff1a; 实时流协议&#xff08;R…

深入理解装饰器模式:动态扩展对象功能的灵活设计模式

深入理解装饰器模式&#xff1a;动态扩展对象功能的灵活设计模式 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界…

141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示

本文分享一个前端小技巧&#xff1a;借助 OpenLayers 的 Link 交互 在浏览器地址栏实时记录地图状态&#xff0c;同时把这些参数解析出来展示在页面上。 ✨ 双向同步&#xff1a;拖动、缩放、旋转地图时&#xff0c;URL 自动更新&#xff1b;手动修改 URL 或后退 / 前进&#x…

数字人的形象与内容,虚拟形象背后的权益暗战

&#xff08;首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助&#xff09; 当某科技公司的虚拟偶像在直播间收获百万打赏时&#xff0c;当某品牌的数字代言人形象被篡改成表情包全网传播时&#xff0c;当网红博主的AI分身开始替代真人直播带货时&#xff0c;一场关于数…

【python】pdf拆成图片,加中文,再合成pdf

前期搞了个pdf加页脚&#xff0c;但是搞了半天中文加不了&#xff0c;就换了个思路。 直接说结论&#xff0c;pdf拆成图片&#xff0c;加中文&#xff0c;再合成pdf&#xff0c;会导致pdf模糊。 import os import fitz # PyMuPDF from PIL import Image, ImageDraw, ImageFon…

分布式爬虫数据存储开发实战

分布式爬虫存储的核心矛盾在于&#xff1a;既要高吞吐又要强一致性&#xff0c;还要避免重复。比如Kafka虽然吞吐高但无法去重&#xff0c;Redis去重快但容量有限。所以我们可能低估了状态同步的复杂度——比如暂停爬虫时如何保证内存中的URL状态不丢失。 分布式爬虫的数据存储…

探秘阿里云Alibaba Cloud Linux:云时代的操作系统新宠

引言&#xff1a;云时代的操作系统变革 在云计算技术蓬勃发展的当下&#xff0c;企业的数字化转型进程被极大地加速&#xff0c;而作为云计算底层支撑的操作系统&#xff0c;也迎来了前所未有的变革与挑战。传统操作系统在应对云计算环境中的大规模资源调度、高弹性扩展以及安…

使用pyflink进行kafka实时数据消费

目录 背景 代码demo 踩坑记录 1、kafka连接器&#xff0c;kafka客户端jar包找不到 2、java模块系统访问限制 3、执行demo任务&#xff0c;一直报错连接kafka topic超时 总结 背景 实际项目中经常遇到source是kafka&#xff0c;需要实时消费kafka某个topic中的数据&#x…

软件测试理论框架与发展:分类、原则与质量保障策略

第一章 一、计算机软件的发展分类 早期软件开发的特点&#xff1a; 软件规模小、复杂程度低、开发过程不规范 测试的情况&#xff1a; 测试等同于调试 目的纠正软件的已经知道的故障 投入少&#xff0c;介入晚 成为一种发现软件的活动&#xff08;1957&#xff09; 测试不等于…

未知威胁攻击原理和架构

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 未知威胁&#xff08;Unknown Threats&#xff09;指利用零日漏洞、合法工具滥用、高级逃逸技术等**绕过传统特征检测**的攻击&#xff0c;其核心在于**动态对抗防御体系的认知盲区**。以下从攻击原理、…

基于Netty-WebSocket构建高性能实时通信服务

引言&#xff1a;WebSocket在现代应用中的重要性 在当今实时交互应用盛行的时代&#xff0c;WebSocket协议已成为实现双向通信的核心技术。相比传统的HTTP轮询&#xff0c;WebSocket提供了&#xff1a; 真正的全双工通信极低的延迟&#xff08;毫秒级&#xff09;高效的连接管…

咸虾米项目总结1--const用法

在 UniApp&#xff08;或 Vue 3&#xff09;中&#xff0c;声明一个空对象可使用下面这2种写法&#xff1a; // 写法1 const a ref(null);// 写法2 const a ref({}); 在UniApp中&#xff0c;const a ref()用法概述&#xff1a; 用途&#xff1a; 创建一个响应式引用&#x…

在mac下手动编译迁移的android版webrtc组件

我原先使用的android版webrtc是在linux下编译的&#xff0c;现在因为某些原因需要把整个库迁移到mac下编译。 把代码迁移完后&#xff0c;正常是需要通过gclient sync 重新构建编译环境&#xff0c;但是由于网络限制等方面原因&#xff0c;会导致完成的比较慢。 在摸索一阵后…

Linux 命令:mkdir

Linux mkdir 命令详细教程 一、mkdir 命令的基本功能 mkdir&#xff08;Make Directory&#xff09;是 Linux 系统中用于创建新目录&#xff08;文件夹&#xff09;的基础命令。它支持一次性创建单个或多个目录&#xff0c;以及递归创建多层目录结构&#xff0c;是文件系统操…

Django 数据迁移全解析:makemigrations migrate 常见错误与解决方案

1. 迁移机制与底层原理 在 Django 中&#xff0c;ORM&#xff08;Object-Relational Mapping&#xff09;是连接模型&#xff08;Model&#xff09;和数据库结构的桥梁。Django 鼓励开发者通过编写 Python 类&#xff08;模型&#xff09;来定义业务数据结构&#xff0c;而不是…

SuperGlue:使用图神经网络学习特征匹配

摘要 本文提出了 SuperGlue&#xff0c;一种神经网络&#xff0c;用于通过联合寻找对应关系并排除不可匹配点来匹配两组局部特征。匹配结果通过求解一个可微的最优传输问题来估计&#xff0c;该问题的代价由一个图神经网络预测。我们引入了一种基于注意力的灵活上下文聚合机制…