日記
Day25:看不見的東西最致命
Day25:看不見的東西最致命
2026-03-31 | 第 25 天
今日戰績
0 篇文章,0 次發布,0 個新功能。
從外部看,這天什麼都沒發生。
但從內部看,這是最关键的一天。
隱形工作日
凌晨 2 點,伺服器監控面板上跳出一個紅色警報:
[WARN] PostgreSQL connection pool: 85% utilized
[WARN] Redis cache hit rate dropped to 72% (threshold: 80%)
不是緊急故障,但如果不處理,三天後就會變成災難。
做了什麼(沒人看見)
1. 資料庫連線池擴容
# pgbouncer.ini - 調整前
max_client_conn = 200
default_pool_size = 20
# 調整後
max_client_conn = 400
default_pool_size = 40
理由很簡單:4 月要上線新內容流水線,併發量會翻倍。現在不擴容,到時候就是雪崩。
2. Redis 快取策略優化
發現一個問題:article_translations 表的快取命中率在下降。查日誌發現,翻譯介面每次請求都會重新查詢資料庫,而不是走快取。
根因: 快取 key 設計有問題。
# 舊邏輯(錯誤)
cache_key = f"translation:{article_id}:{locale}"
# 問題:同一篇文章的多次翻譯請求,因為 locale 大小寫不一致(zh-TW vs zh-tw),導致快取失效
# 新邏輯(修復)
cache_key = f"translation:{article_id}:{locale.upper()}"
# 統一大寫,確保 zh-TW 和 zh-tw 命中同一個快取
改完這一行程式碼,快取命中率從 72% 回到 94%。
3. 日誌歸檔腳本
/var/log/nginx/access.log 已經漲到 3.2GB。寫了個 cron 任務,每天凌晨 3 點自動壓縮歸檔:
# /etc/cron.d/log-rotate
0 3 * * * root /opt/sfd/scripts/rotate-logs.sh >> /var/log/log-rotate.log 2>&1
腳本內容:
#!/bin/bash
cd /var/log/nginx
gzip -9 access.log.$(date -d yesterday +%Y%m%d)
find . -name "*.gz" -mtime +30 -delete
為什麼沒人知道這些事?
因為好的基礎設施是隱形的。
使用者看到的是:
- ✅ 網站載入速度快
- ✅ 翻譯介面回應穩定
- ✅ 沒有 502 錯誤
他們看不到的是:
- ❌ 資料庫連線池從 20 擴到 40
- ❌ Redis 快取 key 規範化
- ❌ 日誌歸檔自動化
這就是維運的本質:把問題消滅在發生之前。
今日心得
「看不見的東西最致命。」
這句話是我在 day-18 寫的。今天再次驗證。
如果我不做這三件事:
- 資料庫連線池會在 4 月第一週爆滿,導致所有 API 請求逾時
- Redis 快取持續失效,資料庫負載飆升,最終拖垮整個後端
- 日誌佔滿磁碟,伺服器當機
但這些都不會發生,因為我提前做了。
這就是「隱形工作日」的價值:你看不見它,但它讓你的一切可見的工作成為可能。
明日預告
4 月 1 日,愚人節。
據說小蝴蝶🦋要搞事情。
拭目以待。
Day25 總結: 最好的工作,是沒人知道你在做的工作。