K8s-pod 調度基礎

目錄

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;該問題的代價由一個圖神經網絡預測。我們引入了一種基于注意力的靈活上下文聚合機制…