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

K8S - HPA + 探针实战 - 实现弹性扩缩与自愈

引言

在分布式系统中,弹性扩缩容与 服务自愈是保障业务高可用的核心能力。Kubernetes 通过自动化机制实现两大关键功能:

• 动态扩缩容:基于 CPU/内存负载自动调整 Pod 副本数量,应对流量波动。

• 故障自愈:通过健康探针自动重启异常容器,并剔除未就绪实例,确保服务零中断。

一、Kubernetes 弹性扩缩容原理

1. 水平自动扩缩容(HPA)

• 监控指标:实时采集 Pod 的 CPU/内存使用率。

• 动态调整:指标超阈值时自动扩展,负载下降后自动收缩。

2. 服务自愈机制

• 存活探针(Liveness Probe):定期检测容器健康状态,失败时自动重启容器。

• 就绪探针(Readiness Probe):检查容器是否就绪,未就绪时从 Service 移除流量,避免请求分发至异常实例。

二、K8S 自愈与扩缩容实战

2.1 环境准备

1. 安装必要工具

确保已安装并配置好以下环境:

Kubernetes 集群(可使用 Minikube 或 Kind 进行本地测试)

kubectl命令行工具

Docker(用于构建镜像)

2. 创建本地集群(Kind)

kind-cluster.yamlkind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-planekubeadmConfigPatches:- |kind: InitConfigurationnodeRegistration:kubeletExtraArgs:node-labels: "ingress-ready=true"  extraPortMappings:    - containerPort: 80hostPort: 80protocol: TCP- containerPort: 443hostPort: 443protocol: TCP

创建并验证集群

# 创建集群(名称 local-k8s)
kind create cluster --name local-k8s --config kind-cluster.yaml
# 验证节点状态
kubectl get nodes
# 预期输出:显示一个 control-plane 节点为 Ready 状态

2.2 业务代码

1. 项目结构

k8s-scaling-selfheal/
├── app/
│   ├── myapp.py          # Flask 应用代码
│   └── Dockerfile         # Docker 镜像构建文件
├── k8s/
│   ├── deployment.yaml    # Deployment 配置
│   ├── hpa.yaml           # HPA(Horizontal Pod Autoscaler)
│   ├── service.yaml       # Service 资源
│   └── ingress.yaml       # Ingress 路由配置
└── README.md

2. 业务代码(Python 示例)

app/myapp.py

from flask import Flask
import osapp = Flask(__name__)@app.route("/")
def hello():return "Hello, Kubernetes!"@app.route("/healthz")
def health():# 假设这里你可以增加一些更复杂的健康检查逻辑return "OK", 200if __name__ == "__main__":app.run(host="0.0.0.0", port=int(os.getenv("PORT", 5000)))

app/requirements.txt

Flask==2.2.2

Dockerfile

FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "myapp.py"]

2.3 构建镜像并加载到集群

# 1. 构建镜像
docker build -t baixin005/hello-k8s-flask:latest .# 2. 加载镜像到集群(名称一致!)
kind load docker-image baixin005/hello-k8s-flask:latest --name local-k8s# 3. 验证镜像已加载
kubectl describe node local-k8s-control-plane | grep "hello-k8s-flask"
# 输出示例:docker.io/baixin005/hello-k8s-flask:latest

Kind 集群特性:

• 镜像加载后直接存储在集群节点中,无需推送至远程仓库。

• 若修改代码并重新构建镜像,需要重新执行 kind load命令。

• Kind Load 仅用于本地测试,生产环境需推送镜像到远程仓库(如Docker hub)。

2.4 Kubernetes 资源配置

1. 创建 Deployment并应用到集群
步骤1: 生成 Deployment

kubectl create deployment hello-k8s-flask \--image=baixin005/hello-k8s-flask:latest \--replicas=2 \--dry-run=client -o yaml > k8s/deployment.yaml

补充后的 Deployment.yaml

