發表文章

Tips on Dockerfile

Dockerfile 看似簡單,幾行 FROM、RUN、COPY 就能把應用打包成 image,但寫得好不好,直接牽動 build 速度、image 大小、安全性與日後的可維護性。本文整理幾個實務中最常用、卻也最常被忽略的 Dockerfile 撰寫訣竅。 (一)善用 layer cache , 指令由 變動較少 排到 容易變化 (由上到下) Docker build 是逐層(layer)快取的,只要某一層的指令或內容改變,該層之後的所有 layer 都會失效重建。因此在Dockerfile內容中,指令順序(由上到下)應該從「變動頻率低」排到「變動頻率高」。最典型的例子,是先複製相依清單、安裝套件,最後才複製原始碼: # 先處理相依,讓 cache 命中率最大化 COPY package.json package-lock.json ./ RUN npm ci COPY . . 如此一來,只要原始碼變動、相依沒變, npm ci 這一層就能命中 cache,不必重跑。 (二)用 multi-stage build 縮小 image 把「編譯環境」與「執行環境」分開,只把最終產物帶進 runtime image,可大幅縮小體積,也降低受攻擊面(attack surface): FROM golang:1.22 AS builder WORKDIR /app COPY . . RUN go build -o server . FROM alpine:3.20 COPY --from=builder /app/server /server ENTRYPOINT ["/server"] runtime image 不再包含 compiler 與原始碼,從數百 MB 降到數十 MB 是常態。 (三)合併 RUN 並在同一層清理 cache 每一個 RUN 都是一層。把相關指令用 && 串接成一層,並在同一層清掉套件快取,避免多餘體積殘留在 image 裡: RUN apk add --no-cache curl \ && rm -rf /var/cache/apk/* Debian/Ubuntu 則常見 apt-get install 之後接 rm -rf /var/l...

SRE 不是專案:價值、評估與治理

導讀摘要: 在企業管理會議上,「這個 SRE 專案什麼時候結束?」是財務長與執行長最常提出、也最容易誤導決策的問題。它反映了一種常見的認知失調——用「專案(Project)」的靜態思維,去管理一項本質上動態、連續、持續對抗系統熵增的工程實踐。本文從三個層面展開分析:為什麼傳統專案管理難以有效衡量 SRE、SRE 真正的核心價值何在、以及在沒有明確截止日期的前提下應如何評估其 ROI 並控制成本。核心觀點是:衡量 SRE 的正確標準,不是「何時完成」,而是「自動化的程度是否讓人力成本的成長率低於業務成長率」。 一、問題的起點:一個常被問錯的問題 當年度規劃討論到 SRE 或 DevOps 團隊時,最常出現的質疑往往是:「這個專案什麼時候會結束?既然沒有完工日,預算要如何控制?是否要無止盡地投入人力與軟體授權費用?」 這是一個合理、卻建立在錯誤前提上的問題。傳統的 IT 管理習慣以專案思維運作——明確的範圍、時間、預算與截止日期(Deadline)——藉此控管風險。然而,SRE 的本質是對抗複雜系統中的熵增(Entropy)與規模化挑戰,這是一個持續進行的過程,而非一次性的交付任務。 問題的根源不在 SRE,而在管理範式(Paradigm)的錯配。以靜態的專案框架衡量動態的維運工作,不僅難以正確評估績效,也容易導致資源錯置。要化解這個誤判,需要先釐清三件事:專案管理為何在此失效、SRE 的價值究竟該如何定義、以及該用什麼機制取代「截止日期」來控制成本。 二、為什麼傳統專案管理難以衡量 SRE? 軟體服務與建築工程有本質差異。建築物完工後,維護成本相對低廉且可預測;軟體服務則不同——只要業務在成長、流量在增加、新功能在發布,維運的複雜度就會持續上升。 若以「專案結案」的方式管理 SRE,通常會導向兩種結果。其一是 專案永遠無法結案 :由於系統的熵增不會停止,管理者容易因看不到終點而誤判團隊效率低落。其二是 強制結案、撤出人力 :系統隨後因缺乏維護而逐漸劣化,最終造成遠大於節省成本的商業損失。 兩種結果指向同一個結論:SRE 並非一個「有終點的導入計畫」,而是一種「持續運作的能力」。為它設定完工日,就如同為消防體系設定解散日——問題不在於效率,而在於這個提問的框架本身並不成立。承認這一點,是後續一...

