iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
Software Development

學校沒教的後端生存指南:30 天打造非同步 S3 微服務,部署 K8s 實現 HA 架構 系列

踏入軟體工程領域後最深的體悟是:「在本地端跑得好好的,一上線怎麼就炸了?」在學校,專案的目標只讓功能正常運作;但實務上卻要面對不可預測的流量、極端的網路環境以及錯誤處理。

利用 30 天打造一個高併發的AWS S3 儲存微服務。拋棄傳統同步 Apache連線,實作基於 Netty 的非同步連線來突破效能瓶頸。建立堅固的容錯處理,確保檔案狀態一致性。透過壓力測試找出單一Docker部屬瓶頸,完整保留壓測結果來佐證每一次技術決策,最終部屬在K8s 叢集上,實作真正的 HA 高可用架構。

這系列文章將帶你學會如何剖析效能盲區、設計驗證實驗,完成從初階開發者到具備架構思維的決策者蛻變之旅!

參賽天數 21 天 | 共 21 篇文章 | 2 人訂閱 訂閱系列文 RSS系列文
DAY 11

[ Day 11 ] 實作 Double-Check Pattern:狀態的二次確認機制

昨天我們說明了網路世界最殘酷的一面。當微服務呼叫 AWS S3 上傳檔案時,如果發生 TimeoutException時不能直接斷言上傳一定失敗,也有可能是上傳...

2026-09-07 ‧ 由 emmmma 分享
DAY 12

[ Day 12 ] 前端重試一百次也絕不產生髒資料!實作客戶端重試與 Idempotency 設計

昨天我們完成了 Double-Check Pattern 的實作,當 putObject 發生 timeout 時,後端不再直接回傳失敗,而是使用 headOb...

2026-09-08 ‧ 由 emmmma 分享
DAY 13

[ Day 13 ] AWS S3 成本最佳化:生命週期規則(Lifecycle Rules)與版本控制清理孤兒與歷史檔案

昨天我們完成了 Idempotency 冪等性的實作!讓前端在發起請求前先生成唯一的 uploadId,並將此 ID 作為 S3 Key。搭配昨天的 S3 Us...

2026-09-09 ‧ 由 emmmma 分享
DAY 14

[ Day 14 ] 初探混沌工程(Chaos Engineering ):本地端用 tc 製造網路延遲與封包遺失

在前兩篇中,我們在本地開發環境裡,利用了 simulateScenario 在代碼內部模擬超時,驗證了自我修復確實可以起死回生,手把手完成了微服務的三層防禦盾牌...

2026-09-10 ‧ 由 emmmma 分享
DAY 15

[ Day 15 ] S3 癱瘓的彈性容錯 : 實作 Resilience4j 斷路器與降級(Fallback)機制

在前幾天的文章中,我們在微服務中建構了多道盾牌,從透過headObject 探針解決網路超時問題的 Double-Check Pattern,實作 Idempo...

2026-09-11 ‧ 由 emmmma 分享
DAY 16

[ Day 16 ] 容器化服務 : 撰寫 Dockerfile 與多階段建置 (Multi-stage build) 環境隔離

我們從一開始的三高指標與同步/非同步引擎對決,一路升級到分散式環境下的防禦機制(Semaphore 背壓限流、Double-Check 、uploadId 冪等...

2026-09-12 ‧ 由 emmmma 分享
DAY 17

[ Day 17 ] 容器化魔法:Docker Compose 一鍵建立 App + Prometheus + Grafana 監控服務

昨天我們成功運用多階段建置(Multi-stage Build)技術,將非同步 S3 微服務打包成僅有 500MB 的極輕量 Docker 容器,並在獨立隔離的...

2026-09-13 ‧ 由 emmmma 分享
DAY 18

[ Day 18 ] CPU 不到 40% 卻卡死?Grafana監控網路瓶頸與防禦型 API 實戰對照

昨天我們成功運用 Docker Compose 建立App 微服務 + Prometheus + Grafana 的全套監控服務 現在,我們的容器不再是黑盒子了...

2026-09-14 ‧ 由 emmmma 分享
DAY 19

[ Day 19 ] 記憶體與連線池殺手 : 放寬timeout限制會降低錯誤率還是會更卡 ?

昨天我們成功在 JMeter 上傳併發測試中,證明了前面寫的保護api的功能將 3 秒超時引發的錯誤率從 53% 降至 0%,並透過 Grafana 發現真正的...

2026-09-15 ‧ 由 emmmma 分享
DAY 20

[ Day 20 ] 讀寫保護大不同 - ListObject API 加上 Semaphore 是反效果?快取機制才是王道

昨天我們深入剖析了 Timeout 設定與容量規劃的數學公式,證明了盲目放寬 Timeout 只會讓連線池乾涸。 今天,我們要將壓力測試的視角從PUT上傳轉向l...

2026-09-16 ‧ 由 emmmma 分享