# k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: hello-k8s-flasklabels:app: hello-k8s-flask  # Deployment 标签(用于分类管理)
spec:replicas: 2  # 初始副本数selector:matchLabels:app: hello-k8s-flask  # 必须与 Pod 模板标签一致template:metadata:labels:app: hello-k8s-flask  # Pod 标签(用于 Service/Ingress 流量路由)spec:containers:- name: hello-k8s-flask  image: baixin005/hello-k8s-flask:latest  # 镜像地址ports:- containerPort: 5000  # 容器监听端口(与 Flask 应用的 port=5000 一致)resources:requests:cpu: "100m"    # 初始 CPU 请求(0.1 核,HPA 依赖此值计算利用率)memory: "100Mi" # 初始内存请求(HPA 也可监控内存)limits:cpu: "200m"    # CPU 上限(防止单个 Pod 过度消耗资源)memory: "200Mi" # 内存上限(防止内存泄漏导致节点故障)livenessProbe:     # 存活探针httpGet:path: /healthz  # 健康检查接口port: 5000initialDelaySeconds: 15  # 容器启动后等待 15 秒开始探测periodSeconds: 10        # 每 10 秒探测一次readinessProbe:    # 就绪探针httpGet:path: /         # 就绪检查接口port: 5000initialDelaySeconds: 5periodSeconds: 5           

关键配置说明:
在这里插入图片描述

步骤2:部署及验证

# 1. 应用 Deployment
kubectl apply -f k8s/deployment.yaml
# 2. 验证 Pod 状态
kubectl get pods -l app=hello-k8s-flask
# 预期输出:
# NAME                                 READY   STATUS    RESTARTS   AGE
# hello-k8s-flask-56457fc57c-jkh4k     1/1     Running   0          10s
# hello-k8s-flask-56457fc57c-r246t     1/1     Running   0          10s
# 3. 查看资源分配详情
kubectl describe pod <pod-name> | grep -A 5 "Requests"
# 预期输出:
#     Requests:
#       cpu:        100m
#       memory:     100Mi
#     Limits:
#       cpu:        200m
#       memory:     200Mi

2.负载均衡环境搭建
步骤1:创建service

service资源类似VM框架下的弹性伸缩组的负载均衡器,它能以加权轮询的方式将流量转发到多个pod 副本上。

kubectl create service clusterip hello-k8s-flask --tcp=5000:5000 --dry-run=client -o yaml > k8s/service.yaml

service.yaml

# k8s/service.yaml
apiVersion: v1
kind: Service
metadata:name: hello-k8s-flask
spec:ports:- name: "5000"port: 5000protocol: TCPtargetPort: 5000selector:app: hello-k8s-flask  # 必须与 DeploymentPod 的标签一致type: ClusterIP

关键配置说明

端口映射:

• port: 5000

Service 对外暴露的端口(集群内访问用)。

• targetPort: 5000

容器内部监听的端口(需与 Flask 应用 app.run(port=5000)一致)。

步骤2:部署并验证Service

kubectl apply -f k8s/service.yaml

查看 Service 状态

kubectl get svc hello-k8s-flask
# NAME                TYPE        CLUSTER-IP      PORT(S)    AGE
# hello-k8s-flask     ClusterIP   10.96.123.45    5000/TCP   10s

检查 Endpoints

kubectl describe svc hello-k8s-flask | grep Endpoints
# Endpoints:         10.244.0.10:5000,10.244.0.11:5000

步骤3:部署 Ingress-Nginx

# 1. 部署 Ingress-Nginx(官方源)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/kind/deploy.yaml
# 2. 验证状态
kubectl get pods -n ingress-nginx
# NAME                                        READY   STATUS    RESTARTS   AGE
# ingress-nginx-controller-5d88495688-s4p7g   1/1     Running   0          2m
# 3. 查看镜像地址(确认无第三方仓库)
kubectl describe pod -n ingress-nginx ingress-nginx-controller-xxxx | grep Image
#   Image:         registry.k8s.io/ingress-nginx/controller:v1.8.2

部署4:创建集群的外网访问入口 ingress

kubectl create ingress hello-k8s-flask --rule="/=hello-k8s-flask:5000"
ingress.yaml
# k8s/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: hello-k8s-flask
spec:ingressClassName: nginx  # 与 Ingress-Nginx 控制器匹配rules:- http:paths:- path: /pathType: Prefixbackend:service:name: hello-k8s-flask  # 指向 Service 名称port:number: 5000         # 指向 Service 端口

步骤5:应用 ingress 到集群

kubectl apply -f k8s/ingress.yaml

步骤6:验证部署与应用
1. 验证pod 正常启动。
注意: 通过 deployment 建立的pod副本名字后具有随机后缀,与工作负载是pod 的建立不同。

