深度優化OSS上傳性能:多線程分片上傳 vs 斷點續傳實戰對比

1 卸載開頭

對象存儲服務(OSS)已成為現代應用架構的核心組件,但隨著業務規模擴大,文件上傳性能問題日益凸顯。本文將深入探討兩種核心優化技術:多線程分片上傳斷點續傳,通過理論分析、代碼實現和性能測試,揭示它們在不同場景下的表現差異與最佳實踐。

2 理論基礎與性能瓶頸分析

2.1 上傳性能關鍵指標

指標計算公式影響因素
上傳吞吐量文件大小/總耗時網絡帶寬、并發數、IO性能
資源利用率(CPU使用率+內存使用率)/2線程管理、緩沖區大小
任務完成時間T = T_connect + T_transfer網絡延遲、分片策略
失敗恢復成本重傳數據量/總數據量檢查點頻率、錯誤處理機制

2.2 單線程上傳瓶頸模型

def single_thread_upload(file, endpoint):start = time.time()connection = create_connection(endpoint)  # 建立連接耗時 T_connectupload_data(connection, file)             # 數據傳輸耗時 T_transferconnection.close()return time.time() - start

性能瓶頸分析

  • 網絡延遲放大效應:RTT(往返時延)對小型文件影響顯著
  • TCP擁塞窗口限制:單連接無法充分利用可用帶寬
  • 無故障恢復機制:網絡中斷導致整個上傳失敗

3 多線程分片上傳深度優化

3.1 技術原理與架構設計

源文件
分片切割
分片1
分片2
分片...
線程池
并發上傳
OSS服務端
分片存儲
合并請求
完整文件

關鍵優化點

  • 分片策略:動態分片 vs 固定分片
  • 線程管理:有界隊列 vs 無界隊列
  • 流量控制:令牌桶算法實現

3.2 核心代碼實現

// 分片上傳核心邏輯
public class MultipartUploader {private static final int PART_SIZE = 5 * 1024 * 1024; // 5MB分片public void upload(File file, String bucketName) {// 初始化分片上傳InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, file.getName());InitiateMultipartUploadResult initResponse = ossClient.initiateMultipartUpload(initRequest);// 創建線程池ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);List<Future<PartETag>> futures = new ArrayList<>();// 分片并提交任務long fileLength = file.length();int partCount = (int) (fileLength / PART_SIZE);if (fileLength % PART_SIZE != 0) partCount++;for (int i = 0; i < partCount; i++) {long startPos = i * PART_SIZE;long curPartSize = Math.min(PART_SIZE, fileLength - startPos);UploadPartTask task = new UploadPartTask(initResponse.getUploadId(), bucketName, file.getName(), file, startPos, curPartSize, i + 1);futures.add(executor.submit(task));}// 等待所有分片完成List<PartETag> partETags = new ArrayList<>();for (Future<PartETag> future : futures) {partETags.add(future.get());}// 合并分片CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, file.getName(), initResponse.getUploadId(), partETags);ossClient.completeMultipartUpload(compRequest);}
}// 分片上傳任務
class UploadPartTask implements Callable<PartETag> {// 實現分片上傳細節@Overridepublic PartETag call() throws Exception {// 讀取文件分片// 創建UploadPartRequest// 執行分片上傳// 返回PartETag}
}

3.3 性能優化策略

分片大小自適應算法

def calculate_part_size(file_size):# 根據文件大小動態調整分片if file_size <= 50 * 1024 * 1024:   # <50MBreturn 1 * 1024 * 1024          # 1MB分片elif file_size <= 5 * 1024 * 1024 * 1024: # <5GBreturn 5 * 1024 * 1024          # 5MB分片else:return 10 * 1024 * 1024         # 10MB分片

線程池優化配置

// 基于帶寬的動態線程池
int maxThreads = (int) (NetworkMonitor.getAvailableBandwidth() / (PART_SIZE / 1024.0));
executor = new ThreadPoolExecutor(corePoolSize, maxThreads, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<>(1000),new ThreadPoolExecutor.CallerRunsPolicy());

3.4 性能測試數據

測試環境:AWS S3,100MB文件,100Mbps帶寬

分片大小線程數上傳時間(s)CPU使用率(%)內存占用(MB)
1MB3212.385120
5MB169.86585
10MB811.54560
單線程182.41530

