-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
關於一些記錄的 counter. #263
Comments
可以加上 prometheus 的 exporter |
請問有哪些資料需要呢?目前有想到的大概有:在線人數,人氣,推文數等,可能會需要把這些數據相關的 api 一起完成或是修改。 |
這個好像有分兩種~ "給 frontend 看到的數字" 很 tricky~ redis 有類似的 code. key 的 convention 是 [prefix]:[key] https://github.com/Ptt-official-app/go-openbbsmiddleware/blob/main/schema/lock.go https://github.com/Ptt-official-app/go-openbbsmiddleware/blob/main/schema/init.go#L224 https://github.com/Ptt-official-app/go-openbbsmiddleware/blob/main/docker/docker-compose.yaml#L23 另外一種是偏給系統和後台紀錄. 最近發現 prometheus 很容易就可以搞定這件事: |
ok 我明白了,第一種給 frontend 用的 count-cache 我先想看看生成的機制以及移除(invalidation) ,第二種的話,我對 prometheus 不熟,我先玩看看他是怎麼運作的,再來討論需要觀察的數據是哪些 |
在線人數:key -> [count:active-USERID] value -> [lastAPICallTime] ,需要統計的時候就用 redis 的 key pattern ('keys', 'count:active-*') 這個是 O(N) ,應該不會算慢,不過這樣對 redis 的負擔有點高,也許我們可以再設定一個 Key-Value 定時統計上述的數字,讓 API 直接讀取這個數字就好,每一個 active-user 的 invalidation 可以有兩種做法,一個是設 expried 讓 redis 自動刪除,或是排成定時去掃 lastAPICallTime 已經超過某一個範圍的 active-user,這兩種方法都要能夠更新 active-user 的 lastAPICallTime ,可以在某些常用的 api 加入這個規則,或是給一隻 api 讓 frontend 去呼叫。 |
Prometheus 的部分我研究之後,它可以很容易紀錄這些資料
|
|
在線人數:ok 沒問題,那就改成從 mongo aggregate active api users,以及從 go-pttbbs 拿人數,加總之後寫入 redis ,這一個動作會寫入 cronjob 定期執行。
使用 gin 的 middleware 應該可以比較簡單解決這個需求,有看到 opensource 或是自己寫應該也不複雜~ |
我先從 active users 開始做,目前看了 db 裡面的 collection ,應該可以用 btw 水球系統那邊未來應該有打算串 websocket ?也許那時候直接算 connecting client 的數量就好了~ |
剛剛想到是有可能 然後就可以 Count({UpdateNanoTS > now - 10 mins}) |
好,那我再建一個新的 collection: user_visit: user_id, update_nano_ts |
非常感謝! |
好,我會加上 method,另外我有注意到你的格式是 是希望 user 獨立出一個 struct 嗎? |
並不是喔~ Update 包含著 filter 和 update 的部分. 其中 https://github.com/Ptt-official-app/go-openbbsmiddleware/blob/main/db/collection.go#L200 |
喔喔,是我誤會了XD |
目前剩下的部分:
|
Is your feature request related to a problem? Please describe.
關於一些記錄的 counter.
Describe the solution you'd like
使用 redis 來記錄 counter.
Describe alternatives you've considered
Additional context
The text was updated successfully, but these errors were encountered: