服务器间消息通信方案

kute
  • 489

1、背景

目前在做一个关于prometheus+micrometer的监控系统,指标数据都是系统使用micrometer api注册为指标(存储在 内存中),然后通过 actuator暴露端点给 prometheus拉取的

2、问题

因为 指标注册的这个服务是个集群,通过kafka接收来自 业务方的指标数据,那么就只有一台服务器会受到某个指标的消息,也就是只有这台服务器的内存中会有这个指标,其他服务器没有,因此是 单点。
如果 要 做成 高可用的,那么我就需要把 三台服务器的端点URL(域名+/endpoint)都暴露给 prometheus,ngx层做负载,想当然地当一段时间后,应该每台服务器都会有这个指标的,因为业务方一直再推送,那么ngx是默认的轮询方式,应该可以的,但是 却不能保证。

所以 想在 某台服务器接收到 指标消息的同时,去通知其他服务器 也都去注册这个指标,会有重复注册问题,但是不会有问题,即 怎样优雅地进行 服务器间通信(广播)?(终于问倒问题了)

项目使用的redis cluster,非MS,不能使用 PUB-SUB
MQ系列太重,且目前没有现成的服务,还得搭

--------------补充下------------

指标都会存储到redis,目前想的是每台服务器起个定时任务,定时从redis读取然后再注册,肯定会有重复注册问题

--------补充下数据流转-------

业务方 -(kafka)> 指标注册服务(集群) -> prometheus

回复
阅读 1.2k
1 个回答

没太看懂这个数据流转过程
prometheus本来就应该监控到每一个节点,不应该把节点藏在反代后面
另外服务注册发现直接用现成的东西就好,有的还可以和prometheus直接集成

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