kubectl get pods
NAME                                 READY   STATUS    RESTARTS       AGE
hello-k8s-flask-56457fc57c-jkh4k   1/1     Running   0              32m
hello-k8s-flask-56457fc57c-r246t   1/1     Running   1 (106s ago)   32m

预期结果:所有 Pod 处于 Running状态,且 READY为 1/1。

失败排查:查看 Pod 详情 kubectl describe pod ,或查看日志 kubectl logs 。

2. 验证 Service 流量转发

# 集群内部访问测试
kubectl run test --rm -it --image=busybox --restart=Never -- wget -qO- http://hello-k8s-flask:5000
# 预期输出:Hello, Kubernetes! from Pod: <pod-name>
失败排查:
•确保 Service 正确映射端口 kubectl describe svc hello-k8s-flask。•检查 Pod 端口是否正确 kubectl get pods -o wide。

3. 验证 Ingress 外部访问

# 获取 Ingress 外部地址(Kind 集群为 localhost)
kubectl get ingress
# 预期输出:
# NAME                CLASS   HOSTS   ADDRESS     PORTS   AGE
# hello-k8s-flask     nginx   *       localhost   80      5m# 通过 Ingress 访问应用
curl http://localhost
# 预期输出:Hello, Kubernetes! from Pod: <pod-name>

到此已完成镜像到集群的部署,可以进行 K8S 自愈和扩缩容演示了。

2.4 K8S 自愈能力演示
步骤 1:模拟持续访问

# 持续发送请求,观察流量分配
while true; do sleep 1; echo -e "\n$(date)"; curl http://127.0.0.1; done# 预期输出(交替显示两个 Pod 名称):
# Hello, Kubernetes! from Pod: hello-k8s-flask-56457fc57c-jkh4k
# Hello, Kubernetes! from Pod: hello-k8s-flask-56457fc57c-r246t

步骤 2:模拟 Pod 宕机

# 选择一个 Pod 名称(例如 hello-k8s-flask-56457fc57c-r246t)
POD_NAME=$(kubectl get pods -l app=hello-k8s-flask -o jsonpath='{.items[0].metadata.name}')# 手动杀死容器进程(模拟宕机)
kubectl exec -it $POD_NAME -- bash -c "killall python3"

步骤 3:观察自愈过程

# 监控 Pod 状态变化
kubectl get pods -w
# 预期现象:
# 1. 宕机 Pod 状态变为 `Error`,随后自动重启(RESTARTS+1)
# 2. 请求流量全部转移到健康 Pod
# 3.30 秒后,宕机 Pod 恢复为 `Running` 

步骤 4:验证最终状态

# 查看所有 Pod 状态
kubectl get pods -l app=hello-k8s-flask
# 预期输出:
# NAME                                READY   STATUS    RESTARTS   AGE
# hello-k8s-flask-56457fc57c-jkh4k   1/1     Running   0          35m
# hello-k8s-flask-56457fc57c-r246t   1/1     Running   1          35m

2.5 K8S自动扩缩容能力演示
步骤 1:安装 Metrics Server

# 部署 Metrics Server(监控 CPU/内存)
kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/kubernetes-sigs/metrics-server/v0.7.0/deploy/extra/missing.yaml# 等待 metrics 就绪
kubectl wait deployment -n kube-system metrics-server --for condition=Available=True --timeout=90s

步骤 2:配置 HPA 策略

# 创建自动扩容策略(CPU 阈值 50%,副本数 2-10)
kubectl autoscale deployment hello-k8s-flask --cpu-percent=50 --min=2 --max=10# 验证 HPA 状态
kubectl get hpa
# NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
# myapp   Deployment/myapp   0%/50%    2         10        2          10s

hpa.yaml

# k8s/hpa.yamlapiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: hello-k8s-flask  # HPA 的名称,需与 Deployment 名称匹配
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: hello-k8s-flask  # 目标 Deployment,HPA 监控该 Deployment 进行扩缩容minReplicas: 2  # 最少副本数,保证服务的基础可用性maxReplicas: 10  # 最大副本数,避免资源消耗过大metrics:- type: Resourceresource:name: cpu  # 监控 CPU 资源target:type: Utilization  # 使用 CPU 利用率作为扩缩容指标averageUtilization: 50  # 目标 CPU 使用率(%),超过该值则扩容,低于该值则缩容

部署hpa 到集群

kubectl apply -f k8s/hpa.yaml

