【笔记版】edgecore.yaml分析总结

news2024/11/25 1:30:05

1. 文件路径

/etc/kubeedge/config
edgecore.yaml是该目录下唯一的文件
附上链接:edgecore.yaml
在这里插入图片描述

2. 文件生成方式

2.1 方式一

使用keadm安装部署的方式,执行完keadm join --cloudcore-ipport=cloudcore监听的IP地址:端口(默认为10002) --token=获取到的token字符串后自动生成。
[图片]

执行后,edgecore节点会自行使用systemctl进行管理,并加入开机启动项,同时启动edgecore节点,此时edgecore节点的运行状态不一定正常。
若edgecore状态不正常,修改并检查配置文件edgecore.yaml。
然后重启

systemctl restart edgecore

2.2 方式二
如果使用二进制安装,需要先获取初始的最小化edgecore配置文件:(/etc/kubeedge/config路径),或者
–defaultconfig创建完整配置文件。

edgecore --minconfig > edgecore.yaml

启动edgecore服务

nohup ./edgecore --config edgecore.yaml 2>&1 > edgecore.log &

nohup : no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
2>&1 : 将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 edgecore.log 文件中。
0 – stdin (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)
在命令的末尾加个&符号后,程序可以在后台运行

3. 总体层次概述

暂时无法在飞书文档外展示此内容

4. modules 组件概述

组件名意义
dbTest测试数据库性能
deviceTwin设备的动态属性
edgeHub通信接口,WebSocket 客户端,用于云边消息同步
edgeStream支持ApiServer向Kubelet发起的containerLog、exec和metrics请求。云边隧道基于WebSocket建造,支持双向传输和流式传输
edged管理边缘的容器化应用程序,一个运行在 edge 节点的 agent 程序
eventBus使用MQTT处理内部边缘通信。
metaManager管理边缘节点上的元数据。
serviceBusHTTP 客户端与 HTTP 服务器使用 REST 进行交互,为云端组件提供 HTTP 客户端功能,使其请求到达运行在边缘端的 HTTP 服务器

[图片]

5. edged解析

5.1 edged启动原理

EdgeD是管理节点生命周期的边缘节点模块,(轻量化的 kubelet),它可以帮助用户在边缘节点上部署容器化的工作负载或应用程序。这些工作负载可以执行任何操作,从简单的远程遥测数据操作到分析或ML推理等等。使用kubectl云端的命令行界面,用户可以发出命令来启动工作负载。

通过容器运行时接口Container Runtime Interface(CRI)支持几种符合OCI的运行时runtimes。请参阅KubeEdge运行时配置,以获取有关如何配置边缘以利用其他运行时的更多信息。
edged内部模块如图所示:
当edged启动时,首先初始化并启动各个模块,最后进行pod的sync。
各组件说明:edged
[图片]

当edged启动时,首先初始化并启动各个模块,最后进行pod的sync。下面以一个pod的创建来看一下edged中各个模块是如何协作完成pod的生命周期管理的。
当edged接收到pod的insert消息时,将pod所有信息加入podmanager、probemanager,podAdditionQueue加入node-namespace/node-name信息。
启动一个goroutine,创建下发到此节点的pod。
[图片]

此时我们根据pod的定义成功创建pod,之后还要对pod的状态进行管理。
启动一个goroutine执行syncLoopIteration()函数:
①当liveness探针的结果更新,若内容是“failure”,根据container的restart policy执行相应的操作,比如:never->do nothing;onfailed->判断container的status,若completed->do nothing,否则将加podAdditionQueue,等待被再次创建;always->加入podAddtionQueue,等待被再次创建。
②当收到PLEG的event,更新podmanager中podstatus(containerruntime中获取当前sataus,probemanager更新ready状态),更新statusmanager中的缓存podstatus。若event是containerdied,则根据restart policy执行相应操作。
另外,statusmanager中会定时(10s)将podstatus上传至metamanager
[图片]


Edged 的注册和启动过程代码在 edge/pkg/edged/edged.go 中。
edged.go源码

5.2 edged配置项解析

kubeedge官网解释:https://kubeedge.io/zh/docs/architecture/edge/edged

