AI集群全鏈路監控:從GPU微架構指標到業務Metric關聯

點擊AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力80G大顯存按量計費靈活彈性頂級配置學生更享專屬優惠


引言:AI算力時代的監控挑戰

隨著深度學習模型規模的指數級增長,AI訓練集群已成為各大企業和科研機構的核心基礎設施。一個典型的AI集群可能包含數百甚至數千塊GPU,每塊價值數十萬元,如何充分高效地利用這些昂貴計算資源變得至關重要。傳統的系統監控方案往往只關注節點級別的CPU、內存、網絡等基礎指標,無法深入洞察GPU內部的運行狀態,更難以將底層硬件指標與上層業務表現相關聯。

本文將深入探討AI集群全鏈路監控體系的構建,從最底層的GPU微架構指標采集開始,到SM(Streaming Multiprocessor)利用率的深度剖析,最終建立訓練任務的"性能指紋",實現硬件指標與業務Metric的智能關聯分析。通過這套監控體系,運維團隊可以快速定位性能瓶頸,研發人員可以優化訓練代碼,管理者可以做出精準的容量規劃決策。

第一部分:GPU微架構監控基礎

1.1 NVML架構與指標體系

NVIDIA Management Library (NVML) 是監控NVIDIA GPU設備的官方庫,提供了一套完整的編程接口用于獲取設備狀態和性能指標。其架構如下圖所示:

+-----------------------+
|     Application       |
+-----------------------+
|     NVML Library      |
+-----------------------+
|   NVIDIA Driver       |
+-----------------------+
|   GPU Hardware        |
+-----------------------+

1.1.1 NVML核心指標分類

設備狀態指標

  • 溫度、功耗、時鐘頻率
  • ECC錯誤計數
  • PCIe鏈路信息

利用率指標

  • GPU整體利用率
  • 內存控制器利用率
  • PCIe吞吐量

性能計數器

  • SM活動周期計數
  • 各種指令吞吐量
  • 內存訪問模式統計

1.2 NVML數據采集實戰

1.2.1 基礎環境配置

# 安裝NVML開發包
sudo apt-get install cuda-nvml-dev# 驗證驅動版本
nvidia-smi --query-gpu=driver_version --format=csv

1.2.2 基礎指標采集代碼

#include <nvml.h>
#include <stdio.h>
#include <unistd.h>#define CHECK_NVML(call) do { \nvmlReturn_t result = call; \if (result != NVML_SUCCESS) { \fprintf(stderr, "NVML error %d at %s:%d\n", result, __FILE__, __LINE__); \exit(1); \} \
} while(0)int main() {// 初始化NVMLCHECK_NVML(nvmlInit());unsigned int device_count;CHECK_NVML(nvmlDeviceGetCount(&device_count));for (unsigned int i = 0; i < device_count; i++) {nvmlDevice_t device;CHECK_NVML(nvmlDeviceGetHandleByIndex(i, &device));// 獲取設備名稱char name[NVML_DEVICE_NAME_BUFFER_SIZE];CHECK_NVML(nvmlDeviceGetName(device, name, sizeof(name)));// 獲取溫度信息unsigned int temp;CHECK_NVML(nvmlDeviceGetTemperature(device, NVML_TEMPERATURE_GPU, &temp));// 獲取功耗信息unsigned int power;CHECK_NVML(nvmlDeviceGetPowerUsage(device, &power));// 獲取利用率信息nvmlUtilization_t utilization;CHECK_NVML(nvmlDeviceGetUtilizationRates(device, &utilization));printf("Device %d (%s):\n", i, name);printf("  Temperature: %u°C\n", temp);printf("  Power Usage: %uW\n", power / 1000);printf("  GPU Utilization: %u%%\n", utilization.gpu);printf("  Memory Utilization: %u%%\n", utilization.memory);}// 關閉NVMLCHECK_NVML(nvmlShutdown());return 0;
}

