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

[K8S] K8S资源控制器Controller Manager(4)

文章目录

    • 1. 常见的Pod控制器及含义
    • 2. Replication Controller控制器
      • 2.1 部署ReplicaSet
    • 3. Deployment
      • 3.1部署Deployment
      • 3.2 运行Deployment
      • 3.3 镜像更新方式
      • 3.4 Deployment扩容
      • 3.5 滚动更新
      • 3.6 金丝雀发布(灰度发布)
      • 3.7 Deployment版本回退
      • 3.8 Deployment 更新策略
    • 4. DaemonSet
      • 4.1 DaemonSet的滚动更新
    • 5. Job
    • 6.StatefulSet

Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 组成, 是 Kubernetes 的大脑, 它通过 apiserver 监控整个集群的状态, 并确保集群处于预期的工作状态。

1. 常见的Pod控制器及含义

  1. ReplicaSet:适合无状态的服务部署 用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和 缩容功能。 ReplicaSet主要三个组件组成: (1)用户期望的pod副本数量 (2)标签选择器,判断哪个pod归自己管理 (3)当现存的pod数量不足,会根据pod资源模板进行新建 帮助用户管理无状态的pod资源,精确反应用户定义的目标数量,但是RelicaSet不是直接使用的 控制器,而是使用Deployment。
  2. deployment:适合无状态的服务部署 工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功 能,还提供声明式配置。
  3. StatefullSet:适合有状态的服务部署。需要学完存储卷后进行系统学习。
  4. DaemonSet:一次部署,所有的node节点都会部署,例如一些典型的应用场景: 运行集群存储 daemon,例如在每个Node上运行 glusterd、ceph ,在每个Node上运行日志收集 daemon,例如 fluentd、 logstash 在每个Node上运行监控 daemon,例如 Prometheus Node Exporter 用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务
    特性:服务是无状态的 服务必须是守护进程
  5. Job:一次性的执行任务。 只要完成就立即退出,不需要重启或重建。
  6. Cronjob:周期性的执行任务。 周期性任务控制,不需要持续后台运行。

2. Replication Controller控制器

replication controller简称RC,是kubernetes系统中的核心概念之一,简单来说,它其实定义了一个期
望的场景,即声明某种pod的副本数量在任意时刻都复合某个预期值,所以RC的定义包含以下部分:

  1. pod期待的副本数量
  2. 用于筛选目标pod的Label Selector
  3. 当pod的副本数量小于期望值时,用于创建新的pod的pod模板(template)

ReplicationController用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退 出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收。
在新版本的Kubernetes中建议使用ReplicaSet来取代ReplicationController。ReplicaSet跟 ReplicationController没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector。

虽然ReplicaSet可以独立使用,但一般还是建议使用 Deployment 来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update但Deployment支持)。

2.1 部署ReplicaSet

apiVersion: apps/v1 
kind: ReplicaSet
#api版本定义 #定义资源类型为ReplicaSet 
metadata: #元数据定义name: myapp namespace: default
spec: #ReplicaSet的规格定义replicas: 2 selector:#定义副本数量为2个 #标签选择器,定义匹配pod的标签 matchLabels: app: myapp release: canary #pod的模板定义template:metadata: #pod的元数据定义 name: myapp-pod #自定义pod的名称 labels: #定义pod的标签,需要和上面定义的标签一致,也可以多出其他标签 app: myapp release: canary environment: qa #pod的规格定义spec:containers: #容器定义 - name: myapp-container #容器名称image: nginx:1.17.10-alpine #暴露端口ports:- name: httpcontainerPort: 80

可以通过kubectl命令行方式获取更加详细信息

kubectl explain rs 
kubectl explain rs.spec
kubectl explain rs.spec.template.spec

运行ReplicaSet

运行ReplicaSet kubectl apply -f replicasetdemo.yml

查看rs控制器

kubectl get rs

查看pod信息

kubectl get pod

查看pod详细信息

kubectl describe pod replicasetdemo-7fdd7b5f67-5gzfg 