edged:
    cgroupDriver: cgroupfs          #cri的cgroup驱动程序配置为cgroupfs
    cgroupRoot: ""                  #默认为空,使用底层containter runtime的cgroup root,一般是 /sys/fs/cgroup/
    cgroupsPerQOS: true             #对应 pod 容器的 QOS 级别
    clusterDNS: ""                  #集群dns(默认dns)
    clusterDomain: ""               #集群域(默认域)
    cniBinDir: /opt/cni/bin         #放可执行的原生CNI插件。
    cniCacheDirs: /var/lib/cni/cache #存储运行容器的网络配置信息
    cniConfDir: /etc/cni/net.d        #CNI的配置文件,在不同CNI插件中表现为NetworkConfig结构体的差异。
    concurrentConsumers: 5                      #并发
    devicePluginEnabled: false                  #设备插件是否启用
    dockerAddress: unix:///var/run/docker.sock  #Docker守护进程通信
    edgedMemoryCapacity: 7852396000             #边缘内存容量
    enable: true
    enableMetrics: true                         #一个集群范围内的资源数据集和工具,只是显示数据,并不提供数据存储服务
    gpuPluginEnabled: false                     #gpu插件
    hostnameOverride: edgezh1-virtual-machine   #覆盖名
    imageGCHighThreshold: 80                    #垃圾回收高阈值
    imageGCLowThreshold: 40                     #垃圾回收低阈值
    imagePullProgressDeadline: 60
    maximumDeadContainersPerPod: 1
    networkPluginMTU: 1500
    nodeIP: 192.168.2.101
    nodeStatusUpdateFrequency: 10
    podSandboxImage: kubeedge/pause:3.1
    registerNode: true
    registerNodeNamespace: default
    remoteImageEndpoint: unix:///var/run/dockershim.sock
    remoteRuntimeEndpoint: unix:///var/run/dockershim.sock
    runtimeRequestTimeout: 2
    runtimeType: docker

5.2.1 cgroup

cgroup是什么?
Cgroup (Control Group)是对一组进程的资源使用(CPU、内存、磁盘 I/O 和网络等)进行限制、审计和隔离。
cgroups(Control Groups) 是 linux 内核提供的一种机制。(对多组,暂时场景不是多组,所以不深入探究)。
cgroupfs:
类似于procfs和sysfs,是一种虚拟文件系统。并且cgroupfs是可以挂载的,默认情况下挂载在/sys/fs/cgroup目录。
[图片]

[图片]

三个核心功能:
分组:根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内。
限制:可以限制、记录任务组所使用的物理资源。
调度:内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的。

cgroup如何分组?

可以先看这个目录层次,或者到云端设备上查看。
内容较多,资源切分方面可根据下图的指引结合理解。
在这里插入图片描述

  • cgroup.clone_ children, cpuset 的 subsystem 会读取这个配置文件,如果这个值是 1 (默认是 0),子 cgroup 才会继承父 cgroup 的 cpuset 的配置。
  • cgroup.procs 是树中当前节点 cgroup 中的进程组 ID,现在的位置是在根节点,这个文件中会有现在系统中所有进程组的 ID。
  • notify_on_releaserelease agent 会一起使用。 notify_on_release 标识当这个 cgroup 最后一个进程退出的时候是否执行了 release_agent; release_agent 则是一个路径,通常用作进程退出之后自动清理掉不再使用的 cgroup。
  • tasks 标识该 cgroup 下面的进程 ID,如果把一个进程 ID 写到 tasks 文件中,便会将相应的进程加入到这个 cgroup 中。

cgroupsPerQOS配置项中提到QoS级别是什么?
在这里插入图片描述

cgroup如何限制?

https://zhuanlan.zhihu.com/p/636467664
对cgroup的基本操作:https://zhuanlan.zhihu.com/p/651405353
以一个关联cpu和memory的一个控制组my_group为例子,
在这里插入图片描述
在这里插入图片描述

Container级别:
路径:

  • Guaranteed container:默认 /sys/fs/cgroup/{controller}/kubepods/{pod_id}/{container_id}/;
  • Burstable container:默认 /sys/fs/cgroup/{controller}/kubepods/burstable/{pod_id}/{container_id}/;
  • BestEffort container:默认 /sys/fs/cgroup/{controller}/kubepods/besteffort/{pod_id}/{container_id}/。

一个资源申请(容器)的例子:

apiVersion: v1
kind: Pod
spec:
  containers:
