1、背景
目前在做一個關于prometheus+micrometer的監控系統,名額資料都是系統使用micrometer api注冊為名額(存儲在 記憶體中),然後通過 actuator暴露端點給 prometheus拉取的
2、問題
因為 名額注冊的這個服務是個叢集,通過kafka接收來自 業務方的名額資料,那麼就隻有一台伺服器會受到某個名額的消息,也就是隻有這台伺服器的記憶體中會有這個名額,其他伺服器沒有,是以是 單點。
如果 要 做成 高可用的,那麼我就需要把 三台伺服器的端點URL(域名+/endpoint)都暴露給 prometheus,ngx層做負載,想當然地當一段時間後,應該每台伺服器都會有這個名額的,因為業務方一直再推送,那麼ngx是預設的輪詢方式,應該可以的,但是 卻不能保證。
是以 想在 某台伺服器接收到 名額消息的同時,去通知其他伺服器 也都去注冊這個名額,會有重複注冊問題,但是不會有問題,即 怎樣優雅地進行 伺服器間通信(廣播)?(終于問倒問題了)
項目使用的redis cluster,非MS,不能使用 PUB-SUB
MQ系列太重,且目前沒有現成的服務,還得搭
--------------補充下------------
名額都會存儲到redis,目前想的是每台伺服器起個定時任務,定時從redis讀取然後再注冊,肯定會有重複注冊問題
--------補充下資料流轉-------
業務方 -(kafka)> 名額注冊服務(叢集) -> prometheus