【筆記版】edgecore.yaml分析總結

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驅動程序配置為cgroupfscgroupRoot: ""                  #默認為空,使用底層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: trueenableMetrics: true                         #一個集群范圍內的資源數據集和工具,只是顯示數據,并不提供數據存儲服務gpuPluginEnabled: false                     #gpu插件hostnameOverride: edgezh1-virtual-machine   #覆蓋名imageGCHighThreshold: 80                    #垃圾回收高閾值imageGCLowThreshold: 40                     #垃圾回收低閾值imagePullProgressDeadline: 60maximumDeadContainersPerPod: 1networkPluginMTU: 1500nodeIP: 192.168.2.101nodeStatusUpdateFrequency: 10podSandboxImage: kubeedge/pause:3.1registerNode: trueregisterNodeNamespace: defaultremoteImageEndpoint: unix:///var/run/dockershim.sockremoteRuntimeEndpoint: unix:///var/run/dockershim.sockruntimeRequestTimeout: 2runtimeType: 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: 250mmemory: "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/edgevolumeStatsAggPeriod: 60000000000

每個污點的組成如下:
key=value:effect
每個污點有一個 key 和 value 作為污點的標簽,其中 value 可以為空,e?ect 描述污點的作用。
當前 taint e?ect 支持如下三個選項:
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  30readDeadline: 15                    #讀取證書的截止時間:15s內server: 1.94.44.163:30004tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crttlsTunnelCertFile: /etc/kubeedge/certs/server.crttlsTunnelPrivateKeyFile: /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: trueheartbeat: 15                         #根據心跳時間向云端發送心跳 15s發一次httpServer: https://1.94.44.163:30002 #httpclient:用于與EdgeCore與CloudCore通信所需證書的申請projectID: e632aba927ea4ac2b575ec1603d56f10quic:                                  #quic client:負責與CloudCore的日常通信(資源下發、狀態上傳等)enable: falsehandshakeTimeout: 30                  #握手超時時間:30s(默認30)readDeadline: 15                      #讀取證書的截止時間:15s內server: 1.94.44.163:30001writeDeadline: 15rotateCertificates: true                #證書輪轉tlsCaFile: /etc/kubeedge/ca/rootCA.crttlsCertFile: /etc/kubeedge/certs/server.crttlsPrivateKeyFile: /etc/kubeedge/certs/server.keytoken: 111900b80a0a2a87b0910b2590963e5dadbfa56f977810909b7eabdf0cc1668c.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDY1NjMzNDF9.QSRQsMmL_YZQFEfLC0r0Rr6_HgNBKmBPvs50VLfHGnUwebsocket:                          #websocket:負責與CloudCore的日常通信(資源下發、狀態上傳等)enable: truehandshakeTimeout: 30readDeadline: 15server: 1.94.44.163:30000writeDeadline: 15

8. MetaManager解析

官網解釋
MetaManager在edge端的作用是對邊緣設備進行管理和控制。它能夠對邊緣設備的資源進行監控和調度,管理邊緣計算節點和資源的分配,以及實現邊緣設備的遠程配置和更新。通過MetaManager,用戶可以實現對邊緣設備的集中管理,提升邊緣計算的效率和可靠性。

  metaManager:   #它管理邊緣節點上的元數據。contextSendGroup: hubcontextSendModule: websocket #上下文發送的模塊,客戶端和服務端之間建立tcp連接的通信enable: truemetaServer:enable: falseserver: 127.0.0.1:10550podStatusSyncInterval: 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: trueeventBusTLS:enable: falsetlsMqttCAFile: /etc/kubeedge/ca/rootCA.crttlsMqttCertFile: /etc/kubeedge/certs/server.crttlsMqttPrivateKeyFile: /etc/kubeedge/certs/server.keymqttMode: 2 #啟用內部 mqtt 代理(mqttMode=2)。mqttQOS: 0mqttRetain: falsemqttServerExternal: tcp://127.0.0.1:1883mqttServerInternal: tcp://127.0.0.1:1884mqttSessionQueueSize: 100

(mqttMode=0):bothMqttMode:啟用內部和外部代理(mqttMode=1):externalMqttMode:僅啟用外部代理

11. ServiceBus解析

在邊緣端,ServiceBus起多個作用:

ServiceBus在邊緣端起到了連接邊緣設備和云端的橋梁作用,提供可靠的消息傳遞、數據集成、高可用性和離線操作等功能。這使得邊緣設備可以更好地與云端進行交互,并實現更強大的功能和應用場景。

  serviceBus:  enable: falseport: 9060server: 127.0.0.1timeout: 60

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718492.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718492.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718492.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

題目 1431: 藍橋杯第五屆真題-分糖果

題目描述: 有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然后進行下面的游戲: 每個小朋友都把自己的糖果分一半給左手邊的孩子。 一輪分糖后,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。 反復進行這個游戲…

設計模式精解:GoF 23種設計模式全解析

在軟件工程中,設計模式是為了解決常見的軟件設計問題而形成的一套經典解決方案。這些模式不僅能夠幫助開發者提高設計的靈活性和代碼的重用性,還能使問題的解決方案更加清晰、易于理解。《設計模式精解-GoF 23種設計模式》一書中所列舉的23種…

微信小程序的單位

在小程序開發中,rpx是一種相對長度單位,用于在不同設備上實現自適應布局。它是微信小程序特有的單位,表示屏幕寬度的 1/750。 rpx單位的好處在于可以根據設備的屏幕寬度進行自動換算,使得頁面在不同設備上保持一致的顯示效果。例…

學習筆記 前端

學習筆記 前端 學習記錄nodejsyarn解決方法 學習記錄 nodejs yarn 描述:想體驗一下chatgptnextweb在本地部署,但是本地部署需要yarn環境,網上看了yarn在node16以上就自帶了,而我的電腦是node18,所以就直接輸入了ya…