name: busybox
image: busybox
resources:
  limits:
    cpu: 500m    
    memory: "400Mi" 
  requests:
    cpu: 250m
    memory: "300Mi"
command: ["md5sum"]
args: ["/dev/urandom"]

在Kubernetes中,资源请求和限制通常使用以下单位来表示:

CPU:以"millicores"为单位,即千分之一的CPU核心。例如,1000m表示一个核心。
内存:以字节为单位(B),可以使用K、Ki、M、Mi、G、Gi等后缀来表示。例如,1Gi表示1GB。

requests 经过转换之后会写入 cpu.share, 表示这个 cgroup 最少可以使用的 CPU;
limits 经过转换之后会写入 cpu.cfs_quota_us, 表示这个 cgroup 最多可以使用的 CPU;
resources.requests.cpu:指定容器所需的CPU资源数量;
resources.requests.memory:指定容器所需的内存资源数量;
resources.limits.cpu:指定容器的CPU资源限制;
resources.limits.memory:指定容器的内存资源限制。

Pod 级别:
Pod 配置在 QoS cgroup 配置的下一级,

  • Guaranteed Pod:默认 /sys/fs/cgroup/{controller}/kubepods/{pod_id}/;
  • Burstable Pod:默认 /sys/fs/cgroup/{controller}/kubepods/burstable/{pod_id}/;
  • BestEffort Pod:默认 /sys/fs/cgroup/{controller}/kubepods/besteffort/{pod_id}/。
    kubelet 计算 pod requets/limits 的过程

一个Pod的容器的request和limits是通过在Pod的容器定义中设置资源请求和限制来确定的。

在Pod的容器定义中,可以为每个容器定义资源请求和限制。资源请求是指容器在运行时对某一资源(如CPU或内存)的需求量。资源限制是指容器在运行时对某一资源的最大使用量。

在计算一个Pod的所有容器的资源请求和限制时,Kubernetes将遵循以下规则:

如果一个容器没有设置资源请求和限制,Kubernetes将默认使用集群级别的资源限制。
如果一个Pod中的容器设置了资源请求,但没有设置资源限制,Kubernetes将使用资源请求作为容器的限制值。
如果一个Pod中的容器同时设置了资源请求和限制,Kubernetes将使用设置的资源请求和限制值。
总结起来,一个Pod的所有容器的资源请求和限制是根据容器定义中设置的值来计算的,如果没有设置则会采用默认值。这些资源请求和限制对于Kubernetes调度和资源管理非常重要,可以确保在容器运行时有足够的资源可用,并保证不会过度使用资源。

cgroup如何调度?

调度算法根据各 node 当前可供分配的资源量(Allocatable),为容器选择合适的 node; 注意,k8s 的调度只看 requests,不看 limits。

5.2.2 cni

kubelet创建/删除pod时,会调用CRI,然后CRI会调用CNI来进行pod网络的构建/删除。
cni标准规范也是一套标准的容器网络接口规范。

cniBinDir: /opt/cni/bin         #放可执行的原生CNI插件。
cniCacheDirs: /var/lib/cni/cache #存储运行容器的网络配置信息
cniConfDir: /etc/cni/net.d        #CNI的配置文件,在不同CNI插件中表现为NetworkConfig结构体的差异。

在这里插入图片描述
在这个示意图中,我们看到有一个容器运行时 (Container Runtime) 和多个不同的网络插件 (Network Plugins),它们可以是 Calico、Flannel、Weave 等等。CNI 提供了一个统一的接口,使得容器运行时可以与任何支持 CNI 规范的网络插件进行通信。
当一个容器启动时,容器运行时会调用 CNI 接口,并将容器的网络配置传递给网络插件。网络插件会根据配置信息来创建和管理容器的网络,同时也负责处理容器之间的通信。CNI 还定义了一些标准的网络配置参数,用于指定容器的 IP 地址、网关、子网等。

5.2.3 GC

