深度解析:AWS NLB 与 ALB 在 EKS 集群中的最佳选择
前言
AWS 提供多种弹性负载均衡器,包括应用程序负载均衡器 (ALB)、网络负载均衡器 (NLB)、网关负载均衡器 (GWLB) 和经典负载均衡器 (CLB)。本文重点介绍 ALB 和 NLB,因为它们是 EKS 集群最相关的选项。
在确定合适的负载均衡器类型时,需要考虑的主要因素是工作负载的具体需求。
什么是应用程序负载均衡器 (ALB)
应用程序负载均衡器 (ALB) 的主要功能是将传入流量分配到多个目标,这些目标可以是:
- EC2 实例(例如,传统计算服务器、EKS 工作节点、ECS 工作节点)。
- IP 地址(例如,本地服务器、第三方服务、跨 VPC 实例)。
- Lambda 函数(例如,用于无服务器应用程序、API 网关的替代方案、混合架构)。
以上示例可视化了一个附加了三个目标组的 ALB,每个目标组代表一种特定的目标类型,例如 EC2 实例、IP 地址和 Lambda 函数。
流量可以分配到至少两个或更多可用区。创建 ALB 时,必须指定要在哪些可用区(每个可用区一个子网)中“启用”它。这意味着 ALB 只能将流量分配到已启用的可用区。
更详细地说,您为 ALB 启用的每个可用区实际上都会为该特定 ALB 创建一个实例。如下所示,我们在 3 个公有子网中启用了 ALB,以将流量分配到 EC2 实例,并且创建了 3 个网络接口(每个启用的子网中一个):
有趣的是,如果没有为特定 ALB 分配目标,那么最初只会创建一个网络接口;当然,这完全由 AWS 管理,不会以任何方式影响 ALB 的性能。
什么是网络负载均衡器 (NLB)
网络负载均衡器可以将传入流量分配到多个目标:
- EC2 实例(例如,传统计算服务器、EKS 工作节点、ECS 工作节点)。
- IP 地址(例如,本地服务器、第三方服务、跨 VPC 实例)。
- 应用程序负载均衡器(例如,将 TCP/UDP 流量分流到更高级的 HTTP/HTTPS 路由、混合架构)。
与 ALB 类似,当您创建 NLB 并在特定可用区中启用它时,每个可用区中都会创建一个负载均衡器实例。每个实例由一个网络接口表示:
负载均衡器如何与EKS集成
负载均衡器接收传入流量,并将其分发到 EKS 集群中托管的目标应用程序的目标上。这提高了应用程序的弹性。当部署到 EKS 集群中时,AWS 负载均衡器控制器将为该集群创建和管理 AWS 弹性负载均衡器。创建 LoadBalancer 类型的 Kubernetes 服务时,AWS 负载均衡器控制器会创建一个网络负载均衡器 (NLB),用于在 OSI 模型的第 4 层对接收到的流量进行负载均衡。而创建 Kubernetes Ingress 对象时,AWS 负载均衡器控制器会创建一个应用程序负载均衡器 (ALB),用于在 OSI 模型的第 7 层对流量进行负载均衡。
何时选择应用程序负载均衡器 (ALB)
对于通过 HTTP/HTTPS 运行的工作负载,请选择应用程序负载均衡器 (ALB)。
如果您的应用程序需要 OSI 模型中的第 7 层负载均衡,AWS 负载均衡器控制器可以预置 ALB,ALB 通过 Ingress 资源进行管理和配置,并将 HTTP 或 HTTPS 流量定向到集群内的各个 Pod。它提供了更改路由算法的灵活性,默认采用循环路由,而 LISTING 请求数算法则作为替代方案。
何时选择网络负载均衡器 (NLB)
如果您的工作负载基于 TCP 或需要为客户端保留源 IP,请选择网络负载均衡器 (NLB)。
NLB 运行在 OSI 模型的传输层(第 4 层),因此适用于使用 TCP 和 UDP 协议的工作负载。默认情况下,NLB 在将流量转发到 Pod 时会保留客户端的原始源 IP 地址。
使用 NLB 的另一个重要考虑因素是客户端无法使用 DNS 的情况。在这种情况下,NLB 通常是更合适的选择,因为它具有静态 IP 地址。虽然建议客户端使用 DNS 将域名解析为用于负载均衡器连接的 IP 地址,但如果客户端的应用程序仅接受硬编码 IP 地址,则 NLB 的静态 IP 地址将是一个更佳的选择。
在EKS中预置负载均衡器
目前有两种主要的 Kubernetes 控制器可用于管理 AWS 负载均衡器实例:
- 旧版 Kubernetes“云控制器管理器”
- “AWS 负载均衡器控制器”
旧版控制器
第一种控制器的代码库位于 Kubernetes 代码库中(也称为“in-tree”云控制器)。它已被弃用并迁移到新的外部代码库。
- in tree(弃用)
由于已经弃用,不在给出代码库和文档链接
- out of tree
代码库
文档
后者需要一些额外的步骤才能启用。
全新 AWS 负载均衡器控制器
原名为 ALB 入口控制器,现已更名为 AWS 负载均衡器控制器,并新增了以下功能和特性:
- 适用于 Kubernetes 服务的网络负载均衡器 (NLB)
- 与多个 Kubernetes 入口规则共享 ALB
- 新增 TargetGroupBinding 自定义资源
- 支持完全私有集群
因此,它可以用作管理 NLB 实例的控制器,也可以用作 Ingress 控制器(如果您喜欢使用 Ingress 自定义资源)。
我将演示用于 NLB 的全新 AWS 负载均衡器控制器。
为此,我们将使用这个特殊的注解 service.beta.kubernetes.io/aws-load-balancer-type: "external",同时我们还将部署 AWS 负载均衡器控制器,以便在 NLB 上提供更多选项。
EKS 集群设置
如果您已经运行了 EKS 集群,请跳过此部分,直接进入下一部分。
eksctl create cluster \--name ${CLUSTER_NAME} \--version 1.21 \--region ${REGION} \--nodegroup-name linux-nodes \--nodes 3 \--nodes-min 2 \--nodes-max 4 \--with-oidc \--spot \--managed
AWS NLB 的 Kubernetes in-tree控制器
这当然不是本文的目的,但了解我们的出发点总是有益的。所以,让我们快速了解一下 AWS ELB 的树内控制器。
CLB
在尝试 NLB 之前,出于好奇,我们创建一个基本服务,类型为 LoadBalancer,不添加任何额外注解,看看 AWS 端会发生什么:
kubectl apply -f -<<EOF
apiVersion: apps/v1
kind: Deployment
metadata:name: httpbinnamespace: default
spec:replicas: 1selector:matchLabels:app: httpbinversion: v1template:metadata:labels:app: httpbinversion: v1spec:containers:- image: docker.io/kennethreitz/httpbinimagePullPolicy: IfNotPresentname: httpbinenv:- name: GUNICORN_CMD_ARGSvalue: "--capture-output --error-logfile - --access-logfile - --access-logformat '%(h)s %(t)s %(r)s %(s)s Host: %({Host}i)s}'"ports:- containerPort: 80
EOFkubectl expose deploy httpbin --type LoadBalancer --port 8000 --target-port=80
结果是一个 Classic ELB (CLB) 实例。AWS 建议您迁移到 NLB 实例类型:
NLB
以下是注解的简单配置:
apiVersion: v1
kind: Service
metadata:name: httpbinnamespace: defaultannotations:service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:ports:- port: 8000protocol: TCPtargetPort: 80selector:app: httpbinversion: v1type: LoadBalancer
部署 AWS 负载均衡器控制器
因此,AWS 负载均衡器控制器现在是使用 NLB 的推荐方式。
完成IAM 绑定工作:
export CLUSTER_NAME="my-cluster"
export REGION="eu-central-1"
export AWS_ACCOUNT_ID=XXXXXXXXXX
export IAM_POLICY_NAME=AWSLoadBalancerControllerIAMPolicy
export IAM_SA=aws-load-balancer-controller# Setup IAM OIDC provider for a cluster to enable IAM roles for pods
eksctl utils associate-iam-oidc-provider \--region ${REGION} \--cluster ${CLUSTER_NAME} \--approve# Fetch the IAM policy required for our Service-Account
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.4/docs/install/iam_policy.json# Create the IAM policy
aws iam create-policy \--policy-name ${IAM_POLICY_NAME} \--policy-document file://iam-policy.json# Create the k8s Service Account
eksctl create iamserviceaccount \
--cluster=${CLUSTER_NAME} \
--namespace=kube-system \
--name=${IAM_SA} \
--attach-policy-arn=arn:aws:iam::${AWS_ACCOUNT_ID}:policy/${IAM_POLICY_NAME} \
--override-existing-serviceaccounts \
--approve \
--region ${REGION}# Check out the new SA in your cluster for the AWS LB controller
kubectl -n kube-system get sa aws-load-balancer-controller -o yaml
安装AWS load balancer 控制器
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \-n kube-system \--set clusterName=${CLUSTER_NAME} \--set serviceAccount.create=false \--set serviceAccount.name=${IAM_SA}
使用 AWS 负载均衡器控制器创建NLB
首先,让我们告诉 Kubernetes 内置云控制器不要处理该服务。AWS 负载均衡器控制器现在会处理这个问题。开关是这个注解:service.beta.kubernetes.io/aws-load-balancer-type
此外,我们希望 NLB 公开可见(默认情况下,它是一个内部 NLB),并且我们希望它处于实例模式(有助于客户端 IP 保护)
注解更改前
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
更改后
# use the AWS LB Controller
service.beta.kubernetes.io/aws-load-balancer-type: "external"
# we want an internet-facing NLB
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
# use target groups in instance mode
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
为了启用backend config,访问日志和健康检查,需要添加更多的注解,下面是完整的注解
apiVersion: v1
kind: Service
metadata:name: httpbinnamespace: defaultannotations:# NLBservice.beta.kubernetes.io/aws-load-balancer-type: "external"service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facingservice.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"# Backendservice.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http" # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go#L182# Access logsservice.beta.kubernetes.io/aws-load-balancer-access-log-enabled: "true"service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-name: "${BUCKET_NAME}"service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-prefix: "my-httpbin-app"# service.beta.kubernetes.io/aws-load-balancer-access-log-emit-interval: "5" # not yet implemented# LB attributes - you can concatenate values separated with comma signs ','service.beta.kubernetes.io/aws-load-balancer-attributes: "load_balancing.cross_zone.enabled=false"# Health checksservice.beta.kubernetes.io/aws-load-balancer-healthcheck-healthy-threshold: "2" # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go#L209 2 to 20service.beta.kubernetes.io/aws-load-balancer-healthcheck-unhealthy-threshold: "2" # 2-10service.beta.kubernetes.io/aws-load-balancer-healthcheck-interval: "10" # 10 or 30service.beta.kubernetes.io/aws-load-balancer-healthcheck-path: "/status/200"service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol: "HTTP"service.beta.kubernetes.io/aws-load-balancer-healthcheck-port: "traffic-port"service.beta.kubernetes.io/aws-load-balancer-healthcheck-timeout: "6" # 6 is the minimumspec:ports:- port: 8000protocol: TCPtargetPort: 80selector:app: httpbinversion: v1type: LoadBalancer
使用 AWS 负载均衡器控制器创建ALB
每当在集群上使用 kubernetes.io/ingress.class: alb 注释创建 Kubernetes 入口资源时,AWS 负载均衡器控制器都会创建 ALB 及必要的 AWS 支持资源。入口资源会配置 ALB,以将 HTTP 或 HTTPS 流量路由到集群内的不同 Pod。为确保您的入口对象使用 AWS 负载均衡器控制器,请将以下注释添加到您的 Kubernetes 入口规范中。
annotations:kubernetes.io/ingress.class: alb
下面一个完整的ingress 配置清单文件
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: generic-company-ingressannotations:kubernetes.io/ingress.class: alb //使用albalb.ingress.kubernetes.io/scheme: internet-facing。//external albalb.ingress.kubernetes.io/target-type: ip. //使用IP mode,alb 直接和pod通信external-dns.alpha.kubernetes.io/hostname: mobile.generic123.net //绑定的域名alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]' //监听的端口alb.ingress.kubernetes.io/group.name: "prod-external" //您可以使用 IngressGroups 在多个服务资源之间共享应用程序负载均衡器
spec:rules:- host: mobile.generic123.nethttp:paths:- path: /apple pathType: Exactbackend:service:name: ssl-redirectport:name: use-annotation- path: /applepathType: Exact backend: service:name: apple-serviceport:number: 3000- path: /androidpathType: Exactbackend:service:name: ssl-redirectport:name: use-annotation- path: /androidpathType: Exactbackend:service:name: android-serviceport:number: 3000
总结
AWS提供了多种弹性负载均衡器,包括应用程序负载均衡器(ALB)、网络负载均衡器(NLB)、网关负载均衡器(GWLB)和经典负载均衡器(CLB)。本文重点介绍ALB和NLB,因为它们是与EKS集群最相关的选项。ALB适用于HTTP/HTTPS工作负载,支持第7层负载均衡,而NLB适用于TCP/UDP工作负载,支持第4层负载均衡,并能保留客户端源IP。在EKS集群中,AWS负载均衡器控制器负责创建和管理这些负载均衡器。选择哪种负载均衡器取决于工作负载的具体需求。此外,AWS负载均衡器控制器还支持NLB的实例模式和ALB的Ingress资源管理,提供了更灵活的配置选项。
相关文章:
深度解析:AWS NLB 与 ALB 在 EKS 集群中的最佳选择
前言 AWS 提供多种弹性负载均衡器,包括应用程序负载均衡器 (ALB)、网络负载均衡器 (NLB)、网关负载均衡器 (GWLB) 和经典负载均衡器 (CLB)。本文重点介绍 ALB 和 NLB,因为它们是 EKS 集群最相关的选项。 在确定合适的负载均衡器类型时,需要…...
nginx模块使用、过滤器模块以及handler模块
一、如何使用nginx的模块 1.ngx_code.c: #include "ngx_config.h" #include "ngx_conf_file.h" #include "nginx.h" #include "ngx_core.h" #include "ngx_string.h" #include "ngx_palloc.h" #include "n…...
基于PageHelper的分页查询
基于PageHelper的分页查询 ‘PageHelper是基于java的一个开源框架,用于在MyBatis等持久层框架中方便地进行分页查询操作。它提供了一组简单易用的API和拦截器机制,可以帮助开发者快速集成和使用分页功能。 PageHelper的主要功能包括: 分页…...
Linux518 YUM源仓库回顾(需查)ssh 服务配置回顾 特定任务配置回顾
计划配仓库YUM源 为什么我在/soft文件夹下 使用yum install --downloadonly --downloaddir /soft samba 为什么文件夹下看不到samba文件 exiting because “Download Only” specified 计划过 计划配SSH 参考 ok了 计划配置特定任务解决方案 code: 两端先配好网络 测试好s…...
AI 制作游戏美术素材流程分享(程序员方向粗糙版)
AI 制作游戏美术素材分享(程序员方向粗糙版) 视频讲解: 抖音:https://www.douyin.com/user/self?from_tab_namemain&modal_id7505691614690561295&showTabpost Bilibili: https://www.bilibili.com/video/BV1ojJGzZEve/ 写在最前面: 本方法比较粗糙,只对对美术风…...
山东大学计算机图形学期末复习12——CG13下
CG13下 BSP树 BSP (Binary Space Partition)表示二叉空间分割。 使用这种方法可以使我们在运行时使用一个预先计算好的树来得到多边形从后向前的列表,它的复杂度为O(n)。 它的基本思想是基于这样一个事实:任何平面都可以将空间分…...
Muduo网络库大总结
Muduo网络库大总结 目录 目的知识储备IO模型 阻塞与非阻塞五种IO模型 epoll原理 select/poll的缺点epoll的优势LT与ET模式 Reactor模型muduo核心模块扩展功能 目的 理解阻塞、非阻塞、同步、异步的概念掌握Unix/Linux五种IO模型深入理解epoll原理及优势掌握Reactor模型设计学…...
LLMs:《POE报告:2025年春季人工智能模型使用趋势》解读
LLMs:《POE报告:2025年春季人工智能模型使用趋势》解读 导读:2025年5月13日,该报告基于 Poe 平台的用户数据,分析了 2025 年春季人工智能模型的使用趋势。报告指出,人工智能格局快速演变,通用文…...
机器学习(13)——LGBM(2)
一、LightGBM算法简介 (一)背景 机器学习中的树模型 在机器学习领域,基于树的模型(如决策树、随机森林、梯度提升树等)是非常重要的算法类别。它们具有很强的可解释性,能够很好地处理非线性关系ÿ…...
翻到了一段2005年写的关于需求的文字
那时的俺还很稚嫩,很多东西都不懂。 另外 hfghfghfg其实是俺的一个马甲,早年间在delphibbs时用的。 来自:hfghfghfg, 时间:2005-01-20 13:16, ID:2971188我到客户那里的情况 一边要和他聊天 一边改报表。 一张报表 …...
MCP - Cline 接入 高德地图 Server
文章目录 一、准备1、注册、认证高德开放平台账号2、创建应用、获取 Key3、用量管理2、Cline 配置模型 二、接入三、测试官方测试 - 出行规划专属地图 四、关于 高德 MCP Server - AI时代的出行服务中台1、产品定位2、技术架构亮点3、核心API能力矩阵4、开发者优势5、典型应用场…...
Linux的MySQL头文件和找不到头文件问题解决
头文件 #include <iostream> #include <mysql_driver.h> #include <mysql_connection.h> #include <cppconn/statement.h> #include <cppconn/resultset.h> #include <cppconn/prepared_statement.h> #include <cppconn/exception.h&g…...
进程和线程的区别和联系
二者概念 进程 运行起来一个程序就会在操作系统产生一个或多个进程 进程属于软件资源。 进程是操作系统中资源分配的基本单位。 每个进程拥有独立的 内存空间、文件描述符、系统资源。 进程之间相互隔离,一个进程崩溃不会直接影响其他进程。 操作系统管理进程…...
SHAP分析图的含义
1. 训练集预测结果对比图 表征含义: 展示模型在训练集上的预测值(红色曲线)与真实值(灰色曲线)的对比。通过曲线重合度可直观判断模型的拟合效果。标题中显示的RMSE(均方根误差)量化了预测值与…...
PointNet++:点云处理的升级版算法
在三维计算机视觉和机器学习领域,点云数据的处理一直是一个关键问题。点云是由一系列三维坐标点组成的集合,这些点可以描述物体的形状和结构。然而,由于点云的无序性和不规则性,传统的处理方法往往难以直接应用。PointNet算法的出…...
PostGIS实现矢量数据转栅格数据【ST_AsRaster】
ST_AsRaster函数应用详解:将矢量数据转换为栅格数据 [文章目录] 一、函数概述 二、函数参数与分组说明 三、核心特性与注意事项 四、示例代码 五、应用场景 六、版本依赖 七、总结 一、函数概述 ST_AsRaster是PostGIS中用于将几何对象(如点、线…...
【PyQt5实战】五大对话框控件详解:从文件选择到消息弹窗
对话框是人机交互的重要组件,PyQt5提供了一系列标准对话框满足不同场景需求。本文将深入解析QDialog及其子类的使用方法,助你快速掌握GUI开发核心交互功能。 对话框基础:QDialog QDialog是所有对话框的基类,支持模态/非模态两种…...
机器学习-人与机器生数据的区分模型测试 - 模型选择与微调
内容继续机器学习-人与机器生数据的区分模型测试 整体模型的准确率 X_train_scaled pd.DataFrame(X_train_scaled,columns X_train.columns ) X_test_scaled pd.DataFrame(X_test_scaled,columns X_test.columns)from ngboost.distns import Bernoulli # 模型训练和评估 m…...
学习黑客Active Directory 入门指南(四)
Active Directory 入门指南(四):组策略的威力与操作主机角色 📜👑 大家好!欢迎来到 “Active Directory 入门指南” 系列的第四篇。在前几篇中,我们已经构建了对AD逻辑结构、物理组件、关键服务…...
十一、STM32入门学习之FREERTOS移植
目录 一、FreeRTOS1、源码下载:2、解压源码 二、移植步骤一:在需要移植的项目中新建myFreeRTOS的文件夹,用于存放FREERTOS的相关源码步骤二:keil中包含相关文件夹和文件引用路径步骤三:修改FreeRTOSConfig.h文件的相关…...
Spring ioc和Aop
IOC 在传统Java当中,我们的对象都需要new关键字来生成,这在面对很多对象的情况产生了不必要的麻烦,因为我不需要在一个项目中一直做重复的事情,那怎么办把,自然而然的一些好的框架就诞生了,避免我们去做这…...
动态内存管理2+柔性数组
一、动态内存经典笔试题分析 分析错误并改正 题目1 void GetMemory(char *p) {p (char *)malloc(100); } void Test(void) {char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str); } int main() {Test();return 0; }错误的原因: …...
USB传输速率 和 RS-232/RS-485串口协议速率 的倍数关系
一、技术背景 RS-232:传统串口标准,典型速率 115.2 kbps(最高约 1 Mbps)。RS-485:工业串口标准,典型速率 10 Mbps(理论最高可达 50 Mbps)。USB:不同版本差异巨大&#x…...
多线程代码案例-4 线程池
1、引入 池是一个非常重要的概念,我们有常量池,数据库连接池,线程池,进程池,内存池…… 池的作用: 1、提前把要用的对象准备好 2、用完的对象也不立即释放,先留着以备下次使用,提…...
JSON Schema 高效校验 JSON 数据格式
在数据交换和API开发中,JSON 已成为最流行的数据格式之一。但你是否遇到过这些困扰? 接收的JSON字段缺失关键数据?数值类型意外变成了字符串?嵌套结构不符合预期? JSON Schema 正是解决这些问题的利器。本文将带你全…...
机器学习09-正规方程
机器学习笔记:正规方程(Normal Equation) 概述 正规方程是线性回归中求解参数的一种解析方法。它基于最小化损失函数(如最小二乘法)来直接计算出参数的最优值。在机器学习中,这种方法尤其适用于特征数量不…...
Java大师成长计划之第26天:Spring生态与微服务架构之消息驱动的微服务
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4-turbo模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在现代微服务架构中,服务…...
Linux 文件(1)
1. 文件 1.1 文件是什么 一个文件,是由其文件属性与文件内容构成的。文件属性又称为一个文件的元数据,因此如果一个文件,内容为空,这个文件依然要占据磁盘空间。 1.2 文件在哪里 一个文件,如果没有被打开ÿ…...
程序代码篇---python向http界面发送数据
文章目录 前言 前言 本文简单接受了python向http界面发送数据...
【iOS】探索消息流程
探索消息流程 Runtime介绍OC三大核心动态特性动态类型动态绑定动态语言 方法的本质代码转换objc_msgSendSELIMPMethod 父类方法在子类中的实现 消息查找流程开始查找快速查找流程慢速查找流程二分查找方法列表父类缓存查找 动态方法解析动态方法决议实例方法类方法优化 消息转发…...
院校机试刷题第六天:1134矩阵翻转、1052学生成绩管理、1409对称矩阵
一、1134矩阵翻转 1.题目描述 2.解题思路 很简单的模拟题,甚至只是上下翻转,遍历输出的时候先把最下面那一行输出即可。 3.代码 #include <iostream> #include <vector> using namespace std;int main() {int n;cin >> n;vector&l…...
DeepSeek在简历筛选系统中的深度应用
一、多模态解析引擎的技术突破 1.1 复杂格式的精准解析 针对简历格式多样性挑战,DeepSeek采用三级解析架构: 格式标准化层:基于Transformer的DocParser模型支持200+种文档格式转换视觉特征提取:使用改进的YOLOv8进行证书印章识别(mAP@0.5达93.7%)语义重构模块:通过注意…...
c++多线程debug
debug demo 命令行查看 ps -eLf|grep cam_det //查看当前运行的轻量级进程 ps -aux | grep 执行文件 //查看当前运行的进程 ps -aL | grep 执行文件 //查看当前运行的轻量级进程 pstree -p 主线程ID //查看主线程和新线程的关系 查看线程栈结构 pstack 线程ID 步骤&…...
【回溯 剪支 状态压缩】# P10419 [蓝桥杯 2023 国 A] 01 游戏|普及+
本文涉及知识点 C回溯 位运算、状态压缩、枚举子集汇总 P10419 [蓝桥杯 2023 国 A] 01 游戏 题目描述 小蓝最近玩上了 01 01 01 游戏,这是一款带有二进制思想的棋子游戏,具体来说游戏在一个大小为 N N N\times N NN 的棋盘上进行,棋盘…...
CUDA 纹理入门
一、什么是CUDA纹理 CUDA纹理是NVIDIA GPU提供的一种特殊内存访问机制,它允许高效地访问和过滤结构化数据。纹理内存最初是为图形渲染设计的,但在通用计算(GPGPU)中也很有用。 二、纹理内存的优势 缓存优化:纹理内存有专用的缓存,适合空间局部性好的访问模式 硬件过滤:支…...
大模型微调步骤整理
在对深度学习模型进行微调时,我通常会遵循以下几个通用步骤。 第一步是选择一个合适的预训练模型。PyTorch 的 torchvision.models 模块提供了很多经典的预训练模型,比如 ResNet、VGG、EfficientNet 等。我们可以直接使用它们作为模型的基础结构。例如,加载一个预训练的 Re…...
【GPT入门】第39课 OPENAI官方API调用方法
【GPT入门】第39课 OPENAI官方API调用方法 1. OPENAI 免费API2. openai调用最简单的API3.apiKey提取到环境变量 1. OPENAI 免费API 需要科学上网,可以调用 gpt-4o-mini 的 api, 使用其它旧的GPT,反而可能需要收费,例如 gpt-3.5-turbo 2. op…...
【DeepSeek论文精读】11. 洞察 DeepSeek-V3:扩展挑战和对 AI 架构硬件的思考
欢迎关注[【AIGC论文精读】](https://blog.csdn.net/youcans/category_12321605.html)原创作品 【DeepSeek论文精读】1. 从 DeepSeek LLM 到 DeepSeek R1 【DeepSeek论文精读】7. DeepSeek 的发展历程与关键技术 【DeepSeek论文精读】11. 洞察 DeepSeek-V3ÿ…...
MySQL事务的一些奇奇怪怪知识
Gorm事务有error却不返回会发生什么 Gorm包是大家比较高频使用。正常的用法是,如果有失败返回error,整体rollback,如果不返回error则commit。下面是Transaction的源码: // Transaction start a transaction as a block, return …...
C语言内存函数与数据在内存中的存储
一、c语言内存函数 1、memcpy函数是一个标准库函数,用于内存复制。功能上是用来将一块内存中的内容复制到另一块内存中。用户需要提供目标地址、源地址以及要复制的字节数。例如结构体之间的复制。 memcpy函数的原型是:void* memcpy(void* …...
Power BI Desktop运算符和新建列
1.运算符 运算符 含义 加 - 减 * 乘 / 除 ^ 幂 运算符 含义 等于 > 大于 < 小于 > 大于等于 < 小于等于 <> 不等于 运算符 含义 && 与 || 或 not 非 & 字符串连接 in 包含 not in 不包含 2.新建列 …...
windows 安装gdal实现png转tif,以及栅格拼接
windows 安装gdal实现png转tif,以及栅格拼接 一、安装gdal 网上有很多安装gdal的方法,此处通过osgeo4w安装gdal 1.下载osgeo4w 下载地址 https://trac.osgeo.org/osgeo4w/ 2、安装osgeo4w exe文件安装,前面部分很简单,就不再…...
【嵙大o】C++作业合集
参考: C swap(交换)函数 指针/引用/C自带-CSDN博客 Problem IDTitleCPP指针CPP引用1107 Problem A编写函数:Swap (I) (Append Code)1158 Problem B整型数据的输出格式1163 Problem C时间:24小时制转12小时制1205…...
论信息系统项目的采购管理
论信息系统项目的采购管理 背景一、规划采购管理二、实施采购三、控制采购结语 背景 某市为对扶贫对象实施精确识别、精确帮扶、精确管理,决定由民政部门牵头,建设家庭经济状况分析及市、县(区)、镇(街)三级…...
创建型:单例模式
目录 1、核心思想 2、实现方式 2.1 饿汉式 2.2 懒汉式 2.3 枚举(Enum) 3、关键注意事项 3.1 线程安全 3.2 反射攻击 3.3 序列化与反序列化 3.4 克隆保护 4、适用场景 1、核心思想 目的:确保一个类仅有一个实例 功能:…...
职场方法论总结(4)-如何正确地汇报
一、明确汇报目标 区分类型:是项目进展汇报?数据总结?问题解决方案?还是资源申请?明确目标才能聚焦内容。听众需求: 所有人都希望你用最简短的语言把事情讲清楚,节省时间领导关注结果、风险和资…...
STM32SPI实战-Flash模板
STM32SPI实战-Flash模板 一,常用指令集(部分)二,组件库GD25QXX API 函数解析1,前提条件2,初始化与识别1, void spi_flash_init(void)2, uint32_t spi_flash_read_id(void) 3,擦除操作1, void spi_flash_sector_erase(uint32_t sec…...
CSS- 4.4 固定定位(fixed) 咖啡售卖官网实例
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…...
【Retinanet】训练自己的数据集
目录 1.下载源码2.配置环境3.数据集准备4.训练自己的数据5.成功训练! 1.下载源码 Retinanet代码:代码 下载到你的目录中,进行打开。 2.配置环境 这里就是cudapytorch,没有配置过的可以参考博客: 深度学习环境的搭建…...
微软将于 8 月 11 日关闭 Bing Search API 服务
微软宣布将于 2025 年 8 月 11 日正式关闭 Bing Search API 服务。届时,所有使用 Bing Search API 的实例将完全停用,同时不再接受新用户注册。 此次停用决定主要影响 Bing Search F1 及 S1 到 S9 资源的用户,以及 Custom Search F0 与 S1 到…...