1.2.3 高級性能計數器采集
對于深度性能分析,需要訪問更底層的性能計數器:

// 創建性能監控組
nvmlEventSet_t event_set;
CHECK_NVML(nvmlEventSetCreate(&event_set));// 啟用特定事件
CHECK_NVML(nvmlDeviceRegisterEvents(device, NVML_GRSM_CLOCK_GATING_BLOCK_CYCLES_EVENT | NVML_SM_ACTIVE_CYCLES_EVENT, event_set));// 讀取事件數據
nvmlEventData_t event_data;
while (1) {CHECK_NVML(nvmlEventSetWait(event_set, &event_data, 1000));process_event_data(event_data);
}// 清理資源
CHECK_NVML(nvmlEventSetFree(event_set));

第二部分:SM利用率深度剖析

2.1 SM架構與性能模型

NVIDIA GPU中的Streaming Multiprocessor(SM)是實際執行計算的核心單元。每個SM包含:

  • CUDA Cores:執行整數和單精度浮點運算
  • Tensor Cores:執行矩陣運算(Volta架構及以上)
  • 調度器:管理warp調度
  • 寄存器文件:存儲線程狀態
  • 共享內存:線程間通信的高速內存

2.1.1 SM利用率關鍵指標

計算利用率指標

  • SM活躍周期比例
  • 指令發射效率
  • Warp調度效率

內存利用率指標

  • 各級緩存命中率
  • 內存訪問吞吐量
  • DRAM帶寬利用率

特殊功能單元利用率

  • Tensor Core利用率
  • RT Core利用率(對于支持光追的GPU)

2.2 SM利用率采集實戰

2.2.1 使用NVIDIA DCGM進行高級監控
NVIDIA Data Center GPU Manager (DCGM) 提供了更強大的監控能力:

# 安裝DCGM
curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/datacenter-gpu-manager_2.2.9_amd64.deb
sudo dpkg -i datacenter-gpu-manager_2.2.9_amd64.deb# 啟動DCGM
sudo systemctl start nvidia-dcgm

2.2.2 DCGM Python接口示例

import pydcgm
import dcgm_fields
from dcgm_structs import dcgmExceptionClass# 初始化DCGM
dcgm_handle = pydcgm.DcgmHandle(ipAddress="127.0.0.1")
group_manager = dcgm_handle.GetGroupManager()
field_group_manager = dcgm_handle.GetFieldGroupManager()# 創建監控組
group_id = group_manager.CreateGroup("monitoring_group")
group_manager.AddEntityToGroup(group_id, dcgm_fields.DCGM_FE_GPU)# 定義監控字段
field_ids = [dcgm_fields.DCGM_FI_DEV_SM_CLOCK,dcgm_fields.DCGM_FI_DEV_SM_ACTIVITY,dcgm_fields.DCGM_FI_DEV_TENSOR_ACTIVITY,dcgm_fields.DCGM_FI_PROF_GR_ENGINE_ACTIVE,dcgm_fields.DCGM_FI_PROF_SM_ACTIVE,dcgm_fields.DCGM_FI_PROF_SM_OCCUPANCY,dcgm_fields.DCGM_FI_PROF_PIPE_TENSOR_ACTIVE,
]field_group_id = field_group_manager.CreateFieldGroup("sm_fields", field_ids)# 開始監控
dcgm_handle.system.WatchFields(group_id, field_group_id, updateFreq=1000000, maxKeepAge=3600)# 獲取數據
fields = dcgm_handle.fields.GetSinceValues(group_id, field_group_id, sinceTimestamp=0)
for field in fields:print(f"Field {field.fieldId}: {field.value}")

2.3 SM利用率數據分析

2.3.1 計算SM理論性能上限