垃圾回收机制(Garbage collection)的设计和实现
与镜像回收有关的主要有以下俩参数:
imageGCHighThreshold:表示一个 pod 最多可以保存多少个已经停止的容器,默认为1;
imageGCLowThreshold:一个 node 上最多可以保留多少个已经停止的容器,默认为 -1,表示没有限制;
镜像回收的过程如下:
当用于存储镜像的磁盘使用率达到百分之–image-gc-high-threshold时将触发镜像回收,删除最近最久未使用(LRU,Least Recently Used)的镜像直到磁盘使用率降为百分之–image-gc-low-threshold或无镜像可删为止。
查看当前磁盘使用率 :df -lh
储存docker的镜像信息:/var/lib/docker
官网说明:

  • The image garbage collector is an edged routine which wakes up every 5 secs, and collects information about disk usage based on the policy used.
    镜像垃圾收集器是一个边缘例程,每5秒唤醒一次,并根据所使用的策略收集磁盘使用信息。
  • The policy for garbage collecting images takes two factors into consideration, HighThresholdPercent and LowThresholdPercent .
    图像垃圾收集策略需要考虑两个因素:HighThresholdPercent和LowThresholdPercent。
  • Disk usage above the high threshold will trigger garbage collection, which attempts to delete unused images until the low threshold is met.
    磁盘使用率高于高阈值将触发垃圾收集,垃圾收集将尝试删除未使用的映像,直到达到低阈值。
  • Least recently used images are deleted first.
    首先删除最近最少使用的图像。

5.2.4 taints

- effect: NoSchedule 
  key: node-role.kubernetes.io/edge
  volumeStatsAggPeriod: 60000000000

每个污点的组成如下:
key=value:effect
每个污点有一个 key 和 value 作为污点的标签,其中 value 可以为空,effect 描述污点的作用。
当前 taint effect 支持如下三个选项:
NoSchedule :表示k8s将不会将Pod调度到具有该污点的Node上
PreferNoSchedule :表示k8s将尽量避免将Pod调度到具有该污点的Node上
NoExecute :表示k8s将不会将Pod调度到具有该污点的Node上,同时会将Node上已经存在的Pod驱逐出去

6. edgestream解析

Stream是KubeEdge中提供云边隧道的模块,目前支持ApiServer向Kubelet发起containerLog、exec和metrics请求。云边隧道基于WebSocket建造,支持双向传输和流式传输。

参考自:
edgestream启动原理

主要功能是启动创建websocket

  1. 读取本地的证书配置
  2. 连接cloud 端的 tunnel server(也就是下面提到的server端)
edgeStream:                          
    handshakeTimeout: 30                #握手超时时间(second) default  30
    readDeadline: 15                    #读取证书的截止时间:15s内
    server: 1.94.44.163:30004
    tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crt
    tlsTunnelCertFile: /etc/kubeedge/certs/server.crt
    tlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.key    writeDeadline: 15                   #写证书的截止时间:15s内

7. edgeHub解析

官网解释
EdgeHub是Azure IoT Edge的核心组件之一,是一个轻量级的消息路由器,用于在边缘设备上与云平台进行通信。它起到了以下几个作用:

  1. 消息路由:EdgeHub允许边缘设备与云平台之间进行双向的消息传递。它可以接收来自云平台的消息,并将其路由到边缘设备上运行的模块,也可以将来自边缘设备的消息发送到云平台。这种消息路由的能力使得边缘设备能够与云平台进行实时的通信和数据交换。

  2. 模块通信:在边缘设备上运行的模块之间可能需要相互通信,例如将传感器数据从一个模块传递给另一个模块进行处理。EdgeHub提供了一个统一的消息传递机制,使得模块之间可以通过发送和接收消息进行通信。这种模块之间的通信能力使得边缘设备上的各个模块可以协同工作,共同完成复杂的任务。

  3. 安全性:EdgeHub提供了对消息传输的安全保护。它使用TLS来加密消息,以确保消息在传输过程中的机密性和完整性。此外,EdgeHub还支持设备身份验证和授权,只有经过身份验证的设备才能与边缘设备进行通信,从而增加了系统的安全性。

总的来说,EdgeHub在边缘端起到了消息路由、模块通信和安全性保护等重要作用,使得边缘设备能够与云平台进行可靠的通信,并提供了模块之间的协同工作能力。

