1. 程式人生 > >AppBoxFuture: 服務模型的線上除錯與效能監測

AppBoxFuture: 服務模型的線上除錯與效能監測

  框架內的服務模型(ServiceModel)用於處理各類業務邏輯(如最簡單的CRUD操作),在設計時以類似於虛擬碼的形式存在,釋出時後端會通過Roslyn轉換並編譯為執行時程式碼。為了方便開發者作者初步實現了線上除錯服務與監測服務呼叫效能的功能,下面分別介紹。

一、服務線上除錯

1.1 實現原理

  原本想參照VSCode實現除錯功能,但VSCode使用的vsdbg偵錯程式有許可限制,無法用於第三方IDE,好在GitHub上的netcoredbg專案使用MIT許可且支援VSCode的除錯協議。作者畫了個流程圖簡要說明一下除錯流程:

  1. WebIDE定位需要除錯的服務方法並設定相應的斷點後啟動除錯(如果方法有引數則需要輸入引數值);
  2. 服務端DebugService收到除錯請求後轉換並編譯Debug版本的服務程式碼,然後啟動netcoredbg子程序(需要重定向標準輸入輸出,netcoredbg通過標準輸入輸出接收除錯指令並響應),初始化除錯子程序後傳送執行命令啟動AppContainer子程序,AppContainer子程序在啟動時載入已編譯好的目標服務例項並注入容器內;
  3. 服務端DebugService在一切準備就緒後傳送呼叫服務方法(除錯目標)的請求至AppContainer子程序,開始除錯過程(處理netcoredbg除錯事件)。

VSCode除錯協議參考:

  1. https://github.com/Microsoft/vscode-debugadapter-node/blob/master/debugProtocol.json
  2. https://github.com/Microsoft/vscode-debugadapter-node/blob/master/protocol/src/debugProtocol.ts

1.2 除錯演示

  1. 目前僅實現了通過滑鼠定位變數檢視相應值;
  2. 尚未實現檢視虛擬實體類及其成員的值。

二、服務效能監測

  作為一名程式設計師,系統性能優化是一場持久戰,目標是追求用更少的資源來滿足系統的執行要求。作者在設計之初就定下了整個架構必須包含完整的系統監控功能,以方便快速定位系統瓶頸。因此作者在服務端的服務例項容器內埋了監測點(Pormetheus的Histogram指標型別),用以監測服務例項的呼叫次數與響應時間。叢集內的Prometheus節點定期採集與儲存監測指標,通過運維管理系統的“服務監控”面板(如下圖所示)可以檢視某一時間範圍內服務呼叫次數與耗時的排名,這樣程式設計師就可以重點分析與優化這些服務模型的程式碼。

運維管理系統由框架本身實現,入口為http://地址:5000/ops

三、本篇小結

  本篇介紹瞭如何實現IDE的服務模型除錯與效能監測功能,GitHub上的執行時已更新可供測試。一邊碼程式碼一邊碼文實屬不易,作者需要您的支援請您多多點贊推薦