测试controller控制器下的pod删除、重新被controller控制器拉起

kubectl delete pod --all 
kubectl get pod

修改pod的副本数量:通过命令行方式

 kubectl scale replicaset replicasetdemo --replicas=8 kubectl get rs

修改pod的副本数量:通过资源清单方式

kubectl edit replicasets.apps replicasetdemo 
kubectl get rs

显示pod的标签

kubectl get pod --show-labels 

修改pod标签(label)

kubectl label pod replicasetdemo-652lc app=xxx   --overwrite=True 

再次显示pod的标签:发现多了一个pod,原来的rs中又重新拉起一个pod,说明rs是通过label去管 理

pod kubectl get pod --show-labels

删除rs

kubectl delete rs replicasetdemo

最后,总结一下RC(ReplicaSet)的一些特性和作用:

  1. 在绝大多数情况下,我们通过定义一个RC实现Pod的创建及副本数量的自动控制
  2. 在RC里包括完整的Pod定义模板
  3. RC通过Label Selector机制实现对Pod副本的自动控制
  4. 通过改变RC里的Pod副本数量,可以实现Pod的扩容和缩容
  5. 通过改变RC里Pod模板中的镜像版本,可以实现滚动升级

3. Deployment

Deployment是kubernetes在1.2版本中引入的新概念,用于更好的解决Pod的编排问题,为此,
Deployment在内部使用了ReplicaSet来实现目的,我们可以把Deployment理解为ReplicaSet的一次升级,两者的相似度超过90%

  1. 创建一个Deployment对象来生成对应的ReplicaSet并完成Pod副本的创建
  2. 检查Deployment的状态来看部署动作是否完成(Pod副本数量是否达到了预期的值)
  3. 更新Deployment以创建新的Pod(比如镜像升级) 如果当前Deployment不稳定,可以回滚到一个早先的Deployment版本
  4. 暂停Deployment以便于一次性修改多个PodTemplateSpec的配置项,之后在恢复Deployment, 进行新的发布
  5. 扩展Deployment以应对高负载
  6. 查看Deployment的状态,以此作为发布是否成功的标志
  7. 清理不在需要的旧版本ReplicaSet

3.1部署Deployment

除了API生命与Kind类型有区别,Deployment的定义与Replica Set的定义很类似。
创建controller/deploymentdemo.yml

apiVersion: apps/v1 
kind: Deployment 
metadata: name: deploymentdemo1 labels: app: deploymentdemo1
spec: replicas: 10 template: metadata: name: deploymentdemo1 labels: app: deploymentdemo1spec: containers: - name: deploymentdemo1 image: nginx:1.17.10-alpine imagePullPolicy: IfNotPresent ports: - containerPort: 80restartPolicy: Alwaysselector: matchLabels:app: deploymentdemo1

3.2 运行Deployment

kubectl apply -f deploymentdemo.yml 查看
deployment kubectl get rs 
查看rs:deployment名称+hashcode码组成查看pod
kubectl get pod

3.3 镜像更新方式

命令行方式

升级nginx镜像版本为1.18.0 
kubectl set image deployment deploymentdemo1 deploymentdemo1=nginx:1.18.0alpine查看pod升级情况 
kubectl get pods -w进去某一个pod内部,查看nginx升级版本信息 
kubectl exec -it deploymentdemo1-df6bc5d4c-flc7b 
sh nginx -v
exit

yml文件方式

升级nginx镜像版本为1.19.2-alpine 
kubectl edit deployments.apps deploymentdemo1查看pod升级情况 
kubectl get pods -w进去某一个pod内部,查看nginx升级版本信息 
kubectl exec -it deploymentdemo1-584f6b54dd-4l62t sh nginx -v
exit

3.4 Deployment扩容

命令行方式

kubectl scale deployment deploymentdemo1 --replicas=15
kubectl get pods

yml文件方式

kubectl edit deployments.apps deploymentdemo1 
kubectl get pods

3.5 滚动更新

