Well-Architected Framework(WAF 五大支柱)

是什麼?

Well-Architected Framework 是由 AWS/Azure/GCP 各自發佈的雲端架構最佳實踐指南。核心是五大支柱(Five Pillars),提供一套結構化的方法來評估和改善雲端架構。

ℹ️各雲端版本

AWS、Azure、GCP 各有自己的 WAF 版本,核心概念幾乎相同。Azure 的版本是 Azure Well-Architected Framework,AWS 是 AWS Well-Architected Framework。面試時通常問的是通用概念,不限特定雲端。

核心觀念

常見誤區

⚠️常見誤區

  • 只關注一個支柱:五大支柱之間有取捨關係。追求極致安全可能影響效能和成本,追求最低成本可能犧牲可靠性。重點是平衡
  • 一次做完所有最佳實踐:WAF 不是 Checklist,不需要一次全部做到。按業務優先級逐步改善
  • 只在建構時做 Review:WAF Review 是持續性的,架構會演化,至少每季做一次 Review

流程/步驟

1

執行 WAF Review

用官方的 Review Tool 評估現有架構

2

辨識弱點

每個支柱給分,找出最薄弱的支柱

3

優先排序

根據業務影響排序改善項目

4

制定改善計畫

每個改善項目有明確的 Owner 和截止日

5

實施改善

逐步執行,每次改善一個支柱的 1-2 個項目

6

定期重新評估

每季重新做 WAF Review,追蹤改善進度

流程解讀:WAF Review 從評估現狀開始,用官方工具給各支柱打分。找出最薄弱的支柱後,根據業務影響排序改善項目。逐步實施改善,每季重新評估。WAF 是一個持續迴圈,不是一次性活動。

程式碼範例

C# 版本

csharp
// Reliability — Health Check + Circuit Breaker
builder.Services.AddHealthChecks()
    .AddDbContextCheck<AppDbContext>()
    .AddRedis(config["Redis:Connection"]!)
    .AddUrlGroup(new Uri("https://external-api.com/health"), "external-api");
 
// Circuit Breaker(使用 Polly)
builder.Services.AddHttpClient("ExternalApi")
    .AddTransientHttpErrorPolicy(p =>
        p.CircuitBreakerAsync(
            handledEventsAllowedBeforeBreaking: 3,   // 3 次失敗就斷路
            durationOfBreak: TimeSpan.FromSeconds(30) // 斷路 30 秒
        ))
    .AddTransientHttpErrorPolicy(p =>
        p.WaitAndRetryAsync(3, retryAttempt =>
            TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)) // 指數退避重試
        ));
 
// Security — 資料加密
builder.Services.AddDataProtection()
    .PersistKeysToAzureBlobStorage(blobUri)
    .ProtectKeysWithAzureKeyVault(keyUri, credential);
 
// Performance — Response Caching
builder.Services.AddResponseCaching();
app.UseResponseCaching();
 
[HttpGet("api/products")]
[ResponseCache(Duration = 60)] // 快取 60 秒
public async Task<ActionResult<IEnumerable<ProductDto>>> GetProducts()
{
    return Ok(await _productService.GetAllAsync());
}

TypeScript 版本

typescript
// Operational Excellence — 結構化日誌
import winston from "winston";
 
const logger = winston.createLogger({
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json() // 結構化 JSON 格式
  ),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: "app.log" }),
  ],
});
 
// 每次請求記錄結構化日誌
app.use((req, res, next) => {
  const start = Date.now();
  res.on("finish", () => {
    logger.info("HTTP Request", {
      method: req.method,
      path: req.path,
      statusCode: res.statusCode,
      durationMs: Date.now() - start,
      userAgent: req.headers["user-agent"],
    });
  });
  next();
});
 
// Reliability — Graceful Shutdown
process.on("SIGTERM", async () => {
  logger.info("SIGTERM received, shutting down gracefully");
  server.close(() => {
    db.disconnect();
    process.exit(0);
  });
  // 強制超時
  setTimeout(() => process.exit(1), 10000);
});

Python 版本

python
# Performance Efficiency — 快取策略
from functools import lru_cache
import redis
 
redis_client = redis.Redis(host="localhost", port=6379)
 
# 應用層快取 — 減少資料庫查詢
async def get_product(product_id: int) -> dict:
    cache_key = f"product:{product_id}"
 
    # 先查 Redis
    cached = redis_client.get(cache_key)
    if cached:
        return json.loads(cached)
 
    # Cache Miss — 查資料庫
    product = await db.products.find_one({"id": product_id})
    if product:
        redis_client.setex(cache_key, 300, json.dumps(product))  # 快取 5 分鐘
 
    return product
 
# Reliability — 重試機制
from tenacity import retry, stop_after_attempt, wait_exponential
 
@retry(
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=1, min=1, max=10),
)
async def call_external_api(url: str) -> dict:
    async with httpx.AsyncClient() as client:
        response = await client.get(url, timeout=5.0)
        response.raise_for_status()
        return response.json()

架構圖/概念圖

Well-Architected Framework
HA + DR
Reliability
Security
Cost Optimization
Performance
Operational Excellence

WAF 五大支柱涵蓋雲端架構的所有面向。Reliability 確保系統不掛、Security 確保資料不被偷、Cost 確保錢不浪費、Performance 確保使用者不等、Operations 確保團隊不崩潰。

實戰補充

Q: 五大支柱之間有衝突時怎麼辦?

A: 根據業務優先級取捨。金融系統:Security > Reliability > Performance > Cost > Operations。新創 MVP:Cost > Performance > Operations > Security > Reliability。沒有標準答案,取決於業務需求。

Q: WAF Review 怎麼做?

A: AWS 和 Azure 都提供免費的 Review Tool(AWS Well-Architected Tool、Azure Advisor)。回答一系列問題,工具會給出各支柱的評分和改善建議。建議每季做一次,追蹤改善趨勢。

Q: 面試怎麼答 WAF 相關問題?

A: 先說出五大支柱名稱,再挑 2-3 個詳細說明。舉具體例子:「Reliability 方面,我們用多 AZ 部署 + Auto-Scaling + Health Check 實現了 99.9% 的 SLA」。展示你不只知道理論,還有實踐經驗。

理解測驗

🤔 WAF 五大支柱中,哪個支柱關注的是系統在故障時的自動恢復能力?

🤔 為什麼 WAF Review 要定期做而不是只做一次?

🤔 五大支柱之間有衝突時,正確的做法是什麼?

重點整理

💡一句話記住

WAF = 從五個角度體檢雲端架構,持續改善而非一次到位。 口訣:「穩(Reliability)、安(Security)、省(Cost)、快(Performance)、順(Operations)」

| 支柱 | 核心問題 | 關鍵實踐 | |------|---------|---------| | Reliability | 系統掛了怎麼辦? | 多 AZ、Auto-healing、DR | | Security | 資料安全嗎? | IAM、加密、網路隔離 | | Cost | 錢花得值嗎? | Right-sizing、RI、Auto-Scale | | Performance | 使用者等太久嗎? | 快取、CDN、選對規格 | | Operations | 團隊能高效維運嗎? | IaC、CI/CD、監控告警 |

你可能也想看

雲端成本優化回到目錄 →

按 ← → 鍵切換課程