def calculate_theoretical_performance(gpu_arch, sm_count, clock_rate):"""計算GPU的理論性能上限"""if gpu_arch == "ampere":# Ampere架構: FP32性能 = SM數量 * 時鐘頻率 * 每個SM的FP32核心數 * 2 (FMA)fp32_cores_per_sm = 128theoretical_tflops = sm_count * (clock_rate / 1000) * fp32_cores_per_sm * 2 / 1000return theoretical_tflopselif gpu_arch == "hopper":# Hopper架構計算pass# 其他架構...def analyze_sm_efficiency(actual_tflops, theoretical_tflops):"""分析SM效率"""efficiency = (actual_tflops / theoretical_tflops) * 100return efficiency

2.3.2 識別常見性能模式

def identify_performance_pattern(sm_activity, memory_activity, tensor_activity):"""識別常見的性能瓶頸模式"""# 計算瓶頸if sm_activity > 80 and memory_activity < 30 and tensor_activity < 20:return "COMPUTE_BOUND"# 內存瓶頸elif sm_activity < 50 and memory_activity > 70:return "MEMORY_BOUND"# Tensor Core瓶頸elif sm_activity < 60 and tensor_activity > 75:return "TENSOR_CORE_BOUND"# 均衡狀態elif 60 < sm_activity < 90 and 40 < memory_activity < 70:return "BALANCED"else:return "UNDEFINED"

第三部分:訓練任務性能指紋構建

3.1 性能指紋概念與價值

訓練任務性能指紋是一組能夠唯一標識任務性能特征的多維指標集合。它就像人類的指紋一樣,可以用于:

  1. 性能基線管理:建立正常性能基準,快速發現異常
  2. 瓶頸定位:精確定位性能瓶頸所在層次
  3. 資源調度優化:根據任務特征分配合適的硬件資源
  4. 成本分析:關聯資源消耗與業務價值

3.2 性能指紋指標體系

3.2.1 硬件層指標

hardware_metrics:gpu_utilization: description: "GPU整體利用率"unit: "percent"weight: 0.15sm_efficiency:description: "SM計算效率"unit: "percent" weight: 0.20memory_bandwidth_utilization:description: "內存帶寬利用率"unit: "percent"weight: 0.15tensor_core_utilization:description: "Tensor Core利用率"unit: "percent"weight: 0.10

3.2.2 框架層指標

framework_metrics:iteration_time:description: "單次迭代時間"unit: "milliseconds"weight: 0.20gradient_update_time:description: "梯度更新時間"unit: "milliseconds"weight: 0.10data_loading_time:description: "數據加載時間"unit: "milliseconds"weight: 0.10

3.3 性能指紋采集系統實現

3.3.1 數據采集架構

+----------------+     +----------------+     +----------------+
|   GPU Metrics  |     | Framework      |     | Application    |
|   Collector    |     | Metrics        |     | Metrics        |
|   (NVML/DCGM)  |     | Collector      |     | Collector      |
+----------------+     +----------------+     +----------------+|                      |                      |+----------+-----------+----------+-----------+|                      |+------------------+   +------------------+|   Metrics        |   |   Metadata       ||   Aggregator     |   |   Enricher       |+------------------+   +------------------+|                      |+------------------+   +------------------+|   Performance    |   |   Storage        ||   Fingerprint    |   |   Backend        ||   Generator      |   |   (TSDB)         |+------------------+   +------------------+

3.3.2 指紋生成算法

class PerformanceFingerprint:def __init__(self, config):self.metrics = {}self.weights = config['weights']self.baselines = config['baselines']def add_metric(self, name, value, timestamp):"""添加指標數據"""self.metrics[name] = {'value': value,'timestamp': timestamp,'score': self.calculate_score(name, value)}def calculate_score(self, name, value):"""計算指標得分"""baseline = self.baselines.get(name, {})expected = baseline.get('expected', 0)threshold = baseline.get('threshold', 0)if expected == 0:return 0deviation = abs(value - expected) / expectedscore = max(0, 100 - (deviation * 100))return scoredef generate_fingerprint(self):"""生成性能指紋"""total_score = 0total_weight = 0fingerprint = {'timestamp': time.time(),'metrics': {},'anomalies': []}for name, data in self.metrics.items():weight = self.weights.get(name, 0)score = data['score']total_score += score * weighttotal_weight += weightfingerprint['metrics'][name] = {'value': data['value'],'score': score,'weight': weight}# 檢測異常if score < 60:  # 低于60分視為異常fingerprint['anomalies'].append({'metric': name,'value': data['value'],'score': score,'severity': 'high' if score < 30 else 'medium'})fingerprint['overall_score'] = total_score / total_weight if total_weight > 0 else 0return fingerprint

