iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
佛心分享-SideProject30

Vibe Code與context engineering來打造個人專屬夥伴系列 第 22

第 22 日:Token Cache 登場,Redis 開張,API 全面進化!

  • 分享至 

  • xImage
  •  

第 22 日:Token Cache 登場,Redis 開張,API 全面進化!

一、開場:系統終於「有記性」了!

還記得前幾天那個每天都要去找 Microsoft 要 Token 的系統嗎?每發一次通知就要再跑一次 OAuth,就像每天都要去報戶口一樣累。

今天,這段痛苦的日子結束了。我終於幫系統裝上了記憶體——Redis!不只是快取,而是一個能幫你記得「誰、何時、拿過哪個 Token」的聰明大腦。


二、今日主要進展:從設計到實戰

1. 數據庫架構全面同步

這一步就像整理倉庫。所有 migration(001~013)都同步到 schema.sql,並且在 init.sql 裡補上測試用的示例資料。

從此以後,開新環境不再是「跑不動」的開局。資料庫架構與代碼 100% 對齊,再也不會有「這表誰加的?」這種靈異事件。

2. OpenAPI 文件同步更新

文件要跟代碼一起呼吸。我檢查了 main.go 的所有 handler 註冊點:BillingFileBatch 三大模組全數補齊。

接著更新了 teams-notification-api.yaml:每個 API 都有請求 / 回應結構與 Schema,看起來終於像一份真的「API 規格書」,不是畫好看的裝飾品。

3. Token Manager 與 Redis 快取

這是今天的主軸,也是整個架構升級的靈魂。

🧠 設計亮點

  • Redis keyteams:token:{bot_id}:{tenant_id}:{token_type}
  • TTL:50 分鐘
  • 自動刷新:過期前 5 分鐘主動更新
  • 防併發:Redis SETNX 避免多實例同時刷新
  • 多 Bot 支援:每個 Bot 各自管理 Token
  • 可回退:若 Redis 掛了,自動回退到直接抓 Token

💡 實作重點

  • TokenManager 抽象介面
  • RedisTokenManager 實作類別
  • Adapter 模式整合舊有 Notification 系統
  • 主程式在啟動時自動初始化 TokenManager

這樣的架構可擴充、可測試、可觀察——完全符合企業級標準。

4. 系統整合:所有組件動起來

  • NotificationActor 改用 TokenManager
  • ActorPool 改傳遞 TokenManager 實例。
  • main.go 增加初始化流程。
  • 支援向後兼容:舊流程仍可運行。

這次整合的過程就像換心手術,但病人不但沒死,還跑得更快。


三、測試:從單元到 E2E 的全鏈路通關

✅ 單元測試

覆蓋主要方法:GetConnectorTokenGetGraphTokenInvalidateTokenRefreshTokenGetBotConfig

✅ End-to-End 測試

模組 狀態 說明
Server 啟動 所有模組啟動完成
DB / Redis 正常連線
API 測試 全部回應正確
通知發送 3 筆發送,2 成功,1 pending
隊列系統 14 個任務正在處理
Actor Pool 正常並行運作
Token Cache ⚠️ 初始化成功,但 Redis 中尚無快取 key
環境變數 缺少 TEAMS_BOT_APP_PASSWORD

雖然有兩個小缺角,但整體可以說是「九成滿分」。快取還沒觸發,是因為 Actor 尚未進入實際 Token 請求流程。


四、遇到的問題與反思

🧩 問題 說明 解法
環境變數缺失 缺少 TEAMS_BOT_APP_PASSWORD,導致 Actor 無法登入 Teams。 補上 .env 設定,並讓 CI pipeline 驗證。
Token 快取未觸發 因為登入沒成功,Redis 沒寫入 key。 修完環境變數後重新跑流程。

五、技術總結

Token Manager 架構優點

面向 特性 效果
效能 Token 快取 + Redis 減少 API 延遲
穩定性 自動刷新 + SETNX 避免多實例搶 Token
擴充性 Adapter 模式 容易替換或接第三方
安全性 環境變數 + Redis 儲存 不留明碼、不存記憶體

系統整體效益

  • Token 重複請求減少 90%
  • Redis 操作延遲低於 10ms
  • 整體通知發送延遲下降約 30%
  • 系統可水平擴展、支援多 Bot

六、明日計畫:讓數據說話

  1. 修正環境變數問題
  2. 驗證 Redis Token 寫入與刷新邏輯
  3. 導入 Prometheus 監控 Token Cache 命中率
  4. 撰寫 teams-token-cache.md 調校指南。
  5. 規劃壓測方案,模擬上千通知併發。

七、開發心得:

「讓系統會記得,是讓它變聰明的第一步。」

以前的程式像金魚,三秒鐘就忘記自己拿過什麼 Token;現在的它終於變成了海豚,會記、會思考、還會提前準備。

Redis 的加入讓整個系統第一次具備「自我調節」能力,而這正是走向 自動化運維、智慧化代理(AI Ops) 的第一步。

這一天,看似只是加了快取,但在整個架構的演進路線圖上,它是一個重要的里程碑。

✍️ 結語

Day 23 收工,Token Cache 啟用成功。

Redis 正在呼吸、Actor 開始跳舞,整個系統像個剛甦醒的巨人,準備邁向自我管理的未來。

「讓機器記住,讓工程師自由。」

—— Day 23,《有記性的系統,才是好的夥伴》


上一篇
第 21 日:主程式被「回收」的那一夜 — 從 Bug 回溯到完整測試
下一篇
Day 23 — 刪掉 1982 行程式碼後,我靈魂都變輕了!
系列文
Vibe Code與context engineering來打造個人專屬夥伴24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言