概述 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布。

  1. 蓝绿部署时不停老版本,部署新版本然后进行测试,确认OK,将流量切到新版本,然后老版本同 时也升级到新版本。 蓝绿部署无需停机,并且风险较小。缺点是运行两个集群,两倍的实例数
  2. 滚动发布:一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用
  3. 灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让 一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围, 把所有用户都迁移到B上面来。金丝雀发布就是灰度发布

3.6 金丝雀发布(灰度发布)

Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操 作。
比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用, 主体部分还是旧的版本。
然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳 定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布(Canary Release)

更新deployment的nginx:1.18.0-alpine版本,并配置暂停
deployment kubectl set image deployment deploymentdemo1 deploymentdemo1=nginx:1.18.0alpine && kubectl rollout pause deployment deploymentdemo1观察更新状态 
kubectl rollout status deployments deploymentdemo1监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是 因为使用了pause暂停命令 
kubectl get pods -l app=deploymentdemo1 -w确保更新的pod没问题了,继续更新 
kubectl rollout resume deploy deploymentdemo1查看最后的更新情况
kubectl get pods -l app=deploymentdemo1 -w

3.7 Deployment版本回退

默认情况下,kubernetes 会在系统中保存前两次的 Deployment 的 rollout 历史记录,以便可以随 时回退(您可以修改revision history limit来更改保存的revision数)。
注意: 只要 Deployment 的 rollout 被触发就会创建一个 revision。也就是说当且仅当
Deployment 的 Pod template(如.spec.template)被更改,例如更新template 中的 label 和容器 镜像时,就会创建出一个新的 revision。其他的更新,比如扩容 Deployment 不会创建 revision
因此我们可以很方便的手动或者自动扩容。这意味着当您回退到历史 revision 时,只有 Deployment 中的 Pod template 部分才会回退。

history操作 
kubectl rollout history deployment deploymentdemo1status操作 
kubectl rollout status deployment deploymentdemo1回滚版本信息 
kubectl rollout undo deployment deploymentdemo1查看pod回滚情况 
kubectl get pods -w进去某一个pod内部,查看nginx回滚版本信息 
kubectl exec -it deploymentdemo1-df6bc5d4c-flc7b sh
nginx -v

3.8 Deployment 更新策略

Deployment 可以保证在升级时只有一定数量的 Pod 是 down 的。默认的,它会确保至少有比期望的 Pod数量少
一个是up状态(最多一个不可用)
Deployment 同时也可以确保只创建出超过期望数量的一定数量的 Pod。
默认的,它会确保最多比期望 的Pod数 量多一个的 Pod 是 up 的(最多1个 surge )
Kuberentes 版本v1.17.5中,从1-1变成25%-25%

kubectl describe deployments.apps deploymentdemo1 
查看到属性:
RollingUpdateStrategy: 25% max unavailable, 25% max surge

总结
Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。 只需要在 Deployment 中描述想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和 ReplicaSet 的实际状态改变到您的目标状态。
也可以定义一个全新的 Deployment 来创建 ReplicaSet或者删除已有的 Deployment 并创建一个新的来替换。

Replicas(副本数量):
.spec.replicas 是可以选字段,指定期望的pod数量,默认是1。

Selector(选择器):
.spec.selector是可选字段,用来指定 label selector ,圈定Deployment管理的pod范围。如果被指定, .spec.selector 必须匹配 .spec.template.metadata.labels,否则它将被API拒绝。
如果 .spec.selector 没有被指定, .spec.selector.matchLabels 默认是.spec.template.metadata.labels。 在Pod的template跟.spec.template不同或者数量超过了.spec.replicas规定的数量的情况下,Deployment会杀掉label跟selector不同的Pod。

Pod Template(Pod模板):
spec.template 是 .spec中唯一要求的字段。 .spec.template 是 pod template. 它跟 Pod有一模一样的schema,除了它是嵌套的并且不需要
apiVersion 和 kind字段。 另外为了划分Pod的范围,Deployment中的pod template必须指定适当的label(不要跟其他controller重复了,参考selector)和适当的重启策略。
.spec.template.spec.restartPolicy 可以设置为 Always , 如果不指定的话这就是默认配置。