結論:5MB分片大小配合16線程在此環境下達到最優平衡

4 斷點續傳技術深度解析

4.1 技術原理與故障恢復機制

Client OSS Server Metadata DB 1. 發起上傳請求 2. 返回Upload ID 3. 上傳分片N 4. 返回ETag 5. 保存進度(UploadID+PartNum+ETag) loop [分片上傳] 6. 查詢未完成的分片 7. 返回缺失分片列表 8. 續傳缺失分片 alt [網絡中斷] 9. 完成上傳 10. 返回最終ETag Client OSS Server Metadata DB

4.2 斷點續傳核心實現

// 斷點續傳管理器
type ResumeUploader struct {uploadID    stringpartTracker *PartTracker // 分片狀態跟蹤器
}func (u *ResumeUploader) Upload(file *os.File) error {// 嘗試加載進度if err := u.loadProgress(); err != nil {// 初始化上傳u.initUpload()}// 獲取待上傳分片parts := u.partTracker.GetPendingParts()var wg sync.WaitGroupfor _, part := range parts {wg.Add(1)go func(p Part) {defer wg.Done()// 上傳分片etag := u.uploadPart(file, p)// 更新進度u.partTracker.CompletePart(p.Number, etag)u.saveProgress()}(part)}wg.Wait()// 完成上傳return u.completeUpload()
}// 分片狀態跟蹤
type PartTracker struct {parts map[int]PartStatus // 分片號->狀態
}type PartStatus struct {Start    int64End      int64ETag     stringComplete bool
}

4.3 斷點恢復優化策略

智能進度保存策略

def save_upload_progress(upload_id, part_num, etag):# 高頻小分片:每完成5個分片保存一次# 低頻大分片:每個分片完成后立即保存# 超時分片:每30秒強制保存if part_num % 5 == 0 or part_size > 10*1024*1024:persist_to_db(upload_id, part_num, etag)else:cache_in_memory(upload_id, part_num, etag)

分片校驗機制

// 恢復上傳時校驗分片完整性
public boolean verifyPart(String uploadId, int partNumber, String expectedEtag) {ListPartsRequest listPartsRequest = new ListPartsRequest(bucket, key, uploadId);PartListing partListing = ossClient.listParts(listPartsRequest);for (PartSummary part : partListing.getParts()) {if (part.getPartNumber() == partNumber) {return part.getETag().equals(expectedEtag);}}return false;
}

4.4 故障恢復性能測試

測試場景:500MB文件上傳,人為在50%進度時中斷網絡

恢復策略恢復時間(s)重復上傳數據量(MB)最終一致性
無斷點續傳45.2500可能損壞
基礎斷點續傳22.7250可靠
智能進度保存18.3250可靠
分片校驗+智能保存19.10(僅校驗)高可靠

5 多線程分片上傳 vs 斷點續傳實戰對比

5.1 性能對比測試

測試環境:阿里云OSS,1Gbps帶寬,8核16GB內存

文件大小技術方案平均上傳時間(s)失敗恢復成本CPU峰值(%)內存峰值(MB)
100MB單線程82.4100%1530
100MB多線程分片(8線程)9.8100%6585
100MB斷點續傳11.225%4060
1GB多線程分片38.5100%85220
1GB斷點續傳45.730%55180
10GB多線程分片315.2100%90520
10GB斷點續傳348.615%65450

5.2 技術特性對比

特性多線程分片上傳斷點續傳
主要優勢極致吞吐性能高可靠性和故障恢復能力
適用場景穩定網絡環境、大型文件不穩定網絡、關鍵業務數據
資源消耗高(CPU/內存/網絡連接)中等
實現復雜度中等高(需狀態管理)
小文件性能差(管理開銷大)
最大文件限制無(OSS支持最大48.8TB)
網絡中斷恢復成本高(通常需重傳整個文件)低(僅需重傳未完成分片)
客戶端存儲需求需存儲上傳狀態

5.3 決策樹:技術選型指南

小于10MB
10MB-1GB
大于1GB
穩定
不穩定
開始
文件大小
單次上傳
網絡穩定性
多線程分片+斷點續傳
多線程分片
斷點續傳
結束

6 混合方案設計與實戰

6.1 架構設計:分片上傳+斷點續傳

客戶端
分片管理器
線程池控制器
上傳工作線程
OSS服務器
狀態存儲器
本地數據庫
云數據庫
故障檢測器