edgeHub:      #通信接口,WebSocket 客户端,用于云边消息同步
    enable: true
    heartbeat: 15                         #根据心跳时间向云端发送心跳 15s发一次
    httpServer: https://1.94.44.163:30002 #httpclient:用于与EdgeCore与CloudCore通信所需证书的申请
    projectID: e632aba927ea4ac2b575ec1603d56f10
    quic:                                  #quic client:负责与CloudCore的日常通信(资源下发、状态上传等)
      enable: false
      handshakeTimeout: 30                  #握手超时时间:30s(默认30)
      readDeadline: 15                      #读取证书的截止时间:15s内
      server: 1.94.44.163:30001
      writeDeadline: 15
    rotateCertificates: true                #证书轮转
    tlsCaFile: /etc/kubeedge/ca/rootCA.crt
    tlsCertFile: /etc/kubeedge/certs/server.crt
    tlsPrivateKeyFile: /etc/kubeedge/certs/server.key
    token: 111900b80a0a2a87b0910b2590963e5dadbfa56f977810909b7eabdf0cc1668c.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDY1NjMzNDF9.QSRQsMmL_YZQFEfLC0r0Rr6_HgNBKmBPvs50VLfHGnU
    websocket:                          #websocket:负责与CloudCore的日常通信(资源下发、状态上传等)
      enable: true
      handshakeTimeout: 30
      readDeadline: 15
      server: 1.94.44.163:30000
      writeDeadline: 15

8. MetaManager解析

官网解释
MetaManager在edge端的作用是对边缘设备进行管理和控制。它能够对边缘设备的资源进行监控和调度,管理边缘计算节点和资源的分配,以及实现边缘设备的远程配置和更新。通过MetaManager,用户可以实现对边缘设备的集中管理,提升边缘计算的效率和可靠性。

  metaManager:   #它管理边缘节点上的元数据。
    contextSendGroup: hub
    contextSendModule: websocket #上下文发送的模块,客户端和服务端之间建立tcp连接的通信
    enable: true
    metaServer:
      enable: false
      server: 127.0.0.1:10550
    podStatusSyncInterval: 60  #定期发送MetaSync操作消息的同步间隔,同步pod状态,60s(默认)。
    remoteQueryTimeout: 60    #发送请求超时时间,60s(默认)

9. DeviceTwin解析

官网解释

在Edge设备上,Device Twin是Azure IoT Hub提供的一个关键功能。它允许开发人员在设备端和云端之间同步设备的状态和属性。

具体而言,Device Twin在Edge端的作用包括:

  1. 设备状态管理:Device Twin允许设备端将其当前状态(如温度、湿度、电池电量等)报告给云端,并将其保存为设备的状态属性。这样,云端可以随时了解设备的最新状态。

  2. 远程配置:设备端可以使用Device Twin获取来自云端的配置信息,并根据配置信息调整自己的行为。这样,设备可以动态地适应不同的环境和需求。

  3. 双向通信:Device Twin允许设备端和云端之间进行双向通信。设备可以向云端发送命令、请求或报告设备状态,云端可以向设备端发送配置信息、命令或其他指令。

  4. 设备拓扑管理:Device Twin允许设备端创建和管理设备拓扑。设备可以将自己作为父设备或子设备与其他设备进行关联,并在Device Twin中管理这些关联关系。

总的来说,Device Twin在Edge端提供了一种可靠的、双向的设备与云端之间的通信机制,使得设备可以灵活地与云端进行交互,并根据云端的配置和指令适应不同的场景和需求。在Edge设备上,Device Twin是Azure IoT Hub提供的一个关键功能。它允许开发人员在设备端和云端之间同步设备的状态和属性。

10. EventBus解析

EventBus在边缘端起到了以下作用:

  1. 事件发布与订阅:EventBus允许在边缘端组件之间进行松散耦合的通信,组件可以发布事件,并且其他组件可以订阅这些事件。这种事件驱动的机制能够提高边缘端的可扩展性和灵活性。

  2. 实时数据传递:边缘端的设备和传感器通常会产生大量的实时数据。EventBus可以用于在边缘端不同组件之间实时传递数据,实现实时数据的处理和分发。这种实时的数据传递能够帮助边缘端系统实时响应和处理数据。

  3. 解耦和管理:EventBus可以解耦边缘端的不同组件,使它们之间的通信更加灵活和可扩展。通过订阅事件的方式,组件之间不需要直接耦合在一起,降低了代码的依赖性和复杂性。同时,EventBus还可以管理事件的发布和订阅,确保事件的交付和处理。

  4. 系统集成:边缘端的系统往往由多个组件和服务组成,这些组件和服务可能来自不同的厂商或者遵循不同的通信协议。EventBus可以作为一个中间件,帮助不同的组件和服务进行集成和协同工作。通过发布和订阅事件的方式,不同的组件可以通过EventBus进行通信和协作。