3.3.3 實時監控與告警

class PerformanceMonitor:def __init__(self, fingerprint_config, alert_rules):self.fingerprint_generator = PerformanceFingerprint(fingerprint_config)self.alert_rules = alert_rulesself.history = deque(maxlen=1000)def process_metrics(self, metrics_batch):"""處理指標批量數據"""for metric in metrics_batch:self.fingerprint_generator.add_metric(metric['name'], metric['value'], metric['timestamp'])fingerprint = self.fingerprint_generator.generate_fingerprint()self.history.append(fingerprint)# 檢查告警alerts = self.check_alerts(fingerprint)if alerts:self.send_alerts(alerts)return fingerprintdef check_alerts(self, fingerprint):"""檢查告警條件"""alerts = []# 檢查總體分數告警if fingerprint['overall_score'] < self.alert_rules['overall_score_threshold']:alerts.append({'type': 'OVERALL_PERFORMANCE_DEGRADATION','severity': 'critical','score': fingerprint['overall_score'],'timestamp': fingerprint['timestamp']})# 檢查單項指標告警for anomaly in fingerprint['anomalies']:if anomaly['severity'] == 'high':alerts.append({'type': 'METRIC_ANOMALY','metric': anomaly['metric'],'value': anomaly['value'],'severity': 'high','timestamp': fingerprint['timestamp']})return alertsdef send_alerts(self, alerts):"""發送告警通知"""for alert in alerts:# 集成到現有的告警系統print(f"ALERT: {alert}")# 實際環境中可以發送郵件、短信、釘釘等通知

第四部分:全鏈路監控系統集成

4.1 系統架構設計

4.1.1 數據流架構

+-------------+    +-------------+    +-------------+
|   GPU節點   |    |  訓練框架   |    |  業務應用   |
|  指標采集   |    |  指標采集   |    |  指標采集   |
+-------------+    +-------------+    +-------------+|                |                |+--------+-------+-------+--------+|               |+-------------------------------+|          指標聚合層            ||   (Fluentd/Logstash/Vector)   |+-------------------------------+|               |+-------------------------------+|          流處理層              ||     (Flink/Spark Streaming)   |+-------------------------------+|               |+-------------------------------+|          存儲層                ||   (Prometheus/InfluxDB/TDengine) |+-------------------------------+|               |+-------------------------------+|          分析層                ||   (性能指紋/關聯分析/告警)    |+-------------------------------+|               |+-------------------------------+|          可視化層              ||   (Grafana/Kibana)           |+-------------------------------+

4.1.2 關鍵技術選型
數據采集

  • GPU指標:DCGM、NVML、Prometheus DCGM Exporter
  • 框架指標:PyTorch Profiler、TensorFlow Profiler
  • 業務指標:自定義指標SDK

數據存儲

  • 時序數據:TDengine、InfluxDB
  • 日志數據:Elasticsearch
  • 性能指紋:Redis、PostgreSQL

流處理

  • 實時分析:Flink、Spark Streaming
  • 復雜事件處理:Apache Flink CEP

4.2 關鍵集成代碼示例

4.2.1 Prometheus DCGM Exporter配置