(十)SpringCloud系列——openfeign的高級特性實戰內容介紹

前言 本節內容主要介紹一下SpringCloud組件中微服務調用組件openfeign的一些高級特性的用法以及一些常用的開發配置,如openfeign的超時控制配置、openfeign的重試機制配置、openfeign集成高級的http客戶端、openfeign的請求與響應壓縮功能,以及如何開啟…

論文閱讀-高效構建檢查點

論文標題:On Efficient Constructions of Checkpoints 摘要 高效構建檢查點/快照是訓練和診斷深度學習模型的關鍵工具。在本文中,我們提出了一種適用于檢查點構建的有損壓縮方案(稱為LC-Checkpoint)。LC-Checkpoint同時最大化了…

MFC中CString的MakeUpper使用方法

在MFC中,CString類提供了MakeUpper函數來將字符串中的字符全部轉換為大寫。MakeUpper函數沒有參數,它會直接修改原始的CString對象。 下面是一些示例代碼,演示了如何使用MakeUpper函數: CString str "Hello, World!"…

uniapp開發android原生插件

一、下載原生開發SDK Android 離線SDK - 正式版 | uni小程序SDK (dcloud.net.cn)、 https://nativesupport.dcloud.net.cn/AppDocs/download/android.html 將開發uniappa原生android的插件解壓到ben本地目錄,目錄結構如下: 接下就可以使用 UniPlugin-Hel…

【本科組冠名獎】2023年第八屆數維杯數學建模挑戰賽獲獎感言

美國大學生數學建模競賽已結束過半,現在又迎來了2024年第九屆數維杯國賽,準備參加今年數維杯國賽的同學,今天我們一起看看去年優秀的選手都有什么獲獎感言吧~希望能幫到更多熱愛數學建模的同學。據說文末在看點贊的大佬都會直沖國獎呢&#x…

實用Pycharm插件

Pycharm的離線安裝:https://plugins.jetbrains.com/ 需要根據對應的Pycharm/Goland版本選取所需的 對于實用的插件如下: 實時查看每一行的git blame信息: Gittoolbox 轉換IDE的英文為中文:Chinese IDE側格式化json字符串&#…

UE5 C++ TPS開發 學習記錄(八

這一次到了p19 完善了UI和寫了創建房間 MultiPlayerSessionSubsystem.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Subsystems/GameInstanceSubsystem.h" #in…

python基礎-基本數據類型深入-2.2

目錄 集合 集合的定義 集合操作 集合的內建函數 集合與內置函數 集合練習-1 集合練習-2 集合練習-3 集合 集合的定義 學習關于 Python 集的所有內容;如何創建它們、添加或刪除其中的元素,以及在 Python 中對集合執行的所有操作。 Python 中的集…

掌握Go語言:探索Go語言中的變量,靈活性與可讀性的完美結合(4)

想要編寫簡潔高效的Go語言代碼嗎?掌握變量的使用是關鍵!Go語言的變量聲明方式多樣,包括var關鍵字和短變量聲明,同時支持類型推斷,讓代碼更加清晰易讀。 變量聲明方式 在Go語言中,變量的聲明方式有兩種&am…

少兒編程 中國電子學會C++等級考試一級歷年真題答案解析【持續更新 已更新82題】

C 等級考試一級考綱說明 一、能力目標 通過本級考核的學生,能對 C 語言有基本的了解,會使用順序結構、選擇結構、循環結構編寫程序,具體用計算思維的方式解決簡單的問題。 二、考核目標 考核內容是根據軟件開發所需要的技能和知識&#x…

Leetcode 3071. Minimum Operations to Write the Letter Y on a Grid

Leetcode 3071. Minimum Operations to Write the Letter Y on a Grid 1. 解題思路2. 代碼實現 題目鏈接:3071. Minimum Operations to Write the Letter Y on a Grid 1. 解題思路 這一題思路上也是比較直接的,就是首先找到這個Y字符,然后…

單詞規律00

題目鏈接 單詞規律 題目描述 注意點 pattern只包含小寫英文字母s只包含小寫英文字母和 ’ ’s不包含任何前導或尾隨對空格s中每個單詞都被 單個空格 分隔 解答思路 本題與上一次同構字符串類似,思路可以參照同構字符串 代碼 class Solution {public boolean …

工作流/任務卸載相關開源論文分享

decima-sim 概述: 圖神經網絡強化學習處理多工作流 用的spark的仿真環境,mit的論文,價值很高,高被引:663倉庫地址:https://github.com/hongzimao/decima-sim論文:https://web.mit.edu/decima/co…

企業財務規劃的未來:自動化智能化如何推動全面預算管理

隨著自動化和智能化對企業的影響日益明顯,了解和接受那些有可能改變企業財務規劃的技術變得愈發重要。新興技術是推動企業增長和業務生產的中堅力量。作為企業財務專業人員,熟悉技術能夠幫助他們了解企業的未來價值,從而更好的領導團隊。數智…

springboot支持的常用日志框架介紹

日志系統是計算機系統中用于記錄和跟蹤事件、錯誤和信息的軟件組件。在軟件開發和維護過程中,日志系統起著至關重要的作用。它可以幫助開發人員了解軟件的運行情況,快速定位和解決問題。本文將從以下幾個方面介紹日志系統:日志系統概述、Spri…

Mybatis plus拓展功能-枚舉處理器

目錄 1 前言 2 使用方法 2.1 在application.yml中添加配置 2.2 定義枚舉類 2.3 在實體類和賦值時中使用 1 前言 在我們的開發過程中,常常需要用一些數字來表示狀態。比如說:1-正常,0-凍結。然而這樣并不能做到見名知意,特別是…