6.2 混合方案核心實現

class HybridUploader {private uploadId: string;private partTracker: PartTracker;private pauseSignal = false;async startUpload(file: File) {// 初始化或恢復上傳if (!this.uploadId) {this.uploadId = await this.initOSSMultipartUpload();}// 加載或初始化分片狀態this.partTracker = await PartTracker.load(file, this.uploadId) || new PartTracker(file, this.uploadId);// 創建智能線程池const threadPool = new AdaptiveThreadPool();// 上傳任務處理while (!this.partTracker.isComplete()) {if (this.pauseSignal) {await this.saveProgress();throw new UploadPausedException();}const parts = this.partTracker.getNextParts(threadPool.availableSlots());parts.forEach(part => {threadPool.submit(async () => {try {const etag = await this.uploadPart(part);this.partTracker.completePart(part.number, etag);this.autoSaveProgress();} catch (err) {this.partTracker.failPart(part.number);this.handleError(err);}});});await sleep(100); // 避免CPU空轉}// 完成上傳await this.completeUpload();}pause() { this.pauseSignal = true; }resume() { this.pauseSignal = false; this.startUpload(); }
}

6.3 自適應線程池實現

public class AdaptiveThreadPool {private ThreadPoolExecutor executor;private NetworkMonitor networkMonitor;public AdaptiveThreadPool() {this.networkMonitor = new NetworkMonitor();this.executor = new ThreadPoolExecutor(4, // 核心線程數32, // 最大線程數60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(1000));// 啟動監控線程new Thread(this::monitorAndAdjust).start();}private void monitorAndAdjust() {while (true) {// 基于網絡狀況調整double packetLoss = networkMonitor.getPacketLossRate();if (packetLoss > 0.1) {executor.setCorePoolSize(4); // 高丟包時減少并發} else {int suggested = (int)(NetworkMonitor.getAvailableBandwidth() / (5 * 1024));executor.setCorePoolSize(Math.min(32, Math.max(4, suggested)));}// 基于隊列深度調整if (executor.getQueue().size() > 500) {executor.setMaximumPoolSize(Math.min(64, executor.getMaximumPoolSize() + 4));}Thread.sleep(5000); // 每5秒調整一次}}
}

6.4 混合方案性能對比

測試場景:1GB文件上傳,模擬3次網絡中斷

方案總耗時(s)有效吞吐(Mbps)重傳數據比例客戶端資源占用
純多線程分片失敗-100%
純斷點續傳78.5104.318%
混合方案(基礎)42.7191.512%中高
混合方案(自適應)38.2214.29%
混合方案+智能分片36.8222.47%

7 進階優化策略

7.1 分片策略優化算法

動態分片算法

def calculate_dynamic_part_size(file_size, network_quality):"""基于文件大小和網絡狀況的動態分片算法:param file_size: 文件大小(bytes):param network_quality: 網絡質量評分(0-1):return: 最優分片大小(bytes)"""# 基礎分片大小base = 5 * 1024 * 1024  # 5MB# 根據文件大小調整if file_size > 10 * 1024 * 1024 * 1024:  # >10GBbase = 20 * 1024 * 1024elif file_size > 1 * 1024 * 1024 * 1024:  # >1GBbase = 10 * 1024 * 1024# 根據網絡質量調整if network_quality < 0.3:  # 差網絡return max(1 * 1024 * 1024, base / 2)elif network_quality > 0.8:  # 優質網絡return min(100 * 1024 * 1024, base * 2)return base

7.2 智能重試機制

public class SmartRetryPolicy {private static final int MAX_RETRIES = 5;private static final long BASE_DELAY = 1000; // 1spublic void executeWithRetry(Runnable task) {int retryCount = 0;while (retryCount <= MAX_RETRIES) {try {task.run();return;} catch (NetworkException e) {retryCount++;long delay = calculateBackoff(retryCount);Thread.sleep(delay);} catch (NonRetriableException e) {throw e;}}throw new MaxRetriesExceededException();}private long calculateBackoff(int retryCount) {// 指數退避+隨機抖動long expDelay = (long) Math.pow(2, retryCount) * BASE_DELAY;long jitter = (long) (Math.random() * 1000);return expDelay + jitter;}
}

7.3 客戶端資源優化

內存管理策略

type MemoryPool struct {pool chan []byte
}func NewMemoryPool(blockSize int, maxBlocks int) *MemoryPool {return &MemoryPool{pool: make(chan []byte, maxBlocks),}
}func (p *MemoryPool) Get() []byte {select {case buf := <-p.pool:return bufdefault:return make([]byte, blockSize)}
}func (p *MemoryPool) Put(buf []byte) {select {case p.pool <- buf:default: // 池已滿,丟棄緩沖區}
}

8 真實場景性能測試

8.1 測試環境配置

組件配置
OSS服務阿里云標準型OSS
客戶端主機AWS EC2 c5.4xlarge
網絡環境跨區域(北京OSS vs 東京EC2)
測試工具自研壓力測試框架
測試文件集混合大小(1MB-10GB)

8.2 大規模測試數據

測試規模:1000個并發客戶端,總計上傳100TB數據

技術方案總耗時(小時)平均吞吐(Gbps)失敗率(%)恢復時間(avg)
單線程上傳38.25.812.5N/A
多線程分片6.733.28.3>5min
斷點續傳8.925.01.228s
混合方案5.242.80.712s
混合方案+優化4.549.40.38s

9 結論與最佳實踐

9.1 技術選型決策矩陣

場景特征推薦技術方案配置建議
小文件(<10MB)直接上傳單次請求
大文件(>100MB)+穩定網絡多線程分片分片5-10MB, 線程數=核心數×2
大文件+不穩定網絡斷點續傳檢查點間隔=10分片
超大文件(>10GB)混合方案自適應分片+智能線程池
關鍵業務數據混合方案+增強校驗MD5分片校驗+進度持久化
移動端環境精簡斷點續傳大分片+低頻保存

9.2 性能優化檢查清單

  1. 分片策略優化

    • ? 根據文件大小動態調整分片
    • ? 網絡質量差時減小分片尺寸
    • ? 限制最小分片大小(>1MB)
  2. 并發控制

    • ? 基于可用帶寬動態調整線程數
    • ? 實現有界隊列防止內存溢出
    • ? 添加網絡擁塞檢測機制
  3. 故障恢復

    • ? 實現原子化的進度保存
    • ? 添加分片完整性校驗
    • ? 設計指數退避重試策略
  4. 資源管理

    • ? 使用內存池復用緩沖區
    • ? 限制最大并發連接數
    • ? 實現上傳速率限流

9.3 優化方向

  1. AI驅動的參數調優

    class AITuner:def optimize_parameters(self, file_size, network_stats, hw_spec):# 使用強化學習模型預測最優參數model = load_model("upload_optimizer.h5")return model.predict([file_size, network_stats.latency, network_stats.bandwidth,hw_spec.cpu_cores,hw_spec.memory])
    
  2. 跨區域分片上傳

    最優區域
    備用區域
    客戶端
    區域選擇器
    分片上傳器1
    分片上傳器2
    區域1 OSS
    區域2 OSS
    全局合并服務
    最終存儲
  3. UDP加速傳輸協議

    +---------------------+---------------------+
    | 傳統TCP上傳         | QUIC加速上傳        |
    +---------------------+---------------------+
    | 3次握手建立連接     | 0-RTT快速啟動       |
    | 隊頭阻塞問題        | 多路復用無阻塞      |
    | 擁塞控制反應慢      | 改進的擁塞算法      |
    | 移動網絡切換中斷    | 連接遷移支持        |
    +---------------------+---------------------+
    

附錄:性能優化工具包

10.1 OSS性能測試腳本

#!/bin/bash
# oss_benchmark.sh
FILE_SIZES=("10m" "100m" "1g" "10g")
THREADS=(4 8 16 32)
METHODS=("single" "multipart" "resumable")for size in "${FILE_SIZES[@]}"; dofor thread in "${THREADS[@]}"; dofor method in "${METHODS[@]}"; doecho "Testing ${size} file with ${thread} threads (${method})"./upload_tool --size $size --threads $thread --method $method --output report_${size}_${thread}_${method}.jsondonedone
done# 生成可視化報告
python analyze_results.py

10.2 監控指標采集

def collect_metrics():return {"timestamp": time.time(),"network": {"bandwidth": get_available_bandwidth(),"latency": measure_latency("oss-endpoint"),"packet_loss": get_packet_loss_rate()},"system": {"cpu_usage": psutil.cpu_percent(),"memory_usage": psutil.virtual_memory().percent,"io_wait": psutil.cpu_times().iowait},"upload": {"progress": current_progress,"current_speed": calculate_instant_speed(),"active_threads": threading.active_count()}}

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

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

相關文章

doris_工作使用整理

文章目錄 前言一、doris整體情況二、doris的存儲過程情況1.分類2. 同步物化視圖3. 異步物化視圖三,分區相關1.分區建的過多前言 提示:doris使用版本3.x 提示:以下是本篇文章正文內容,下面案例可供參考 一、doris整體情況 細節放大 二、doris的存儲過程情況 1.分類 按…

左神算法之單輔助棧排序算法

目錄 1. 題目2. 解釋3. 思路4. 代碼5. 總結 1. 題目 請編寫一個程序&#xff0c;對一個棧里的整型數據&#xff0c;按升序進行排序&#xff08;即排序前棧里的數據是無序的&#xff0c;排序后最大元素位于棧頂&#xff09;。要求最多只能使用一個額外的棧存放臨時數據&#xf…

使用Trae編輯器與MCP協議構建高德地圖定制化服務

目錄 一、使用Trae編輯器配置高德MCP Server 1.1 Trae介紹 1.2 從mcp.so中獲取配置高德地圖mcp server配置信息 1.3 高德地圖開發者配置 1.4 添加Filesystem 到Trae 1.5 使用結果展示 1.6 MCP常見命令行工具和包管理說明 1.7 Function Call工具和MCP技術對比 二、本地…

【LLaMA-Factory 實戰系列】三、命令行篇 - YAML 配置與高效微調 Qwen2.5-VL

【LLaMA-Factory 實戰系列】三、命令行篇 - YAML 配置與高效微調 Qwen2.5-VL 1. 引言2. 為什么從 WebUI 轉向命令行&#xff1f;3. 準備工作&#xff08;回顧&#xff09;4. 核心&#xff1a;創建并理解訓練配置文件4.1 選擇并復制基礎模板4.2 逐一解析與修改配置文件4.3 參數詳…

推薦:ToB銷售B2B銷售大客戶營銷大客戶銷售培訓師培訓講師唐興通講銷售技巧數字化銷售銷AI銷售如何有效獲取客戶與業績

站在AI浪潮之巔&#xff0c;重塑銷售之魂 在AI時代&#xff0c;普通銷售人員&#xff08;TOB、TOC&#xff09;除了傳統的銷售動作之外&#xff0c;還能做什么&#xff1f;怎么做&#xff1f; 這是《AI銷冠》這本書想探討的核心問題。 特別喜歡編輯老師總結的&#xff1a; 讀者…

爬取小紅書相關數據導入到excel

本期我們來進行實戰,爬取小紅書的相關數據導入到excel中,后續可進行些數據分析,今后或者已經在運營小紅書的小伙伴應該比較喜歡這些數據。今天我們的主角是DrissionPage,相對于之前介紹的selenium省去了很多的配置,直接安裝了就能使用。 DrissionPage 是一個基于 python …

c++面試題每日一學記錄- C++對象模型與內存對齊深度原理詳解

一、C++對象模型核心原理 1. 對象內存布局基礎原理 設計哲學: 零開銷原則:不為未使用的特性付出代價(如無虛函數則無vptr)兼容性:C結構體在C++中保持相同內存布局多態支持:通過虛函數表實現運行時動態綁定內存布局實現機制: 編譯器處理步驟: 成員排列:嚴格按聲明順序…

Kafka 監控與調優實戰指南(二)

五、Kafka 性能問題剖析 5.1 消息丟失 消息丟失是 Kafka 使用過程中較為嚴重的問題&#xff0c;可能由多種原因導致。在生產者端&#xff0c;如果配置不當&#xff0c;比如將acks參數設置為0&#xff0c;生產者發送消息后不會等待 Kafka broker 的確認&#xff0c;就繼續發送…

Linux下SVN報錯:Unable to connect to a repository at URL ‘svn://XXX‘

一、問題描述 Linux下通過SVN執行提交&#xff08;commit&#xff09;操作時報錯&#xff1a;Unable to connect to a repository at URL svn://XXX&#xff1a; 二、解決方法 導致該問題的一個可能原因是遠程倉庫的URL發生變化了&#xff0c;即svn服務器的ip變更了。這時可…

Modbus 掃描 從站號、波特率

下載鏈接&#xff1a;https://pan.quark.cn/s/533ceb8e397d 下載鏈接: https://pan.baidu.com/s/1PQHn-MwfzrWgF2UrXQDoGg 提取碼: 1111

Docker 容器通信與數據持久化

目錄 簡介 一、Docker 容器通信 1. Docker 網絡模式 2. Bridge 模式 3. Host 模式 4. Container 模式 5. Overlay 模式 6. 端口映射&#xff1a;容器與外部的橋梁 7. 容器互聯&#xff1a;從 --link 到自定義網絡 二、Docker 數據持久化 1. 數據卷&#xff1a;Docke…

【教學類-89-08】20250624新年篇05——元宵節燈籠2CM黏貼邊(倒置和正立數字 )

背景需求&#xff1a; 【教學類-89-06】20250220新年篇05——元宵節燈籠2CM黏貼邊&#xff08;3邊形到50邊形&#xff0c;一頁1圖、2圖、4圖&#xff0c;適合不同水平&#xff0c;適合不同階段&#xff09;-CSDN博客文章瀏覽閱讀1.6k次&#xff0c;點贊35次&#xff0c;收藏27…

【DB2】SQL0104N An unexpected token “OCTETS“ was found following “……

db2創建表時報標題的錯誤&#xff0c;建表語句如下 db2 "CREATE TABLE YS.TEST_1(ID VARCHAR(64 OCTETS))"去掉octets就好了 經過測試&#xff0c;在9.7版本報錯&#xff0c;在10.5.11沒問題&#xff0c;懷疑版本差異導致 在官網查找資料&#xff0c;應該是10.5才…

暴雨以信創委員會成員單位身份參與南京專題活動

6月19日&#xff0c;中國電子工業標準化技術協會信息技術應用創新工作委員會&#xff08;簡稱信創工委會&#xff09;聯合南京市工業和信息化局共同舉辦的“智啟未來&#xff1a;AI賦能信息技術應用創新辦公新勢力”專題活動在南京成功舉辦。南京市工業和信息化局副局長代吉上、…

基于keepalived、vip實現高可用nginx (centos)

基于keepalived、vip實現高可用nginx &#xff08;centos&#xff09; 1、安裝keepalived yum install keepalived2、選同一局域網空置ip作vip 我這里測試是&#xff1a; 主&#xff1a;192.168.163.134 副&#xff1a;192.168.163.135 vip&#xff1a;192.168.163.1403、ke…

使用 launch 啟動 rviz2 并加載機器人模型

視頻資料&#xff1a;《ROS 2機器人開發從入門到實踐》6.2.2 在RViz中顯示機器人_嗶哩嗶哩_bilibili 1、創建工作空間 chapt6_ws/src&#xff0c;創建包 fishrobot_description ros2 create fishrobot_description --build-type ament_cmake --license Apache-2.0 2、創建機器…

華為云Flexus+DeepSeek征文 | 基于CCE容器的AI Agent高可用部署架構與彈性擴容實踐

華為云FlexusDeepSeek征文 | 基于CCE容器的AI Agent高可用部署架構與彈性擴容實踐 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇的探索者。 …

Python學習Day41

學習來源&#xff1a;浙大疏錦行 知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化&#xff1a;調整一個批次的分布&#xff0c;常用與圖像數據特征圖&#xff1a;只有卷積操作輸出的才叫特征圖調度器&#xff1a;直接修改基礎學習率 卷積操作常見流程如下&#xff1a; …

數組題解——最長回文子串【LeetCode】

5. 最長回文子串 一、向右拓展 算法思路 你用res記錄當前找到的最長回文子串。每次遍歷到s[i]時&#xff0c;嘗試找到以s[i]結尾的、比當前res更長的回文子串。 先嘗試長度為len(res)2&#xff08;即起點i-len(res)-1&#xff09;的子串&#xff0c;看是不是回文。如果不是&…

?從零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 鏡像并上傳 Docker Hub

&#x1f680; 從零搭建 Ubuntu22.04 Python3.11 PyTorch2.5.1 GPU Docker 鏡像并上傳 Docker Hub 在 AI 項目開發中&#xff0c;構建統一的運行環境是一件非常重要的事情。使用 Docker 可以極大地提升部署效率、保證環境一致性。本文將手把手帶你&#xff1a; ? 構建一個…