# dcgm-exporter-config.yaml
metrics:- name: "dcgm_sm_activity"field: "DCGM_FI_PROF_SM_ACTIVE"type: "gauge"- name: "dcgm_memory_activity" field: "DCGM_FI_PROF_DRAM_ACTIVE"type: "gauge"- name: "dcgm_tensor_activity"field: "DCGM_FI_PROF_PIPE_TENSOR_ACTIVE"type: "gauge"- name: "dcgm_fp64_activity"field: "DCGM_FI_PROF_PIPE_FP64_ACTIVE"type: "gauge"- name: "dcgm_fp32_activity"field: "DCGM_FI_PROF_PIPE_FP32_ACTIVE"type: "gauge"- name: "dcgm_fp16_activity"field: "DCGM_FI_PROF_PIPE_FP16_ACTIVE"type: "gauge"

4.2.2 基于Flink的實時處理

public class GPUmetricsProcessor extends ProcessFunction<MetricEvent, PerformanceFingerprint> {private transient PerformanceFingerprint fingerprint;@Overridepublic void open(Configuration parameters) {// 初始化性能指紋生成器fingerprint = new PerformanceFingerprint(loadConfig());}@Overridepublic void processElement(MetricEvent event, Context ctx, Collector<PerformanceFingerprint> out) {// 處理單個指標事件fingerprint.addMetric(event.getName(), event.getValue(), event.getTimestamp());// 每分鐘生成一次性能指紋if (shouldGenerateFingerprint()) {PerformanceFingerprint newFingerprint = fingerprint.generateFingerprint();out.collect(newFingerprint);fingerprint.reset();}}@Overridepublic void onTimer(long timestamp, OnTimerContext ctx, Collector<PerformanceFingerprint> out) {// 定時生成性能指紋(防止數據稀疏)PerformanceFingerprint newFingerprint = fingerprint.generateFingerprint();out.collect(newFingerprint);fingerprint.reset();}
}

4.2.3 Grafana監控儀表板

{"dashboard": {"title": "AI集群全鏈路監控","panels": [{"title": "GPU利用率概覽","type": "stat","targets": [{"expr": "avg(dcgm_gpu_utilization) by (host, gpu_id)","legendFormat": "{{host}}-GPU{{gpu_id}}"}]},{"title": "SM效率分析","type": "heatmap","targets": [{"expr": "dcgm_sm_efficiency","legendFormat": "SM效率"}]},{"title": "性能指紋得分","type": "timeseries","targets": [{"expr": "performance_fingerprint_score{job='training-job'}","legendFormat": "總體得分"}]}]}
}

第五部分:實戰案例與最佳實踐

5.1 典型性能問題診斷

5.1.1 內存帶寬瓶頸診斷
癥狀

  • GPU利用率高但SM效率低
  • 內存控制器利用率持續高位
  • 訓練迭代時間波動大

診斷步驟

  • 檢查dcgm_dram_activity指標
  • 分析內存訪問模式
  • 驗證batch size是否過大

解決方案

  • 使用梯度累積減少內存壓力
  • 優化數據布局提高緩存命中率
  • 調整模型結構減少內存訪問

5.1.2 Tensor Core未充分利用
癥狀

  • SM效率高但Tensor Core利用率低
  • FP16/FP32計算比例失衡
  • 模型無法達到理論性能

診斷步驟

  1. 檢查dcgm_tensor_activity指標
  2. 驗證模型操作是否支持Tensor Core
  3. 分析數據類型使用情況

解決方案

