问题描述
我们正在IOT平台上工作,该平台吸收了许多设备参数 可能会每秒从5个设备获取值(时间序列)。一旦摄取 每个JSON(在特定位置捕获的多个参数值的批处理 实例)跟踪流经JSON的最佳方法是什么 以事件驱动的方式向下游提供了许多微服务?
我们主要使用spring boot技术,所有服务都 容器化。
例如:选项1-将UUID与每个对象相关联,然后更新 每个微服务对其进行处理时,Redis中的状态完全相同 理想?问题是现在每个微服务都将与Redis绑定在一起,我们 看到Redis的性能下降,因为对Redis的数字api调用 因为它是单线程的,所以增加了(尽管我们可以向外扩展)。 选项2-Zipkin?
注意:我们使用Kafka / RabbitMQ在分布式环境中处理消息 如您在这里提到的方式。我的问题是关于追踪策略 每个消息及其状态(如果需要,可以重播 只有一次交货)。假设正在处理message1 通过服务A,服务B,服务C。现在我们要跟踪一些问题 如果消息未能在服务B或服务C处处理为 我们收到很多消息
解决方法
更好的方法是使用Kafka而不是Redis。
为每个微服务创建一个主题,并继续从 处理完后,将一个主题转换为另一个主题。
topic(raw-data) - |MS One| - topic(processed-data-1) - |MS Two| - topic(processed-data-2) ... etc
保持将结果附加到同一对象上,并继续将其向下移动,直到每个微服务都对其进行处理为止。