步骤 3:触发扩容

# 进入 Pod 执行压测
POD_NAME=$(kubectl get pods -l app=hello-k8s-flask -o jsonpath='{.items[0].metadata.name}')
kubectl exec -it $POD_NAME -- bash
apt update && apt install -y apache2-utils
ab -c 50 -n 10000 http://hello-k8s-flask:5000/

步骤 4:监控扩容过程

# 新终端窗口执行(观察 Pod 数量变化)
watch kubectl get pods,hpa# 预期现象:
# 1. 1-2 分钟后,Pod 数量逐步增加(最多 10 个)
# 2. HPA 的 `TARGETS` 列显示 CPU 使用率超过 50%
步骤 5:验证缩容
# 停止压测后等待 5 分钟,观察 Pod 数量逐步恢复至 2 个
kubectl get pods -w# 预期输出:
# NAME                                READY   STATUS    RESTARTS   AGE
# hello-k8s-flask-8f57b8494-brqz7     1/1     Running   0          11m
# hello-k8s-flask-8f57b8494-d26tg     1/1     Running   0          11m

三、总结

3.1 核心总结
自愈能力:通过探针机制自动恢复故障容器,保障服务连续性。
弹性扩缩容:基于资源指标动态调整副本数,优化资源利用率。

核心资源协作

• Deployment管理 Pod 生命周期

• Service提供负载均衡

• HPA实现弹性伸缩,

• Ingress暴露外部访问入口

相关文章:

K8S - HPA + 探针实战 - 实现弹性扩缩与自愈

引言 在分布式系统中&#xff0c;弹性扩缩容与 服务自愈是保障业务高可用的核心能力。Kubernetes 通过自动化机制实现两大关键功能&#xff1a; • 动态扩缩容&#xff1a;基于 CPU/内存负载自动调整 Pod 副本数量&#xff0c;应对流量波动。 • 故障自愈&#xff1a;通过健…...

永磁同步电机控制算法--线性ADRC转速环控制器(一阶、二阶)

一、原理介绍 搭建一阶、二阶线性ADRC转速环控制器&#xff0c;通常一阶ADRC包括一阶LTD、二阶LESO、LSEF&#xff0c;二阶ADRC包括二阶LTD、三阶LESO、LSEF。 原理部分参考了这篇知乎自抗扰控制-ADRC - 知乎。 二、仿真验证 在MATLAB/simulink里面验证所提算法&#xff0c…...

泰迪杯特等奖案例学习资料:基于多模态数据融合与边缘计算的工业设备健康监测与预测性维护系统

(第十三届泰迪杯数据挖掘挑战赛特等奖案例解析) 一、案例背景与核心挑战 1.1 应用场景与行业痛点 在智能制造领域,工业设备(如数控机床、风力发电机)的健康状态直接影响生产效率和运维成本。传统维护方式存在以下问题: 故障响应滞后:依赖定期检修,突发故障导致停机损…...

4.29[Q]NLP-Exp2

我正在完成自然语言处理作业&#xff0c;&#xff1f;阅读文档&#xff0c;详细解释&#xff0c;越细节越好 class TextCNN(object): def __init__(self, config): self.config config self.preprocessor Preprocessor(config) self.class_name {0: 负面, 1: 正面} def buil…...

前端开发 Markdown 编辑器与富文本编辑器详解

一、现有开源项目分析 1. Markdown 编辑器 项目名称 技术栈 核心特性 适用场景 Editor.md JavaScript/Node.js 支持 GFM、代码块、流程图、数学公式&#xff0c;兼容 IE8&#xff0c;提供主题切换功能 技术博客、网页站、在线文档 Bytemd Svelte/Vue/Re…...

GCC-C语言“自定义段”