  • 確保使用適合Tensor Core的數據類型(FP16/BF16)
  • 調整模型層大小滿足Tensor Core要求(矩陣維度為8的倍數)
  • 使用混合精度訓練

5.2 性能優化最佳實踐

5.2.1 監控配置優化

# 優化的采集配置
collection_intervals:high_frequency_metrics: 100ms    # 關鍵性能指標medium_frequency_metrics: 1s     # 一般性能指標  low_frequency_metrics: 10s       # 狀態指標metric_groups:essential: ["sm_activity", "memory_activity", "tensor_activity"]detailed: ["fp64_activity", "fp32_activity", "fp16_activity"]diagnostic: ["pcie_traffic", "nvlink_traffic"]

5.2.2 告警策略配置

alerting_rules:- alert: "SM效率低下"expr: "dcgm_sm_efficiency < 60"for: "5m"labels:severity: "warning"annotations:summary: "SM效率低于閾值"description: "GPU {{$labels.gpu_id}} SM效率為 {{$value}}%"- alert: "內存帶寬瓶頸"expr: "dcgm_dram_activity > 85"for: "2m"labels:severity: "critical"annotations:summary: "內存帶寬使用率過高"description: "GPU {{$labels.gpu_id}} 內存帶寬使用率為 {{$value}}%"- alert: "性能指紋異常"expr: "performance_fingerprint_score < 70"for: "3m"labels:severity: "warning"annotations:summary: "任務性能異常"description: "任務 {{$labels.job_id}} 性能得分為 {{$value}}"

5.3 容量規劃與成本優化

5.3.1 資源利用率分析

def analyze_cluster_utilization(metrics_data, time_range):"""分析集群資源利用率"""utilization_stats = {}for gpu in metrics_data['gpus']:gpu_id = gpu['id']utilization_stats[gpu_id] = {'avg_utilization': calculate_average(gpu['utilization'], time_range),'peak_utilization': calculate_peak(gpu['utilization'], time_range),'idle_time': calculate_idle_time(gpu['utilization'], time_range),'cost_efficiency': calculate_cost_efficiency(gpu)}return utilization_statsdef generate_capacity_report(utilization_stats):"""生成容量規劃報告"""report = {'underutilized_gpus': [],'overutilized_gpus': [],'recommendations': []}for gpu_id, stats in utilization_stats.items():if stats['avg_utilization'] < 30:report['underutilized_gpus'].append({'gpu_id': gpu_id,'utilization': stats['avg_utilization'],'suggestion': '考慮合并工作負載或降配'})elif stats['avg_utilization'] > 85:report['overutilized_gpus'].append({'gpu_id': gpu_id, 'utilization': stats['avg_utilization'],'suggestion': '需要擴容或優化工作負載'})return report

結論

構建AI集群全鏈路監控體系是一個系統工程,需要從GPU微架構指標采集開始,逐步構建SM利用率分析能力,最終形成訓練任務的性能指紋。這套體系不僅能夠幫助運維團隊實時掌握集群狀態,更能為研發人員提供深度的性能洞察,為管理者提供數據驅動的決策支持。

關鍵成功因素包括:

