K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析
一、金丝雀发布概述
1.1 什么是金丝雀发布?
金丝雀发布(Canary Release)是一种渐进式部署策略,通过逐步将生产流量从旧版本迁移至新版本,结合实时指标验证,在最小化风险的前提下完成版本迭代。其核心逻辑如下:
-
流量分层:初始阶段仅将小比例流量(如 5%)路由至新版本,剩余流量仍由旧版本处理。
-
指标验证:监控新版本的关键指标(成功率、延迟、错误率),确认符合预期后逐步扩大流量比例。
-
自动化决策:基于预设阈值自动推进或回滚,降低人工干预成本。
技术价值:
-
风险可控:异常仅影响部分用户,快速隔离问题。
-
精准验证:结合业务指标(如交易成功率)而非单纯基础设施健康状态。
-
资源高效:无需双版本全量部署,节省计算资源。
1.2 金丝雀发布与蓝绿发布的差异
金丝雀发布适合高风险迭代、核心业务认证。蓝绿发布适合简单应用快速全量发布。
二、Argo Rollouts 能力解析
接下来我们聚焦 Argo Rollouts,是如何落地金丝雀发布策略并提供增强能力的。
2.1 核心能力
1.精细化流量控制
-
百分比权重控制:支持渐进式流量分配(如 5% → 50% → 100%),确保发布过程平滑过渡。
-
基于请求头的精准路由:可按特定 Header(如 X-User: beta)实现灰度测试,满足特定用户群验证需求。
2.多维监控与自动化决策
-
内置监控集成:支持与 Prometheus、Datadog 等主流监控系统无缝集成。
-
指标阈值配置:可定义关键业务指标,(如错误率 < 1%、响应时间 < 500ms)
-
自动回滚机制:当指标超出阈值时,自动触发回滚。
3.分阶段发布策略
可配置多步骤验证流程(示例):
steps:- setWeight: 20 # 第一阶段:20%流量- pause: {} # 手动确认后继续- setWeight: 50 # 第二阶段:50%流量- pause: {duration: 30s} # 自动暂停监控- setWeight: 100 # 全量发布
2.2 与原生 Deployment 的差异
三、金丝雀发布实战
使用 Argo Rollouts 搭配 Ingress-NGINX 实现金丝雀发布,实现流量按比例逐步迁移、暂停验证、自动推进的渐进式发布策略。
多维度验证目标
-
流量按照预设比例,逐步分流至新旧版本
-
支持通过请求 Header 实现精准流量控制
-
通过可视化 Dashboard 实时跟踪发布状态
环境准备 可以看其他K8S基础介绍的相关文章
3.1 项目结构
canary-deploy/
├── canary-rollout.yaml # 定义金丝雀策略
├── service-stable.yaml # 稳定版 Service(全流量入口)
├── service-canary.yaml # 金丝雀版 Service(灰度流量入口)
└── ingress-nginx.yaml # Ingress 权重路由配置
文件说明:
canary-rollout.yaml
使用 Argo Rollouts 定义金丝雀发布流程,包括流量权重控制、阶段发布和暂停机制。
service-stable.yaml
稳定版服务,默认承载全流量。
service-canary.yaml
金丝雀版服务,按权重接收灰度流量。
ingress-nginx.yaml
定义入口规则,配合 Argo Rollouts 实现流量路由与控制。
3.2 配置文件
1.Rollout 配置
canary-rollout.yaml
核心作用:定义金丝雀发布的阶段策略、流量权重等,及与 Ingress 的联动配置。是实现渐进式流量控制的核心资源对象。
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:name: canary-demolabels:app: canary-demo
spec:replicas: 1 # 启动一个副本用于测试selector:matchLabels:app: canary-demotemplate:metadata:labels:app: canary-demospec:containers:- name: canary-demoimage: argoproj/rollouts-demo:blue # 示例镜像,可替换为业务镜像imagePullPolicy: Alwaysports:- name: httpcontainerPort: 8080protocol: TCPresources:requests:memory: 32Micpu: 5mstrategy:canary: # 金丝雀发布策略canaryService: service-canary # 金丝雀服务stableService: service-stable # 稳定服务canaryMetadata:labels:deployment: canary # 金丝雀版本的标签stableMetadata:labels:deployment: stable # 稳定版本的标签trafficRouting:nginx:stableIngress: canary-demo # 关联 ingress-nginx.yaml 中的 IngressadditionalIngressAnnotations:canary-by-header: X-Canary # 支持按 Header 精准控制流量steps: # 金丝雀发布阶段控制- setWeight: 20 # 第一阶段:20% 流量进入金丝雀- pause: {} # 暂停,需要手动操作继续- setWeight: 50 # 第二阶段:50% 流量- pause:duration: 30s # 暂停 30 秒进行监控验证- setWeight: 100 # 第三阶段:100% 流量- pause:duration: 30s # 最后验证后全量切换
说明:
通过 Argo Rollouts 定义了金丝雀发布流程,包括:
每个阶段的流量比例,如 20%、50%。
阶段性暂停(手动或定时)用于人工确认或指标验证。
配置 canaryService 和 stable-Service,结合 Ingress 控制流量分流。
启用 Header(如 X-Canary)进行精细化流量控制。
2.Service 配置
设计逻辑:通过独立 Service 隔离新旧版本流量,结合 Ingress 权重控制实现渐进式迁移。
稳定版 Service
service-stable.yaml
apiVersion: v1
kind: Service
metadata:name: service-stablelabels:app: canary-demo
spec:selector:app: canary-demoports:- port: 80targetPort: httpprotocol: TCPname: http
金丝雀版 Service
service-canary.yaml
apiVersion: v1
kind: Service
metadata:name: service-canarylabels:app: canary-demo
spec:selector:app: canary-demoports:- port: 80targetPort: httpprotocol: TCPname: http
3.Ingress 配置
ingress-nginx.yaml
核心作用:负责入口流量的转发配置,并配合 Argo Rollouts 实现动态流量切分。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: canary-demolabels:app: canary-demoannotations:kubernetes.io/ingress.class: nginx # 指定使用 nginx ingress
spec:rules:- host: canary.auto # 访问域名http:paths:- path: /pathType: Prefixbackend:service:name: service-stable # 默认指向稳定版 Serviceport:name: http
3.3 部署与验证
步骤1:初始版本部署
1.创建命名空间并进入目录
# 创建独立命名空间
kubectl create ns canary-test
cd canary-deploy/ # 进入项目目录
2.应用资源配置
# 批量应用所有配置文件(Service/Ingress/Rollout)
kubectl apply -f . -n canary-test
步骤2:验证初始部署状态
# 检查资源创建状态(确保所有资源 READY)
kubectl get rollout,svc,ingress,pods -n canary-test
输出: 资源已被正确创建NAME STATUS AVAILABLE AGE
rollout.argoproj.io/canary-demo ✔ Healthy 1/1 2mNAME TYPE CLUSTER-IP PORT(S) AGE
service/service-canary ClusterIP 10.96.132.45 80/TCP 2m
service/service-stable ClusterIP 10.96.131.207 80/TCP 2mNAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/canary-demo nginx canary.auto 192.168.49.2 80 2mNAME READY STATUS RESTARTS AGE
pod/canary-demo-7d5f8c6c9d-abcde 1/1 Running 0 2m
步骤3:浏览器验证初始版本
获取访问入口信息
# 获取 Ingress 对外 IP 和端口(如果是云环境,使用 EXTERNAL-IP;本地集群如 minikube 使用 IP)
INGRESS_IP=$(kubectl get ingress canary-demo -n canary-test -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo "访问地址: http://$INGRESS_IP"
访问网页配置本地 hosts 文件:
127.0.0.1 canary.auto
浏览器访问:http://canary.auto
初始页面为蓝色版本。类似如下
步骤4:触发金丝雀发布
模拟版本更新
# 通过镜像更新触发发布流程(从 blue 切换到 green 版本)
kubectl argo rollouts set image canary-demo \canary-demo=argoproj/rollouts-demo:green -n canary-test
也可直接修改 canary-rollout.yaml 中镜像版本从blue 到 green,之后通过apply命令应用到集群。
步骤5:验证金丝雀发布(第一阶段 )
1.使用 Argo Rollouts CLI 观察部署过程
# 实时观察发布状态(新开终端执行)
kubectl argo rollouts get rollout canary-demo -n canary-test --watch
输出(第一阶段暂停时):Name: canary-demo
Namespace: canary-test
Status: ॥ Paused
Message: CanaryPauseStep
Strategy: CanaryStep: 1/6SetWeight: 20ActualWeight: 20
Images: argoproj/rollouts-demo:green (canary)argoproj/rollouts-demo:blue (stable)
2.浏览器流量验证(第一阶段 20% 流量)
操作 1:批量请求测试分流比例
# 发送 20 次请求统计版本分布(Linux/MacOS 环境)
for i in {1..20}; docurl -s "http://$INGRESS_IP" -H "Host: canary.auto" | grep "Pod Image"
done | sort | uniq -c
输出: 16 Pod Image: argoproj/rollouts-demo:blue (stable)4 Pod Image: argoproj/rollouts-demo:green (canary) # 约 20% 流量
操作2:浏览器访问 http://canary.auto
页面呈现 80% blue 方格 ,20% green 方块(新版本),类似下图:
操作 3:Dashboard 观测
# 启动 Argo Rollouts Dashboard(新终端执行)
kubectl argo rollouts dashboard -n canary-test
浏览器访问:http://localhost:3100,查看以下关键信息:金丝雀发布的完整步骤以及 当前所在阶段
版本健康状态指示等
类似下图:
操作 4:Header 强制路由验证
# 通过 X-Canary 头强制路由到金丝雀版本
curl -s "http://$INGRESS_IP" -H "Host: canary.auto" -H "X-Canary: always" | grep "Pod Image"
输出:Pod Image: argoproj/rollouts-demo:green (canary)
操作5:浏览器访问 http://canary.auto
页面 100% green 方块(新版本)
步骤 5:手动推进发布流程
方法1:命令
# 继续执行下一阶段(从 20% 提升至 50%)
kubectl argo rollouts promote canary-demo -n canary-test# 观察自动执行后续步骤(30秒后进入100%阶段)
方法2:Dashboard 上操作按下 Promote 按钮,Argo Rollouts 会根据策略自动执行后续步骤,即开始进入 50%和 70% 流量切换等。注:仅当 Rollout 处于 Paused 状态时,Promote 按钮才激活。
步骤 6:全量发布完成验证
流程执行到最终阶段:
# 检查最终版本状态
kubectl argo rollouts get rollout canary-demo -n canary-test
输出:全部切换到新版本 greenName: canary-demo
Namespace: canary-test
Status: ✔ Healthy
Strategy: CanaryStep: 6/6SetWeight: 100ActualWeight: 100
Images: argoproj/rollouts-demo:green (stable)
最终流量验证
# 发送 10 次请求确认全量切换
for i in {1..10}; docurl -s "http://$INGRESS_IP" -H "Host: canary.auto" | grep "Pod Image"
done
输出:Pod Image: argoproj/rollouts-demo:green (stable) # 全部请求
关键流程示意图
graph TDA[创建初始资源] --> B[触发金丝雀发布]B --> C{阶段1:20%流量}C -->|手动验证| D[人工确认后推进]D --> E{阶段2:50%流量}E -->|自动暂停30秒| F[监控指标检查]F --> G{阶段3:100%流量}G -->|自动暂停30秒| H[最终验证]H --> I[全量发布完成]
部署验证清单
步骤7:手动回滚操作
在 Dashboard 中找到目标 Rollout 资源。
点击 Actions 下拉菜单,选择 Abort and Rollback。
效果:当前的发布进程终止,并将流量切回旧版本。
四、金丝雀发布底层原理
4.1 核心机制:组件协作与流量控制
金丝雀发布的本质是由 Argo Rollouts 控制器动态协调 Ingress、Service 和 ReplicaSet 等 Kubernetes 原生资源,实现从旧版本到新版本的渐进式流量切换与灰度控制。整个过程无需手动干预,所有操作均由控制器按策略自动执行。
1.组件角色与交互
2.分阶段解析原理
下文以第三章 实例 为例 进行解析。
如下操作均由Argo Rollouts 控制器按策略文件自动执行,无需人为干预。
阶段1:初始状态(全流量稳定版)
A[用户请求] --> B[Ingress]B --> C[service-stable]C --> D[旧版本Pod]
原理解析:
service-stable通过标签(如 rollouts-pod-templatehash=6f8b8d584)选择旧版本 Pod。
Ingress 默认路由规则指向 service-stable,承载 100% 流量。
阶段2:金丝雀阶段(流量渐进切换)
首先环境准备:
创建新版本 ReplicaSet(如 canary-demo-67fc7c4899)。
生成 service-canary,标签选择器指向新版本 Pod。
Ingress 动态分流 ( 如下是分流示意图)
A[用户请求] --> B[Ingress]B -->|80%流量| C[service-stable]B -->|20%流量| D[service-canary]C --> E[旧版本Pod]D --> F[新版本Pod]
分阶段推进:
权重控制:通过调整新版本 Pod 的副本比例(如 1:4 → 20%流量)。
暂停机制:每个阶段可配置人工确认或自动等待(如 pause:{duration: 30m})。
阶段3:最终切换(全量发布)
原子化操作:
更新 service-stable的标签选择器,指向新版本 Pod。
缩容旧版本 ReplicaSet 至 0 副本。
最终状态:
A[用户请求] --> B[Ingress]B --> C[service-stable]C --> D[新版本Pod]
4.2 流量控制的两种模式
模式 1:按权重分配(副本比例控制)
实现原理:Argo Rollouts 动态调整新版本 Pod 的副本数,Ingress 根据副本比例自动分配流量。
示例:旧版本 4 副本 + 新版本 1 副本 → 新版本接收约 20% 流量。
优势:无需侵入式修改 Ingress 配置,适配 Kubernetes 原生负载均衡逻辑。
模式 2:按请求特征匹配(精准路由)
实现方式:在 Ingress 中配置 Header 匹配规则,实现定向灰度测试:
annotations:nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"nginx.ingress.kubernetes.io/canary-by-header-value: "beta"
典型场景:
定向邀请内测用户(如 X-Canary: beta)
A/B 测试新功能(如 X-Experiment: new-ui)
4.3 Argo Rollouts 协调逻辑流图
participant 用户participant ArgoRolloutsparticipant K8sAPIparticipant Ingress用户->>ArgoRollouts: 触发发布(修改镜像)ArgoRollouts->>K8sAPI: 创建新ReplicaSetK8sAPI-->>ArgoRollouts: 新Pod就绪ArgoRollouts->>K8sAPI: 调整副本比例(如20%)Ingress->>K8sAPI: 监听Endpoint变化Ingress->>Ingress: 按副本比例分配流量loop 分阶段推进ArgoRollouts->>ArgoRollouts: 等待人工确认/定时器ArgoRollouts->>K8sAPI: 提升副本比例(如50%)endArgoRollouts->>K8sAPI: 缩容旧ReplicaSet
4.4 资源生命周期管理
1.Service 管理
稳定版 Service:全程存在,发布后切换至新版本 Pod,保持服务入口稳定性。
金丝雀 Service:发布完成后闲置,需手动清理或标记为临时资源(如 env: canary-temp)。
2.ReplicaSet 管理
旧版本:缩容至 0 副本,保留配置以支持秒级回滚。
新版本:长期保留,直至下次更新。
3.最佳实践
自动化清理:
# 清理7天前的临时资源
kubectl delete rs,svc -l env=canary-temp --field-selector="metadata.creationTimestamp<$(date -d '7 days ago' +%s)"
快速回滚:kubectl argo rollouts undo <ROLLOUT_NAME>
4.5 金丝雀原理总结
1.核心原理
动态副本控制:通过调整 Pod 副本比例实现流量权重分配。
原子化切换:最终通过更新 Service 选择器和缩容旧版本完成全量发布。
2.技术优势
精准可控:支持流量比例与用户特征双重策略。
无缝切换:旧版本保留至最终阶段,确保回滚能力。
五、总结
5.1 核心总结
本文聚焦基于 Argo Rollouts 的金丝雀发布实战,通过精细化流量控制、阶段性发布策略和 Ingress 权重路由,构建了一个可操作、可观测的渐进式发布流程。
我们深入解析了 Argo Rollouts 的底层原理,包括:
流量权重分配与阶段推进;
Header 精准路由的灰度测试;
与 Ingress-NGINX 联动,实现流量控制与流量转发的分离。
在实战中,我们构建了从配置到上线的自动化金丝雀发布全过程。
相关文章:

K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析
一、金丝雀发布概述 1.1 什么是金丝雀发布? 金丝雀发布(Canary Release)是一种渐进式部署策略,通过逐步将生产流量从旧版本迁移至新版本,结合实时指标验证,在最小化风险的前提下完成版本迭代。其核心逻辑…...

Qt中数据结构使用自定义类————附带详细示例
文章目录 C对数据结构使用自定义类1 QMap使用自定义类1.1 使用自定义类做key1.2 使用自定义类做value 2 QSet使用自定义类 参考 C对数据结构使用自定义类 1 QMap使用自定义类 1.1 使用自定义类做key QMap<key,value>中数据存入时会对存入key值的数据进行比较ÿ…...

数据可视化与分析
数据可视化的目的是为了数据分析,而非仅仅是数据的图形化展示。 项目介绍 项目案例为电商双11美妆数据分析,分析品牌销售量、性价比等。 数据集包括更新日期、ID、title、品牌名、克数容量、价格、销售数量、评论数量、店名等信息。 1、数据初步了解…...
基于大模型预测的产钳助产分娩全方位研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 二、产钳助产分娩概述 2.1 产钳助产定义与历史 2.2 适用情况与临床意义 三、大模型预测原理与数据基础 3.1 大模型技术原理 3.2 数据收集与处理 3.3 模型训练与验证 四、术前预测与准备 4.1 大模型术前风险预…...
通过混合机器学习和 TOPSIS 实现智能手机身份验证的稳健行为生物识别框架
1. 简介 随着日常工作、个人生活和金融操作对智能手机的依赖性不断增强,对弹性安全身份验证系统的需求也日益增长。尽管 PIN 码、密码和静态生物识别等传统身份验证方法仍可为系统提供一定的安全级别,但事实证明,它们容易受到多种威胁,包括敏感数据泄露、网络钓鱼、盗窃和…...

旅游设备生产企业的痛点 质检系统在旅游设备生产企业的应用
在旅游设备制造行业,产品质量直接关系到用户体验与企业口碑。从景区缆车、观光车到水上娱乐设施,每一件设备的安全性与可靠性都需经过严苛检测。然而,传统质检模式常面临数据分散、流程不透明、合规风险高等痛点,难以满足旅游设备…...

使用ESPHome烧录固件到ESP32-C3并接入HomeAssistant
文章目录 一、安装ESPHome二、配置ESP32-C3控制灯1.主配置文件esp32c3-luat.yaml2.基础通用配置base.yaml3.密码文件secret.yaml4.围栏灯four_light.yaml5.彩灯rgb_light.yaml6.左右柱灯left_right_light.yaml 三、安装固件四、HomeAssistant配置ESPHome1.直接访问2.配置ESPHom…...
【漫话机器学习系列】237. TSS总平方和
深度理解 TSS(总平方和):公式、意义与应用 在机器学习与统计建模领域,评价模型好坏的重要指标之一就是方差与误差分析。其中,TSS(Total Sum of Squares,总平方和)扮演着非常关键的角…...

DeepSeek多尺度数据:无监督与原则性诊断方案全解析
DeepSeek 多尺度数据诊断方案的重要性 在当今的 IT 领域,数据如同石油,是驱动各类智能应用发展的核心资源。随着技术的飞速发展,数据的规模和复杂性呈爆炸式增长,多尺度数据处理成为了众多领域面临的关键挑战。以计算机视觉为例,在目标检测任务中,小目标可能只有几个像素…...

Spring Framework 6:虚拟线程支持与性能增强
文章目录 引言一、虚拟线程支持:并发模型的革命二、AOT编译与原生镜像优化三、响应式编程与可观测性增强四、HTTP接口客户端与声明式HTTP五、性能比较与实际应用总结 引言 Spring Framework 6作为Spring生态系统的基础框架,随着Java 21的正式发布&#…...
用Redisson实现库存扣减的方法
Redisson是一个在Redis基础上实现的Java客户端,提供了许多高级功能,包括分布式锁、计数器、集合等。使用Redisson实现库存扣减可以保证操作的原子性和高效性。本文将详细介绍如何使用Redisson实现一个简单的库存扣减功能。 一、初始化Redisson客户端 首…...
视频转GIF
视频转GIF 以下是一个使用 Python 将视频转换为 GIF 的脚本,使用了 imageio 和 opencv-python 库: import cv2 import imageio import numpy as np """将视频转换为GIF图参数:video_path -- 输入视频的路径gif_path -- 输出GIF的路径fp…...

一场静悄悄的革命:AI大模型如何重构中国产业版图?
一场静悄悄的革命:AI大模型如何重构中国产业版图? 当ChatGPT在2022年掀起全球AI热潮时,很少有人意识到,这场技术变革正在中国产业界掀起更深层次的革命。在浙江宁波,一个纺织企业老板打开"产业链智能创新平台",30秒内就获得了原料采购、设备升级、海外拓客的全…...
kotlin 02flow-sharedFlow 完整教程
一 sharedFlow是什么 SharedFlow 是 Kotlin 协程中 Flow 的一种 热流(Hot Flow),用于在多个订阅者之间 共享事件或数据流。它适合处理 一次性事件(如导航、弹窗、Toast、刷新通知等),而不是持续状态。 ✅ …...

CentOS网络之network和NetworkManager深度解析
文章目录 CentOS网络之network和NetworkManager深度解析1. CentOS网络服务发展历史1.1 传统network阶段(CentOS 5-6)1.2 过渡期(CentOS 7)1.3 新时代(CentOS 8) 2. network和NetworkManager的核心区别3. ne…...
【AI】模型与权重的基本概念
在 ModelScope 平台上,「模型」和「权重」的定义与工程实践紧密结合,理解它们的区别需要从实际的文件结构和加载逻辑入手。以下是一个典型 ModelScope 模型仓库的组成及其概念解析: 1. ModelScope 模型仓库的典型结构 以 deepseek-ai/deepse…...
设计模式-基础概念学习总结(继承、多态、虚方法、方法重写)
概念使用例子的方式介绍(继承,多态,虚方法,方法重写),实现代码python 1. 继承(Inheritance) 概念:子类继承父类的属性和方法,可以直接复用父类的代码&#…...
2025年小程序DDoS与CC攻击防御全指南:构建智能安全生态
2025年,小程序已成为企业数字化转型的核心载体,但随之而来的DDoS与CC攻击也愈发复杂化、智能化。攻击者利用AI伪造用户行为、劫持物联网设备发起T级流量冲击,甚至通过漏洞窃取敏感数据。如何在高并发业务场景下保障小程序的稳定与安全&#x…...

当当狸智能天文望远镜 TW2 | 用科技触摸星辰,让探索触手可及
当科技邂逅星空,每个普通人都能成为宇宙的追光者 伽利略用望远镜揭开宇宙面纱的 400 年后,当当狸以颠覆传统的设计,让天文观测从专业领域走入千家万户。当当狸智能天文望远镜 TW2,重新定义「观星自由」—— 无需专业知识ÿ…...
QT实现曲线图缩放、拖拽以及框选放大
.h文件 protected: void saveAxisRange();void wheelEvent(QWheelEvent *event) override;void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;private:QPoint m_…...
C# | 基于C#实现的BDS NMEA-0183数据解析上位机
以下是一个基于C#实现的BDS NMEA-0183数据解析上位机的示例代码,包含基础功能和界面: using System; using System.Collections.Generic; using System.IO.Ports; using System.Windows.Forms; using System.Drawing; using System.Globalization;namespace BDS_NMEA_Viewer…...

科学发现 | 源于生活的启示与突破计划的创新
注:本文为“科学发现”相关文章合辑。 略作重排,未全整理。 哪些重大科学发现,来自生活的启示 ︱ 科学史 2020/10/29 导读 好奇心是最好的向导和老师。 撰文 | 陈敬全(东华大学人文学院教授) 英国进化论者赫胥黎…...

【ArcGIS微课1000例】0145:如何按照自定义形状裁剪数据框?
文章目录 一、添加数据二、绘制形状三、裁剪格网和经纬网一、添加数据 打开软件,添加配套实验数据包中0145.rar中的影像数据,如下图所示: 二、绘制形状 1. 在数据视图中,使用绘图 工具条上的新建圆工具 可创建一个椭圆,使其包含要在该数据框中显示的数据范围。 修改椭圆…...

网络安全防火墙技术有哪些?网络防火墙的主要作用
网络安全防火墙技术有哪些?网络防火墙的主要作用 网络安全防火墙技术是保护网络免受未经授权访问和攻击的关键工具。以下是常见的防火墙技术及其主要作用: 一、网络安全防火墙技术分类 包过滤防火墙(Packet Filtering Firewall) 原理&#x…...

数据集-目标检测系列- 印度人脸 检测数据集 indian face >> DataBall
数据集-目标检测系列- 印度人脸 检测数据集 indian face >> DataBall DataBall 助力快速掌握数据集的信息和使用方式。 贵在坚持! * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s…...

Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
版本: 原因 在 Dart Sass 3.0.0 中, @import 规则将被弃用,推荐使用 @use 和 @forward 规则来替代。 1.@use替代@import @use 规则允许你引入其他 Sass 文件中的变量、混合器和函数,并且可以避免命名冲突。 示例: style.scss @use variables;body {color: variables.$pr…...
通过CIDR推出子网掩码和广播地址等
写在前面 不知道你遇到过这种面试题没,给你CIDR,让你推理子网掩码等信息。如果你不会,那本文刚好适合你。 1:一个面试题16.158.165.91/22 这个 CIDR。求一下这个网络的第一个地址、子网掩码和广播地址。 一般如果你对CIDR知识有…...

【工具教程】批量提取PDF指定内容并重命名,PDF文档根据指定识别文字改名,基于java的实现方案
物流单据处理:每天处理大量发货单PDF,提取订单编号、发货方信息等关键字段重命名文件 合同管理:从合同PDF中提取合同编号、签署方名称等作为文件名 学术论文整理:根据论文标题或作者信息重命名PDF文件 财务票据…...
std::iota(C++)
std::iota 1. 概述2. 函数原型3. 使用示例示例 1:填充 vector<int>示例 2:从非零起始值开始 4. 应用场景5. 注意事项6. 与其它算法比较小结 1. 概述 std::iota 定义在头文件 中,C11 起引入。 它用于向前迭代器区间依次填入连续递增的数…...
【IP101】图像特征提取技术:从传统方法到深度学习的完整指南
🌟 特征提取魔法指南 🎨 在图像处理的世界里,特征提取就像是寻找图像的"指纹",让我们能够识别和理解图像的独特性。让我们一起来探索这些神奇的特征提取术吧! 📚 目录 基础概念 - 特征的"体…...