总之,EventBus在边缘端起到了解耦和管理组件之间通信、实时数据传递、系统集成等作用,提高了边缘端系统的可扩展性、灵活性和实时性。

 eventBus:       #使用MQTT处理内部边缘通信。
    enable: true
    eventBusTLS:
      enable: false
      tlsMqttCAFile: /etc/kubeedge/ca/rootCA.crt
      tlsMqttCertFile: /etc/kubeedge/certs/server.crt
      tlsMqttPrivateKeyFile: /etc/kubeedge/certs/server.key
    mqttMode: 2 #启用内部 mqtt 代理(mqttMode=2)。
    mqttQOS: 0
    mqttRetain: false
    mqttServerExternal: tcp://127.0.0.1:1883
    mqttServerInternal: tcp://127.0.0.1:1884
    mqttSessionQueueSize: 100

(mqttMode=0):bothMqttMode:启用内部和外部代理(mqttMode=1):externalMqttMode:仅启用外部代理

11. ServiceBus解析

在边缘端,ServiceBus起多个作用:

ServiceBus在边缘端起到了连接边缘设备和云端的桥梁作用,提供可靠的消息传递、数据集成、高可用性和离线操作等功能。这使得边缘设备可以更好地与云端进行交互,并实现更强大的功能和应用场景。

  serviceBus:  
    enable: false
    port: 9060
    server: 127.0.0.1
    timeout: 60

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1488980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式驱动学习第二周——断言机制

前言 这篇博客来聊一聊C/C的断言机制。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏,一起讨论一起学习。现在关注就是老粉啦! 目录 前言1. 断言介绍…

沉浸式翻译——当翻译插件遇上ChatGPT