Loop Engineering 是新詞,控制迴圈是老朋友:SRE 視角的 AI Agent 設計觀

2026 年六月起,「Loop Engineering」成了討論度很高的一個詞。它的核心主張是:不要再一句一句去指揮 AI agent,而是設計一個能自己運作的迴圈,讓系統替你下指令。這個想法很誘人,但也帶來疑問:它跟我們已經在用的東西有什麼不同?什麼時候該用?會不會出問題? 這篇文章想換一個角度來看這件事。如果我們把 Loop Engineering 放回「控制迴圈(control loop)」這個更老、也更成熟的脈絡裡,前面那些疑問會清楚不少。控制迴圈是 SRE 與自動化領域用了很多年的概念,它累積下來的一些經驗,剛好可以回答 Loop Engineering 現在還沒講清楚的問題。本文的目的不是重述一次「Loop Engineering 是什麼」,(這類介紹網路上已經很多了),而是透過 SRE 的角度來說明,並用它來想清楚幾個實務上真正重要的問題。 一、Loop Engineering 本質 Google Cloud 的 Addy Osmani 在他那篇被廣泛引用的長文裡,把 Loop Engineering 定義為「把負責下指令的那個人,從你自己換成一套你設計好的系統」。在過去 Prompt Engineering 的模式下,開發者跟 AI 是一來一往的:你提需求、AI 產出、你看完再給下一個指令,人始終是流程的控制者。Loop Engineering 想做的,是把這個控制的角色交給一個迴圈:它會自動發現工作、指派任務、驗證結果、記錄狀態,再決定下一步。實作上它由幾個元素組成:Automation、工作區隔離 Worktree、Skills、Connector、Sub-Agent,以及 State Memory。 這裡有個容易被熱潮蓋過的事實值得先說:這並不是一個全新發明。Anthropic 在 2024 年的《Building Effective Agents》裡,就已經描述過 Evaluator-Optimizer(一個模型產出、另一個模型批判修正)與 Orchestrator-Workers(主代理分派工作給子代理)這類架構,它們本質上都是 agent 迴圈。真正改變的其實是工具的成熟度,一年前你想做這件事,得自己寫一堆 bash script 跟排程,現在這些能力已經直接內建進 Claude Cod...

Platform Engineering vs SRE: 2026 年企業選擇的新觀點

在 2026 年的企業技術圈,「Platform Engineering」已不再是矽谷大廠的專屬詞彙, 它正以驚人速度出現在每一份 CTO 的年度規劃書中。然而,許多企業在尚未釐清其本質之前, 便倉促地將資源從 SRE 團隊抽調至平台建設,結果兩頭落空。本文將從組織設計、成本結構 與工程文化三個維度深度解析,為不同規模的企業提供一套可操作的決策框架——因為這道題 的正確答案,從來就不是二選一。 一、背景:為什麼 2026 年這個問題變得緊迫? 最近注意到一件事:「Platform Engineering」這個詞出現的頻率,已經開始追上「DevOps」。 Gartner 在其《Hype Cycle for Software Engineering, 2023》中, 將 Platform Engineering 與 AI-augmented software engineering(AIASE)、AI coding assistants 並列為 具轉型潛力的核心趨勢,預計主流採用時間落在 2 至 5 年內, 並預測到 2026 年,80% 的大型軟體工程組織將建立專責的平台團隊。 [10] 值得注意的是,根據 platformengineering.org 於 2025 年底的調查, 這個預測已提前實現——近 90% 的企業表示已建立內部平台, 比 Gartner 的預測時程提早了整整一年。 [11] 與此同時,許多已經導入 SRE 三至五年的企業,正面臨一個尷尬的現實困境: SRE 團隊的價值難以向管理層說清楚,招募符合條件的 SRE 工程師越來越困難, 而開發團隊對維運流程的抱怨卻從未減少。這些積累已久的組織摩擦, 讓 Platform Engineering 的出現顯得格外像是一個「救星」。 問題在於,當企業管理層開始把 Platform Engineering 視為 SRE 的「升級替代版」時, 一場代價高昂的組織誤判便已悄然開始。在真正理解它們的本質差異之前, 任何倉促的組織重組,都只是把問題從一個地方搬到另一個地方。 要回答「企業該如何選擇」這個問題,我們必須先回到最基本的定義。 二、定義釐清:先弄懂這兩個詞到底在說什麼 SRE 的本質 SRE 的起源可以追溯到 2003 年 Googl...

熱門文章

Docker 環境下的 Proxy 配置