姓名:馬行健
學(xué)號(hào):16020199036
轉(zhuǎn)載自:https://zhuanlan.zhihu.com/p/26612510
LeanCloud 的云引擎提供了一種支持多種語言的容器服務(wù),由開發(fā)者編寫后端代碼來實(shí)現(xiàn)更復(fù)雜的后端業(yè)務(wù)邏輯,作為云存儲(chǔ)的補(bǔ)充。但對(duì)于云引擎來說,開發(fā)者編寫的后端代碼是一個(gè)「黑盒」,在出現(xiàn)錯(cuò)誤時(shí),開發(fā)者需要自行通過日志中查找出現(xiàn)問題的接口;而如果出現(xiàn)性能問題也只能依靠擴(kuò)容來緩解,事后開發(fā)者還需要自行查找性能瓶頸,LeanCloud 實(shí)在幫不上什么忙。
查找性能瓶頸是解決性能問題的最重要一環(huán)?,F(xiàn)在市面上類似 newrelic 的產(chǎn)品有很多,但往往價(jià)格不菲,因此我們開發(fā)了一個(gè)名為 LeanEngine APM(LeanEngine APM (Beta))的實(shí)驗(yàn)性項(xiàng)目,來幫助云引擎用戶更有針對(duì)性地觀測性能數(shù)據(jù)、定位性能瓶頸。目前 APM 支持 Node.js、Python 和 Java 三種語言。當(dāng)用戶在代碼中接入對(duì)應(yīng)的采集器后,自定義路由的統(tǒng)計(jì)數(shù)據(jù)便會(huì)自動(dòng)上報(bào)至 APM。
APM 報(bào)表頁面可以顯示出調(diào)用量、耗時(shí)和成功率,并且支持按照多種維度進(jìn)行分組和篩選展現(xiàn),下面是部分報(bào)表的截圖。

各響應(yīng)代碼的請(qǐng)求量隨時(shí)間變化圖

可以選擇時(shí)間粒度和范圍,可以根據(jù)路由、實(shí)例和響應(yīng)代碼進(jìn)行篩選

路由匯總統(tǒng)計(jì),可以按照次數(shù)、錯(cuò)誤率和平均響應(yīng)排序
如果開發(fā)者希望統(tǒng)計(jì)某一個(gè)函數(shù)的執(zhí)行情況,特別是調(diào)用外部服務(wù)和進(jìn)行后臺(tái)操作,也可以使用 APM 的「函數(shù)追蹤」功能(具體使用方法見特定語言的采集器文檔)。以 Node.js 為例,我們用 wrapTask 將已有的函數(shù)包裹起來,這樣 APM 便可以統(tǒng)計(jì)到調(diào)用次數(shù)和耗時(shí)等信息:
var apm = require('leanengine-apm');
var sendMail = apm.wrapTask('sendMail', function(template, address) {
? // ...
});
各語言的采集器都是開源的(Node.js 采集器、Python 采集器、Java 采集器),今后我們還會(huì)在 APM 添加更多的工具和功能,幫助開發(fā)者解決云引擎中的性能問題,也歡迎大家將需求提交到 Github Issue 中幫助我們來完善這一產(chǎn)品。