strategy(更新策略)
.spec.strategy 指定新的Pod替换旧的Pod的策略。 .spec.strategy.type 可以是"Recreate"或者是"RollingUpdate"。

"RollingUpdate"是默认值。 Recreate: 重建式更新,就是删一个建一个。类似于ReplicaSet的更新方式,即首先删除现有的Pod对象,然后由控制器基于新模板重新创建新版本资源对象。
rollingUpdate:滚动更新,简单定义 更新期间pod最多有几个等。可以指定maxUnavailable和 maxSurge 来控制 rolling update 进程。扩容的同时进行缩容,设置最大数量

maxSurge:.spec.strategy.rollingUpdate.maxSurge 是可选配置项,用来指定可以超过期望的Pod数量的最大个数。该值可以是一个绝对值(例如5)或者是期望的Pod数量的百分比(例如10%)。当MaxUnavailable为0时该值不可以为0。通过百分比计算的绝对值向上取整。默认值是1。

例如,该值设置成30%,启动rolling update后新的ReplicatSet将会立即扩容,新老Pod的总数不 能超过期望的Pod数量的130%。旧的Pod被杀掉后,新的ReplicaSet将继续扩容,旧的ReplicaSet会进
一步缩容,确保在升级的所有时刻所有的Pod数量和不会超过期望Pod数量的130%。

4. DaemonSet

DaemonSet 确保全部Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一 个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有Pod。

在每一个node节点上只调度一个Pod,因此无需指定replicas的个数,比如: 在每个node上都运行一个日志采集程序,负责收集node节点本身和node节点之上的各个Pod所产 生的日志在每个node上都运行一个性能监控程序,采集该node的运行性能数据

DaemonSet模板说明
可以通过kubectl命令行方式获取更加详细信息
kubectl explain daemonset
kubectl explain daemonset.spec
kubectl explain daemonset.spec.template.spec

部署DaemonSet
controller/daemonsetdemo.yml

apiVersion: apps/v1 
kind: DaemonSet 
metadata: name: demonsetdemo labels: app: demonsetdemo
spec: template: metadata: name: demonsetdemo labels: app: demonsetdemospec: containers: - name: demonsetdemo image: nginx:1.17.10-alpineimagePullPolicy: IfNotPresentselector: matchLabels:app: demonsetdemo

运行DaemonSet

运行demonset kubectl 
apply -f demonsetdemo.yml查看pod详细信息:只有工作节点创建pod,master节点并不会创建。
kubectl get pod -o wide

4.1 DaemonSet的滚动更新

DaemonSet有两种更新策略类型:
OnDelete:这是向后兼容性的默认更新策略。使用 OnDelete更新策略,在更新DaemonSet模板 后,只有在手动删除旧的DaemonSet pod时才会创建新的DaemonSet pod。这与Kubernetes 1.5或更早版本中DaemonSet的行为相同。

RollingUpdate:使用RollingUpdate更新策略,在更新DaemonSet模板后,旧的DaemonSet pod将被终止,并且将以受控方式自动创建新的DaemonSet pod。

5. Job

一次性执行任务,类似Linux中的job 应用场景:如离线数据处理,视频解码等业务

使用镜像
docker pull perl:slim

apiVersion: batch/v1 
kind: Job 
metadata: name: pi
spec: template: spec: containers: - name: pi image: perl:slim command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(6000)"]restartPolicy: NeverbackoffLimit: 4

backoffLimit: 设置job的容错次数,默认是6

运行Job
kubectl apply -f jobdemo.yml查看pod日志 
kubectl logs -f pi-7nrtv删除job
kubectl delete -f jobdemo.yml

6.StatefulSet