一、起因 事情的起因是这样的,在看别人代码时,发现了一种很有意思的写法,因为本人主要是以应用层开发为主,所以对这种写法还是比较少见的,所以研究了一下,就牵扯出了一些知识点,这里先卖个关子,继续往下看。 二、经过 发现了一串这样的代码 static void do_mac(mcmd_…...

2025年4月个人工作生活总结

本文为 2025年4月工作生活总结。 研发编码 一个项目的临时记录 自2月份领导让我牵头负责一个项目起&#xff0c;在本月算是有较多时间投入——但也是与之前的相比。 月初&#xff0c;清明节前一晚上&#xff0c;因某事务被叫上参加临时紧急远程会议&#xff0c;几方领导都在…...

B/S架构:定义、原理及其在软件测试中的应用

引言 在当今互联网时代&#xff0c;B/S架构已成为软件开发的主流模式之一。作为软件测试工程师&#xff0c;深入理解B/S架构的定义和工作原理&#xff0c;对于设计有效的测试策略至关重要。本文将全面解析B/S架构&#xff0c;并探讨其在软件测试中的特殊考量。 一、B/S架构的…...

【Android】文件导出到本地或者U盘

项目需求 在使用Android 9平板开发的时候&#xff0c;项目更新了一个新的需求&#xff0c;现在需要检测设备是否插入U盘&#xff0c;如果没有U盘的话&#xff0c;就将文件导出到系统根目录&#xff0c;如果有U盘的话&#xff0c;就将文件导出到U盘里面。 项目实现 1.实现文件…...

在Electron中爬取CSDN首页的文章信息

背景 之前分享了Electron入门的相关文章&#xff1a;https://gitee.com/ruirui-study/electron-demo 后来&#xff0c;我就想在里面多做一些演示给大家看&#xff0c;集成了以下功能及演示&#xff1a; 窗口管理、各种方法封装托盘管理菜单管理获取屏幕演示多窗口及通信演示…...

论文阅读:2024 EMNLP User Inference Attacks on Large Language Models

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 User Inference Attacks on Large Language Models https://arxiv.org/pdf/2310.09266 https://www.doubao.com/chat/4034601691207170 速览 这篇论文主要研究了大语言模…...

学习记录:DAY21

我的开发日志&#xff1a;类路径扫描、DI 容器与动态代理 前言 我失忆了&#xff0c;完全不记得自己早上干了什么。 日程 早上 10 点左右开始&#xff0c;学了一早上&#xff0c;主要是类路径扫描相关的调试。 晚上 8 点了&#xff0c;真不能再摸&#x1f41f;了。 学习记录 计…...

服务器频繁重启日志分析与诊断

从你提供的日志来看&#xff0c;系统确实经历了多次重启。这个日志行显示的是&#xff1a; reboot system boot 6.8.0-58-generic Tue Apr 29 17:54 - 14:26 (20:31)这表示系统在4月29日17:54启动&#xff0c;运行了约20小时31分钟后&#xff0c;于次日14:26结束&#xff08;可…...

阿里云服务迁移实战: 07-其他服务迁移

概述 当完成了服务器、数据库、IP、OSS等迁移后&#xff0c;剩下的就是其他服务了。 短信网关 短信模板只能一个个创建&#xff0c;不能批量操作。但是可以使用以下方式优化操作。 在原账号导出模板列表 概述 当完成了服务器、数据库、IP、OSS等迁移后&#xff0c;剩下的…...

第六章 QT基础:9、Qt中数据库的操作

Qt数据库模块概述与使用详解 软件安装教程&#xff1a;https://subingwen.cn/qt/sql-driver/ 1. 概述 Qt框架中对数据库操作提供了很好的支持&#xff0c;我们可以通过Qt提供的类非常方便地和本地或者远程数据库进行连接。 众所周知&#xff0c;数据库是 C-S&#xff08;cl…...

DINOv2 - 无监督学习鲁棒视觉特征

本文翻译整理自&#xff1a;https://github.com/facebookresearch/dinov2 文章目录 一、关于 DINOv2相关链接资源关键功能特性 二、预训练模型预训练骨架网络通过 PyTorch Hub 加载预训练模型预训练分类头 - ImageNet预训练头 - 深度估计预训练头 - 语义分割 三、安装1、推荐安…...

AI与无人零售:如何通过智能化技术提升消费者体验和运营效率?

引言&#xff1a;无人零售不只是无人值守 你走进一家无人便利店&#xff0c;没有迎宾、没有收银员&#xff0c;甚至没有一个人在场&#xff0c;但你刚拿起商品&#xff0c;货架旁的摄像头就悄悄“看懂”了你的动作&#xff0c;系统已经在后台为你记账。你以为只是没人管&#x…...

STM32F10X OLED屏幕点亮

本节实现点亮OLED屏 首先去原理图中查找对应引脚 配置上述的IO口 查看对应的原理图 ​​​​​​​ OLED_CS 和 OLED_RES&#xff08;PB6&#xff0c;PB7&#xff09;就是配置为推挽输出OLED_SCLK 和 OLED_SDIN &#xff08;PB13 PB15&#xff09;OLED_D/C (PE12) 推挽输出就…...

Nginx核心功能02

目录 一&#xff1a;正向代理 1.编译安装nginx 2.配置正向代理 二&#xff1a;反向代理 1.配置nginx七层代理 2.配置nginx四层代理&#xff08;传输层&#xff0c;TCP/UDP&#xff09; 三&#xff1a;nginx缓存 1.缓存功能的核心原理和缓存类型 2.代理缓存功能设置 四…...

微格式:为Web内容赋予语义的力量

一、什么是微格式? 微格式是一种建立在已有 Web 标准基础上的简单、开放的数据格式。它的核心思想是通过在 HTML 标签中添加特定的属性和类名,为网页内容添加语义注解,从而兼顾 HTML 文档的人机可读性。 简单来说,微格式就是一套约定俗成的 HTML 标记方式,让我们能够在不…...

Linux基础 -- Generic Netlink 框架详解与开发实践

Generic Netlink 框架详解与开发实践 本文旨在系统性介绍 Linux 内核中的 Generic Netlink 框架&#xff0c;包括其设计背景、结构设计、核心数据结构 genl_ops 的使用&#xff0c;以及完整的内核与用户态通信示例&#xff0c;适合用于驱动开发、用户空间控制接口构建及系统通信…...

CMake解析参数用法示例

cmake_parse_arguments 是 CMake 中用于解析函数或宏参数的工具&#xff0c;特别适合处理带有选项&#xff08;OPTIONS&#xff09;、单值参数&#xff08;SINGLE_ARGS&#xff09;和多值参数&#xff08;MULTI_ARGS&#xff09;的复杂参数列表。以下是用法说明和一个示例&…...

开源项目实战学习之YOLO11:ultralytics-cfg-models-fastsam(九)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 1. __init__.py2. model.py3. predict.py4. utils.py5. val.py FastSAM 是一种目标检测和图像分割模型&#xff0c;Ultralytics 是一个在计算机视觉领域广泛使用的库&#x…...

使用frpc链接内网的mysql

以下是配置 frpc 连接内网 MySQL 服务的详细步骤&#xff1a; 1. 准备工作 frps 服务器&#xff1a;已部署在公网 IP 11.117.11.245&#xff0c;假设 frps 的默认端口为 7000。 内网 MySQL 服务&#xff1a;运行在内网机器的 3306 端口。 目标&#xff1a;通过公网 IP 11.117…...

分享:VTK版本的选择 - WPF空域问题

在早期版本中&#xff0c;ActiViz 对 Windows Presentation Foundation (WPF) 框架的支持是通过 WindowsFormHost 组件实现的&#xff0c;这种方式依赖于 WindowsForm 和 WPF 的互操作性。然而&#xff0c;这种方法存在一个众所周知的“空域问题”&#xff08;airspace issue&a…...

MIPS架构详解:定义、应用与其他架构对比

一、MIPS架构的定义 MIPS&#xff08;Microprocessor without Interlocked Pipeline Stages&#xff09; 是一种经典的精简指令集&#xff08;RISC&#xff09;处理器架构&#xff0c;由斯坦福大学John Hennessy团队于1981年提出&#xff0c;强调高效流水线设计和硬件简化。 核…...

项目剖析:基于Agent的个人知识管理系统如何设计

为什么写这篇文章?最近在思考如果想要构建一个个人知识管理的Agent应该怎样设计才好,然后最近看到这样一个项目,就想剖析一下它的架构,看一下它的设计思想。然后一些剖析得过程就沉淀到本文当中。本文档主要从整体架构、dataflow的视角剖析khoj项目,分析应该一个知识管理A…...

Python魔法函数深度解析

一、魔法函数是什么&#xff1f; 魔法函数&#xff08;Magic Methods&#xff09;是Python中以双下划线&#xff08;__xx__&#xff09;包裹的特殊方法&#xff0c;它们为类提供了一种与Python内置语法深度集成的能力。这些方法由解释器自动调用&#xff0c;无需显式调用&…...

PCB设计工艺规范(一)概述

PCB设计工艺规范&#xff08;一&#xff09; 1.概述2.关键词及引用标准3.PCB板材要求3.1 确定PCB使用板材以及TG值3.2 确定 PCB 的表面处理镀层 4.热设计要求5.器件库选项要求 资料来自网络&#xff0c;仅供学习使用。 1.概述 规范产品的 PCB 工艺设计&#xff0c;规定 PCB 工…...

Github开通第三方平台OAuth登录及Java对接步骤

调研起因&#xff1a; 准备搞AI Agent海外项目&#xff0c;有相当一部分用户群体是程序员&#xff0c;所以当然要接入Github这个全球最大的同性交友网站了&#xff0c;让用户使用Github账号一键完成注册或登录。 本教程基于Web H5界面进行对接&#xff0c;同时也提供了spring-…...

DeepSeek V1:初代模型的架构与性能

DeepSeek V1(又称DeepSeek-MoE)是DeepSeek系列的首代大规模语言模型,它采用Transformer结合稀疏混合专家(MoE)的创新架构,实现了在受控算力下的大容量模型。本文将深入解析DeepSeek V1的架构设计与技术细节,包括其关键机制、训练优化策略,以及在各类NLP任务上的表现。 …...

Java ResourceBundle 资源绑定详解

Java ResourceBundle 资源绑定详解 ResourceBundle 是 Java 提供的国际化(i18n)资源管理工具,位于 java.util 包。它专门用于加载本地化的 .properties 资源文件,支持多语言切换,是国际化和本地化开发的核心类。 1. 核心特性 (1)基本特点 基于 .properties 文件管理键…...

flutter 专题 六十一 支持上拉加载更多的自定义横向滑动表格

在股票软件中&#xff0c;经常会看到如下所示的效果&#xff08;ps&#xff1a;由于公司数据敏感&#xff0c;所以使用另一个朋友的一个图&#xff09;。 分析需要后&#xff0c;我先在网上找了下支持横向滑动的组件&#xff0c;最后找到了这个&#xff1a;flutter_horizontal…...

暗夜模式续

之前写过一篇笨拙的方式实现暗夜模式&#xff0c;但是当真正去适配的时候发现简直恶心至极&#xff1b;然后想通过一些方式可以把笨拙的方式变得优雅&#xff1b; 之前实现暗夜模式的快速通道&#xff0c;这篇文章在基于这个基础上优化而来 目录 背景 优化步骤 OK&#xf…...

[吾爱出品] 文件夹迁移工具(DirMapper)

文件夹迁移工具&#xff08;DirMapper&#xff09; 链接&#xff1a;https://pan.xunlei.com/s/VOP4Uf6vu3dalYLaZ1iZUhJ1A1?pwdfhzi# 文件夹迁移工具&#xff08;DirMapper&#xff09; 智能识别源文件夹分类 复制/移动两种迁移模式 冲突解决方案&#xff08;覆盖/跳过/合…...

DeepSeek 4月30日发布新模型:DeepSeek-Prover-V2-671B 可进一步降低数学AI应用门槛,推动教育、科研领域的智能化升级

DeepSeek-Prover-V2-671B模型特点&#xff1a; 一、超大参数规模与数学推理能力 参数规模跃升 模型参数量高达6710亿&#xff0c;是前代数学推理模型Prover-V1.5&#xff08;70亿参数&#xff09;的近100倍&#xff0c;表明其具备更强的复杂问题处理能力。 前代Prover-V1.5在高…...

GitHub修炼法则:第一次提交代码教学(Liunx系统)

前言 github是广大程序员们必须要掌握的一个技能&#xff0c;万事开头难&#xff0c;如果成功提交了第一次代码&#xff0c;那么后来就会简单很多。网上的相关资料往往都不是从第一次开始&#xff0c;导致很多新手们会在过程中遇到很多权限认证相关的问题&#xff0c;进而被卡…...

百家号等新媒体私信入口是否可以聚合到企业微信的客服,如何实现

一、技术实现路径 1. 百家号 API 对接 接口权限申请&#xff1a; 登录百度开发者平台&#xff0c;创建应用并获取 API 密钥&#xff08;app_id和app_token&#xff09;。申请私信相关接口权限&#xff08;如消息通知、粉丝查询&#xff09;&#xff0c;需满足百家号的审核要求…...

【来自AI】RS485,Rs232,Modbus的区别和联系是什么

RS485、RS232 和 Modbus 是常用于工业自动化和通信中的技术标准&#xff0c;它们有不同的特点和应用。下面是它们的区别和联系&#xff1a; RS232 (Recommended Standard 232) 定义&#xff1a;RS232 是一种串行通信标准&#xff0c;通常用于短距离&#xff08;一般最多15米&…...

java实现序列化与反序列化

va 实现序列化与反序列化 序列化&#xff08;Serialization&#xff09; 是将 Java 对象转换为字节流&#xff08;二进制数据&#xff09;&#xff0c;以便存储或网络传输。 反序列化&#xff08;Deserialization&#xff09; 则是将字节流恢复为 Java 对象。 Java 提供了 ja…...

harmonyOS 手机,双折叠,平板,PC端屏幕适配

由于HarmonyOS设备的屏幕尺寸和分辨率各不相同&#xff0c;开发者需要采取适当的措施来适配不同的屏幕。 1.EntryAbility.ets文件里&#xff1a;onWindowStageCreate方法里判断设备类型&#xff0c; 如果是pad&#xff0c;需全屏展示&#xff08;按客户需求来&#xff0c;本次…...

Qt Creator环境编译的Release软件放在其他电脑上使用方法

本文解决的问题&#xff1a;将Qt Creator环境编译的exe可执行程序放到其他电脑上不可用情况 1、寻找windeployqt工具所在路径" D:\Qt5.12.10\5.12.10\msvc2015_64\bin" &#xff0c;将此路径配置到环境变量&#xff1b; 2、用Qt Creator环境编译出Release版本可执行…...

electron+vite+vue3 快速入门教程

Electron、Vite 和 Vue 3 结合使用可以创建强大的跨平台桌面应用程序&#xff0c;下面是一个快速入门教程&#xff0c;帮助你搭建一个基于 Electron Vite Vue 3 的项目。 环境准备 Node.js: 首先确保你的机器上已经安装了 Node.js。你可以通过以下命令来检查是否已安装&…...

添加了addResourceHandlers 但没用

B站黑马的视频 public class WebMvcConfig extends WebMvcConfigurationSupport { /** * 设置静态资源映射 * param registry */ Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { log.info("开始进…...

uniapp如何获取安卓原生的Intent对象

通过第三方app唤起&#xff0c;并且获取第三方app唤起时携带的参数 因为应用a唤起应用b时&#xff0c;应用b第一时间就要拿到参数token&#xff0c;所以需要将获取参数的方法写在APP.vue中的onLaunch钩子里,如果其他地方要用可以选择vuex或者采用本地缓存。 uniapp中plus.run…...

国标GB28181视频平台EasyGBS在物业视频安防管理服务中的应用方案​

一、方案背景​ 在现代物业服务中&#xff0c;高效的安全管理与便捷的服务运营至关重要。随着科技的不断发展&#xff0c;物业行业对智能化、集成化管理系统的需求日益增长。EasyGBS作为一款基于国标GB28181协议的视频监控平台&#xff0c;具备强大的视频管理与集成能力&#…...

Linux容器大师:K8s集群部署入门指南

引言 在云原生时代&#xff0c;Kubernetes就像一位"集群调度大师"&#x1f3ae;&#xff0c;轻松管理成千上万的容器化应用&#xff01;本文将带你从零开始搭建生产级K8s集群&#xff0c;从基础概念到实战部署&#xff0c;从核心组件到安全运维。无论你是要搭建开发…...

Vue 3 中纯 template 标签

发现 Vue 3 中纯 template 标签不会被渲染。 可以加 v-if"1" 即可 https://andi.cn/page/622155.html...

极光PDF编辑器:高效编辑,轻松管理PDF文档

在日常工作和学习中&#xff0c;PDF文件的使用越来越普遍。无论是学术论文、工作报告还是电子书籍&#xff0c;PDF格式因其稳定性和兼容性而被广泛采用。然而&#xff0c;编辑PDF文件往往比编辑Word文档更加复杂。今天&#xff0c;我们要介绍的 极光PDF编辑器&#xff0c;就是这…...

《可信数据空间 技术架构》技术文件正式发布

可信数据空间 技术架构发布了 国家数据基础设施技术文件发布有几个月了&#xff0c;成为数据要素圈内必读的白皮书&#xff0c;接着今日国家数据局正式发布了《可信数据空间 技术架构》&#xff0c;笔者有幸见证了该文件出炉的过程&#xff0c;在这两个文件重&#xff0c;对数…...