🔗 GitHub 原始碼:https://github.com/jeff377/bee-library
在企業系統開發中,常見的 N-Tier 架構會將 UI、API、Business、Db 等層拆分並跨伺服器部署。
這種分層雖然能提升可維護性與擴充性,但也帶來挑戰:跨層 Trace 難以一次性觀測完整流程。
BeeNET 提供的 Trace 機制 與 JSON-RPC 近端連線模擬,正是為了解決這個問題:
BeeNET 採五層式 N-Tier 架構:
UI → Connect → API → Business (BO) → Db → 資料庫
Trace 的價值在於協助開發者:
類別 | 功能 |
---|---|
Tracer |
提供 Start / End / Write 建立追蹤事件 |
TraceContext |
保存層級、名稱、細節與計時器 |
TraceEvent |
結構化事件(Start / End / Point,含耗時與狀態) |
TraceLayer |
區分 UI、ApiClient、ApiServer、Business、Data |
TraceListener |
監控器,呼叫 ITraceWriter 輸出事件 |
ITraceWriter |
輸出介面,可實作檔案、Console 或 UI 顯示 |
FormTraceWriter |
範例:WinForms Trace Viewer |
SysInfo.TraceListener = new TraceListener(new FormTraceWriter(form));
var ctx = Tracer.Start(TraceLayer.Business, "SubmitOrder", "開始送單");
try {
_orderBo.Validate(orderId);
_orderBo.Persist(orderId);
Tracer.End(ctx, TraceStatus.Ok);
}
catch (Exception ex) {
Tracer.End(ctx, TraceStatus.Error, ex.Message);
throw;
}
Tracer.Write(TraceLayer.Data, "SQL", "Execute SaveOrder", TraceStatus.Ok);
每筆事件包含:
案例:使用者回報「建立訂單很慢」。
Trace Tree 顯示:
ApiServer.SubmitOrder (310ms)
└─ Business.OrderBo.Persist (240ms)
└─ Data.SqlOrderRepository.Save (220ms)
👉 瓶頸在資料層,應優先檢查 SQL 與索引。
Status=Error
事件,搭配統一例外訊息規範,快速定位問題利用 JSON-RPC「近端連線模擬」把跨機器流程拉回本機,完成端到端 Trace,讓開發人員能完整觀測 UI → Connect → API → BO → DB 的流程。
📘 HackMD 原文筆記:
👉 https://hackmd.io/@jeff377/ntier-trace
📢 歡迎轉載,請註明出處
📬 歡迎追蹤我的技術筆記與實戰經驗分享
Facebook | HackMD | GitHub | NuGet