天天看點

伺服器間消息,伺服器間消息通信方案

1、背景

目前在做一個關于prometheus+micrometer的監控系統,名額資料都是系統使用micrometer api注冊為名額(存儲在 記憶體中),然後通過 actuator暴露端點給 prometheus拉取的

2、問題

因為 名額注冊的這個服務是個叢集,通過kafka接收來自 業務方的名額資料,那麼就隻有一台伺服器會受到某個名額的消息,也就是隻有這台伺服器的記憶體中會有這個名額,其他伺服器沒有,是以是 單點。

如果 要 做成 高可用的,那麼我就需要把 三台伺服器的端點URL(域名+/endpoint)都暴露給 prometheus,ngx層做負載,想當然地當一段時間後,應該每台伺服器都會有這個名額的,因為業務方一直再推送,那麼ngx是預設的輪詢方式,應該可以的,但是 卻不能保證。

是以 想在 某台伺服器接收到 名額消息的同時,去通知其他伺服器 也都去注冊這個名額,會有重複注冊問題,但是不會有問題,即 怎樣優雅地進行 伺服器間通信(廣播)?(終于問倒問題了)

項目使用的redis cluster,非MS,不能使用 PUB-SUB

MQ系列太重,且目前沒有現成的服務,還得搭

--------------補充下------------

名額都會存儲到redis,目前想的是每台伺服器起個定時任務,定時從redis讀取然後再注冊,肯定會有重複注冊問題

--------補充下資料流轉-------

業務方 -(kafka)> 名額注冊服務(叢集) -> prometheus