  1. 多層次指標采集:覆蓋硬件、框架、業務各個層面
  2. 實時處理能力:及時發現和響應性能問題
  3. 智能關聯分析:將底層指標與業務表現相關聯
  4. 可行動洞察:提供具體的優化建議而不僅僅是告警

隨著AI模型復雜度的不斷提升和計算資源的持續昂貴,全鏈路監控將從不錯的選擇變為必備的基礎設施。通過本文介紹的方法論和實踐經驗,您應該能夠構建起適合自己業務場景的AI集群監控體系,充分發揮昂貴計算資源的潛力,加速AI研發和創新進程。


點擊AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力80G大顯存按量計費靈活彈性頂級配置學生更享專屬優惠

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

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

相關文章

K8s Ingress Annotations參數使用指南

Kubernetes Ingress Annotations 是與特定 Ingress 控制器&#xff08;如 Nginx、Traefik、HAProxy 等&#xff09;配合使用&#xff0c;用于擴展和定制 Ingress 資源行為的關鍵配置項。它們通常以鍵值對的形式添加在 Ingress 資源的 metadata部分。Ingress Annotations參數速查…

CodeBuddy Code深度實戰:從零構建智能電商推薦系統的完整開發歷程

項目背景與挑戰作為一名有著多年全棧開發經驗的技術人員&#xff0c;我最近接手了一個具有挑戰性的項目&#xff1a;為某中型服裝電商平臺開發一套智能商品推薦系統。該系統需要在2個月內完成&#xff0c;包含以下核心功能&#xff1a;前端&#xff1a;React TypeScript構建的…

Day 19: 算法基礎與面試理論精通 - 從思想理解到策略掌握的完整體系

Day 19: 算法基礎與面試理論精通 - 從思想理解到策略掌握的完整體系 ?? 課程概述 核心目標:深度理解算法設計思想和核心原理,掌握面試高頻算法概念,建立完整的算法知識體系 學習重點: ? 核心數據結構的本質理解和應用場景分析 ? 經典算法設計模式的思想精髓和解題策…

AI與AR融合:重塑石化與能源巡檢的未來

在石化企業和新能源電站的巡檢工作中&#xff0c;傳統模式正被一場技術革命所顛覆。AI與AR&#xff08; www.teamhelper.cn &#xff09;的深度融合&#xff0c;不僅提升了巡檢效率&#xff0c;更將巡檢工作從被動響應轉變為預測預防&#xff0c;開啟了智能運維的新篇章。一、透…

滴滴二面(準備二)

手寫防抖函數并清晰闡述其價值&#xff0c;確實是前端面試的常見考點。下面我將為你直接呈現防抖函數的代碼&#xff0c;并重點結合滴滴的業務場景進行解釋&#xff0c;幫助你向面試官展示思考深度。 這是防抖函數的一個基本實現&#xff0c;附帶注釋以便理解&#xff1a; func…

Kubernetes(四):Service

目錄 一、定義Service 1.1 typeClusterIP 1.2 typeNodePort 1.3 typeLoadBalancer 1.4 typeExternalName 1.5 無標簽選擇器的Service 1.6 Headless Service 二、Kubernetes的服務發現 2.1 環境變量方式 2.2 DNS方式 Kubernetes 中 Service 是 將運行在一個或一組 Pod 上的應用…

在 Python 中實現觀察者模式的具體步驟是什么?

在 Python 中實現觀察者模式可以遵循以下具體步驟&#xff0c;這些步驟清晰地劃分了角色和交互流程&#xff1a; 步驟 1&#xff1a;定義主題&#xff08;Subject&#xff09;基類 主題是被觀察的對象&#xff0c;負責管理觀察者和發送通知。需實現以下核心方法&#xff1a; 存…

分布式方案 一 分布式鎖的四大實現方式

Java分布式鎖實現方式詳解 什么是分布式鎖 基于數據庫的分布式鎖基于Redis的分布式鎖基于ZooKeeper的分布式鎖基于Etcd的分布式鎖 各種實現方式對比最佳實踐建議多節點/線程調用結果展示 基于數據庫的分布式鎖 - 多線程測試基于Redis的分布式鎖 - 多節點測試基于ZooKeeper的分…

基于Room+RESTful的雙權限Android開機時間監控方案

概述 以下是使用Kotlin實現的商業級Android開機時間記錄功能&#xff0c;包含現代Android開發最佳實踐。 系統架構 組件設計 // BootReceiver - 接收開機廣播 class BootReceiver : BroadcastReceiver() {override fun onReceive(context: Context, intent: Intent?) {if (int…

水庫大壩安全監測系統的作用

水庫大壩作為重要的水利基礎設施&#xff0c;承擔著防洪、供水、發電、灌溉等多重功能&#xff0c;其安全性直接關系到人民生命財產安全和社會經濟發展。然而&#xff0c;由于自然環境變化、材料老化、荷載作用以及人為因素的影響&#xff0c;大壩在長期運行過程中可能出現裂縫…

《Kubernetes 構建 MySQL MGR 集群實戰教程》

#### 一、前言 MySQL Group Replication (MGR) 是 MySQL 官方提供的高可用集群方案&#xff0c;基于 Paxos 協議實現多節點數據強一致性。本教程將指導如何在 Kubernetes 上部署 MySQL MGR 集群&#xff0c;適用于生產級高可用場景。---#### 二、環境準備 1. **Kubernetes 集…

影視APP源碼 SK影視 安卓+蘋果雙端APP 反編譯詳細視頻教程+源碼

內容目錄一、詳細介紹二、效果展示1.部分代碼2.效果圖展示三、學習資料下載一、詳細介紹 影視APP源碼 SK影視 安卓蘋果雙端APP 反編譯詳細視頻教程源碼 自帶對接優效SDK廣告&#xff08;已失效&#xff09;。域名和IP都可以搭建。 自帶一起看和短劇頁面功能&#xff0c;三種…

pyqt+python之二進制生肖占卜

目錄 一、引言 二、GUI界面設計 1.效果演示 2.相關提示 3.界面設計.py 三、主要程序詳解 1.導入相關模塊 2.初始化設置 3.組內判斷 4.猜測過程 四、總程序代碼 一、引言 在數字時代&#xff0c;傳統文化與編程語言的碰撞總能迸發奇妙火花。本項目以PyQtPython為技術…

人工智能-python-深度學習-經典網絡模型-LeNets5

文章目錄LeNet-5&#xff08;詳解&#xff09;—— 從原理到 PyTorch 實現&#xff08;含訓練示例&#xff09;簡介LeNet-5 的核心思想LeNet-5 逐層結構詳解逐層計算舉例&#x1f4cc; 輸入層&#x1f4cc; C1 卷積層&#x1f4cc; S2 池化層&#x1f4cc; C3 卷積層&#x1f4…

機器視覺的手機柔性屏貼合應用

在智能手機制造領域&#xff0c;柔性屏逐漸成為智能手機的主流選擇&#xff0c;柔性屏因其輕便、易于彎曲的特性&#xff0c;已成為現代電子設備的重要組成部分&#xff0c;但同時也帶來了前所未有的制造挑戰。柔性屏與傳統剛性玻璃屏有本質區別&#xff0c;它容易形變&#xf…

貪心算法應用:數字孿生同步問題詳解

Java中的貪心算法應用&#xff1a;數字孿生同步問題詳解 貪心算法是一種在每一步選擇中都采取在當前狀態下最好或最優&#xff08;即最有利&#xff09;的選擇&#xff0c;從而希望導致結果是全局最好或最優的算法。下面我將全面詳細地講解貪心算法在數字孿生同步問題中的應用。…

UOS20系統安裝與 SSH/XRDP 遠程訪問功能配置指南

UOS20系統安裝與 SSH/XRDP 遠程訪問功能配置指南 一、UOS 20 系統安裝? ?1. 下載系統鏡像? 訪問統信官網下載 UOS 20 專業版鏡像&#xff08;推薦適配當前硬件的版本&#xff09;&#xff1a; https://www.chinauos.com/resource/download-professional 2. 系統安裝與硬件配…

【Python】S1 基礎篇 P5 字典模塊指南

目錄字典的本質與底層實現基礎語法結構使用字典訪問字典中的值添加鍵值對修改字典中的值刪除鍵值對使用 get() 來訪問值遍歷字典遍歷所有鍵值對遍歷字典中的所有鍵遍歷字典中的所有值嵌套字典列表在字典中存儲列表字典&#xff08;Dictionary&#xff09;是Python中靈活且強大的…

計算機視覺之多模板匹配

簡介 計算機視覺第一課opencv&#xff08;四&#xff09;保姆級教學 之前說過模糊匹配只是對于單個目標進行匹配&#xff0c;今天我們就來學習一下如何對多個目標進行匹配 一、多目標匹配 對于這個圖片我們要匹配下面那個箭頭&#xff0c;我們可以發現圖中是有兩個位置相同的…

封裝日期選擇器組件,帶有上周,下周按鈕

ui圖組件代碼如下&#xff1a; <template><div><el-date-pickerv-model"dateRange"type"daterange"align"right"size"mini":editable"false"unlink-panelsrange-separator"至"start-placeholder&q…