在kubernetes系统中,Pod的管理对象RC,DeploymentDaemonSetJob都面向无状态的服务.
但现实中有很多服务时有状态的,比如一些集群服务,例如mysql集群,集群一般都会有这四个特点:

  1. 每个节点都是有固定的身份ID,集群中的成员可以相互发现并通信
  2. 集群的规模是比较固定的,集群规模不能随意变动
  3. 集群中的每个节点都是有状态的,通常会持久化数据到永久存储中
  4. 如果磁盘损坏,则集群里的某个节点无法正常运行,集群功能受损

如果你通过RCDeployment控制Pod副本数量来实现上述有状态的集群,就会发现第一点是无法满足 的,因为Pod名称和ip是随机产生的,并且各Pod中的共享存储中的数据不能都动.
因此StatefulSet在这种情况下就派上用场了,那么StatefulSet具有以下特性:

  1. StatefulSet里的每个Pod都有稳定,唯一的网络标识,可以用来发现集群内的其它成员,假设, StatefulSet的名称为xxx,那么第1个Pod叫xxx-0,第2个叫xxx-1,以此类推
  2. StatefulSet控制的Pod副本的启停顺序是受控的,操作第N个Pod时,前N-1个Pod已经是运行且准备状态
  3. StatefulSet里的Pod采用稳定的持久化存储卷,通过PV或PVC来实现,删除Pod时默认不会删除与 StatefulSet相关的存储卷(为了保证数据的安全)

相关文章:

[K8S] K8S资源控制器Controller Manager(4)

文章目录 1. 常见的Pod控制器及含义2. Replication Controller控制器2.1 部署ReplicaSet 3. Deployment3.1部署Deployment3.2 运行Deployment3.3 镜像更新方式3.4 Deployment扩容3.5 滚动更新3.6 金丝雀发布(灰度发布)3.7 Deployment版本回退3.8 Deployment 更新策略 4. Daemon…...

C#,.NET常见算法

1.递归算法 1.1.C#递归算法计算阶乘的方法 using System;namespace C_Sharp_Example {public class Program{/// <summary>/// 阶乘&#xff1a;一个正整数的阶乘Factorial是所有小于以及等于该数的正整数的积&#xff0c;0的阶乘是1&#xff0c;n的阶乘是n&#xff0…...

KubeSphere介绍及一键安装k8s

KubeSphere介绍 官网地址&#xff1a;https://kubesphere.io/zh/ KubeSphere愿景是打造一个以 Kubernetes 为内核的云原生分布式操作系统&#xff0c;它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用&#xff08;plug-and-play&#xff09;的集成&#xff0…...

Spring 系列

SpringBoot 实体类&#xff08;Entity&#xff09;层 实体类&#xff08;Entity&#xff09;通常属于模型层&#xff08;Model Layer&#xff09;或领域层&#xff08;Domain Layer&#xff09;。它们代表应用程序中的核心业务数据结构&#xff0c;与数据库表结构紧密对应。在…...

基于opencv[python]的人脸检测

1 图片爬虫 这里的代码转载自&#xff1a;http://t.csdnimg.cn/T4R4F # 获取图片数据 import os.path import fake_useragent import requests from lxml import etree# UA伪装 head {"User-Agent": fake_useragent.UserAgent().random}pic_name 0 def request_pic…...

配置SSH公钥互信

目录 第一台主机&#xff1a;servera&#xff08;172.25.250.101&#xff09; 第一步&#xff1a;查看 . ssh目录下面是否为空 第二步&#xff1a;输入命令ssh-keygen 第三步&#xff1a; 再看查看一下. ssh目录 第四步&#xff1a; 输入命令 ssh-copy-id root172.25.250…...

WEB渗透Web突破篇-SQL注入(MSSQL)

注释符 -- 注释 /* 注释 */用户 SELECT CURRENT_USER SELECT user_name(); SELECT system_user; SELECT user;版本 SELECT version主机名 SELECT HOST_NAME() SELECT hostname;列数据库 SELECT name FROM master..sysdatabases; SELECT DB_NAME(N); — for N 0, 1, 2, ……...

DAY15