最近发现一款超好用的翻译插件——沉浸式翻译,强烈推荐!* 二话不说,先上效果: 翻译前 翻译后: 好评如潮: 如何安装: 1、找到插件地址并安装 其它浏览器请行查找! 2、安装完后,会显示这个图标 (安装后会显示 Pro 会员页面&#xf…

MQL5学习之简单移动平均线MA的编写

昨天还是有点高估自己了,MACD相对较难一点,改学MA的编写,首先明确MA的计算,假如有4个值,p[1,2, 3, 4], period3, 则v[0]p[0], v[1]p[1],v[2](p[0]p[1]p[2])/32, v[3](v[2]*3p[3]-p…

xss.haozi.me:0x08

</style ><script> alert(1)</script>

商业运作之流量之谜,粉丝增长100%

从业13年工作需要才写了这个博客&#xff0c;13年累计粉丝15个&#xff0c;哈哈我是不是太佛系了&#xff1f; 如今走上了创业之路偶尔也会遇到一些技术难题&#xff0c;我都会把解决问题的思路和方法同步到博客&#xff0c;没想到短短半年粉丝从15增长到了30。之前我并没有认…

谷歌新一代Gemini 1.5多模态模型, 最长可达100万token上下文窗口

Google在人工智能领域已经发布了自己的Gemini大模型&#xff0c;其Gemini模型是一个多模态模型&#xff0c;不仅可以支持文字输入&#xff0c;还支持图片输入。而在Gemini ultra发布不久&#xff0c;Gemini 1.5大模型也相继发布。Gemini 1.5在多个维度上都有了显著的改进&#…

Shell管道和过滤器

一、Shell管道 Shell 还有一种功能&#xff0c;就是可以将两个或者多个命令&#xff08;程序或者进程&#xff09;连接到一起&#xff0c;把一个命令的输出作为下一个命令的输入&#xff0c;以这种方式连接的两个或者多个命令就形成了管道&#xff08;pipe&#xff09;。 重定…

模拟算法题练习(一)(扫雷,灌溉,回文日期)

目录 模拟算法介绍&#xff1a; &#xff08;一、扫雷&#xff09; &#xff08;二、灌溉&#xff09; &#xff08;三、回文日期&#xff09; 有一说一这题大佬的题解是真的强 模拟算法介绍&#xff1a; 模拟算法通过模拟实际情况来解决问题&#xff0c;一般容易理解但是实…

探索Linux世界:初次接触和基本指令(文件操作)

文章目录 1.基本介绍和准备2.基本指令和Linux的基本操作3.几个重要基本指令3.1 ls - 列出文件和目录3.1.1文件的知识3.1.2 .和..文件 3.2pwd - 显示当前工作目录3.2.1路径知识 3.3 cd - 切换目录3.4 touch - 创建文件或更新时间戳3.5mkdir - 创建新目录3.6rm - 删除文件或目录3…

22.基于springboot + vue实现的前后端分离-汽车票网上预定系统(项目 + 论文PPT)

项目介绍 系统是一个B/S模式系统&#xff0c;采用Spring Boot框架&#xff0c;MySQL 数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得汽车票网上预订系统管理工作系统化、规范化。本系统的使用使管理人…

解决prettier 报错 Delete `␍`

根目录&#xff08;么有的话&#xff09;新建 .prettierrc.js配置文件 module.exports {tabWidth: 2,semi: true,printWith: 80,singleQuote: true,quoteProps: consistent,htmlWhitespaceSensitivity: strict,vueIndentScriptAndStyle: true,// 主要是最后一行endOfLine:aut…

【Quarto】Markdown导出PPT

title: “Quarto Basics” mainfont: “LXGW WenKai Mono” format: revealjs: theme: default incremental: true pptx: incremental: true html: code-fold: true beamer: incremental: true aspectratio: 169 QUARTO 这段代码是一个 YAML 头部&#xff08;front matter&…

解决NENU研究生教务系统网站“不能创建对象”等兼容性问题

本问题由吴越洋同学首先解决&#xff0c;在阅读了吴越洋同学的博客和他编写的Tempermonkey插件脚本代码后&#xff0c;完成了本项目。 吴越洋同学的博客地址为修复NENU教务系统“不能创建对象”等兼容性问题 - YorkWus Blog 吴越洋同学的插件地址为东北师范大学本科生、研究生教…

Windows10笔记本亮度调节按键失灵

操作&#xff1a;任务管理器 -> 监视器 -> 右键点击 -> 通用即插即用监视器 -> 更新驱动程序 -> 浏览我的电脑以查找我的驱动程序 -> 让我从计算机上的可用驱动程序列表中选取 -> 点击通用即插即用监视器 -> 点击关闭 -> 重启电脑。 第一步&#x…

计算复数x的余弦值计算复数x的反余弦值cmath.cos(x)cmath.acos(x)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算复数x的余弦值 计算复数x的反余弦值 cmath.cos(x) cmath.acos(x) [太阳]选择题 请问cmath.cos(x)的作用是&#xff1a; import cmath print("【执行】cmath.cos(0)") print(cm…

2.3_5 用信号量实现互斥、同步、前驱关系

文章目录 2.3_5 用信号量实现互斥、同步、前驱关系&#xff08;一&#xff09;信号量机制实现进程互斥&#xff08;二&#xff09;信号量机制实现进程同步&#xff08;三&#xff09;信号量机制实现前驱关系 总结 2.3_5 用信号量实现互斥、同步、前驱关系 我们之前学习了进程互…

MySQL学习Day25——数据库其他调优策略

一、数据库调优的措施: 1.调优的目标: (1)尽可能节省系统资源&#xff0c;以便系统可以提供更大负荷的服务 (2)合理的结构设计和参数调整&#xff0c;以提高用户操作的响应速度 (3)减少系统的瓶颈&#xff0c;提高MySQL数据库整体的性能; 2.如何定位调优:用户的反馈、日志…

基于Springboot的无人智慧超市管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的无人智慧超市管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

微软多兴趣召回:Octopus

Octopus: Comprehensive and Elastic User Representation for the Generation of Recommendation Candidates 背景&#xff1a; 多兴趣通道(channel)结构的多兴趣召回模型在兴趣通道数量上面存在两个问题 兴趣通道较少&#xff0c;不能充分学习到用户的多个兴趣。兴趣通道较…

力扣hot9---滑动窗口

题目&#xff1a; 先记录一下&#xff08;没想到有生之年&#xff0c;还能&#xff09;&#xff1a;其实还能优化&#xff0c;后面会讲述优化思路 思路&#xff1a; 滑动窗口的大小就是固定的&#xff0c;就是len_p。那么依次将窗口从s的最左端向右滑动。在当下的窗口中&#x…