数组 冒泡排序 冒泡排序无疑是最为出名的排序算法之一&#xff0c;总共有八大排序 冒泡的代码还是相当简单的&#xff0c;两层循环&#xff0c;外层冒泡轮数&#xff0c;里层依次比较&#xff0c;江湖中人人尽皆知 我们看到嵌套循环&#xff0c;应该马上就可以得到这个算法的…...

pytest结合allure-pytest插件生成测试报告

目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压&#xff0c;解压之后还要配置环境变量&#xff08;把allure目录下bin目录配置到系统变量的path路径&#xff09;&#xff0c;下…...

详细解析用户提交咨询

上一篇文章中写到了使用Server-Sent Events (SSE)&#xff0c;并获取message里面的内容。 本篇文章主要是写&#xff0c;具体该如何实现的具体代码&#xff0c;代码见下方&#xff0c;可直接拿 async submitConsult() {this.scrollToBottom();if (!this.$checkLogin()) return;…...

UDP/TCP协议解析

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…...

力扣94题(java语言)

题目 思路 使用一个栈来模拟递归的过程&#xff0c;以非递归的方式完成中序遍历(使用栈可以避免递归调用的空间消耗)。 遍历顺序步骤&#xff1a; 遍历左子树访问根节点遍历右子树 package algorithm_leetcode;import java.util.ArrayList; import java.util.List; import…...

JavaScript基础入门:构建动态Web世界的基石

简要介绍JavaScript作为互联网上最流行的编程语言之一&#xff0c;它在构建交互式网页、动态Web应用及服务器后端&#xff08;通过Node.js&#xff09;中的重要性。强调学习JS对于任何想要进入Web开发领域的人来说是不可或缺的。 1. JavaScript是什么&#xff1f; 定义JavaSc…...

01-client-go

想学习K8S源码&#xff0c;可以加 &#xff1a;mkjnnm 1、介绍 client-go 是用来和 k8s 集群交互的go语言客户端库&#xff0c;地址为&#xff1a;https://github.com/kubernetes/client-go client-go 的版本有两种标识方式&#xff1a; v0.x.y (For each v1.x.y Kubernetes…...

WebRTC QoS方法十三.2(Jitter延时的计算)

一、背景介绍 一些报文在网络传输中&#xff0c;会存在丢包重传和延时的情况。渲染时需要进行适当缓存&#xff0c;等待丢失被重传的报文或者正在路上传输的报文。 jitter延时计算是确认需要缓存的时间 另外&#xff0c;在检测到帧有重传情况时&#xff0c;也可适当在渲染时…...

PHP进阶:前后端交互、cookie验证、sql与php

单词&#xff1a;construct 构造 destruct 摧毁 empty 空的 trim 修剪 strip 清除 slash 斜线 special 特殊 char 字符 query 询问 构造方法&#xff08;魔术方法&#xff09; 构造方法是一种特殊的函数&#xff0…...

优思学院|ANOVA方差分析是什么?如何用EXCEL进行计算?

在数据分析、六西格玛管理领域中&#xff0c;ANOVA&#xff08;方差分析&#xff09;是一种基本的统计工具&#xff0c;广泛用于确定三组或三组以上的独立群体之间的平均值是否存在统计学上的显着差异。ANOVA的主要目的在于评估一个或多个因素的影响&#xff0c;通过比较不同样…...

Mindspore框架循环神经网络RNN模型实现情感分类|(三)RNN模型构建

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…...

深度解读大语言模型中的Transformer架构

一、Transformer的诞生背景 传统的循环神经网络&#xff08;RNN&#xff09;和长短期记忆网络&#xff08;LSTM&#xff09;在处理自然语言时存在诸多局限性。RNN 由于其递归的结构&#xff0c;在处理长序列时容易出现梯度消失和梯度爆炸的问题。这导致模型难以捕捉长距离的依…...

安装好anaconda,打开jupyter notebook,新建 报500错

解决办法&#xff1a; 打开anaconda prompt 输入 jupyter --version 重新进入jupyter notebook&#xff1a; 可以成功进入进行代码编辑...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...