今天我们进行了一场关于最佳解决方案的辩论,但双方都没有达成一致意见。
我们有一个产品,可以接收“消息”。每次我们接收一条新消息时,需要将这些数据发送到3个用于处理的服务中。
第1个服务需要数据采用特定格式。为此,我们将数据放入 SQS 中,该服务从其中读取数据。
服务 #2 读取消息字段:[a、b、c],我们以 protobuf 格式发送。
服务 #3 读取消息字段:[a、b、c、d、e],也是 protobuf 格式。
对于服务 #2 和 #3,我们将数据分别发送到 2 个独立的 SQS 队列中。
然而,我们可以将数据发送到 SNS 主题,队列 #2 和 #3 会从中读取数据。为此,我们将服务 #3 的 protobuf 发送,因为它包含了服务 #2 所需的所有字段。
编写服务 #2 的人不希望这样做,因为他不想获取多余的数据,这些数据只会被忽略掉。
编写服务 #3 的人认为,与其将数据以 protobuf 格式发送到 2 个独立的 SQS 队列中,不如将数据发送到一个 SNS 主题中,让服务 #2 直接读取 protobuf #3,并忽略掉不需要的字段,这样更节省资源。
从架构角度来看,谁是正确的?
我们有一个产品,可以接收“消息”。每次我们接收一条新消息时,需要将这些数据发送到3个用于处理的服务中。
第1个服务需要数据采用特定格式。为此,我们将数据放入 SQS 中,该服务从其中读取数据。
服务 #2 读取消息字段:[a、b、c],我们以 protobuf 格式发送。
服务 #3 读取消息字段:[a、b、c、d、e],也是 protobuf 格式。
对于服务 #2 和 #3,我们将数据分别发送到 2 个独立的 SQS 队列中。
然而,我们可以将数据发送到 SNS 主题,队列 #2 和 #3 会从中读取数据。为此,我们将服务 #3 的 protobuf 发送,因为它包含了服务 #2 所需的所有字段。
编写服务 #2 的人不希望这样做,因为他不想获取多余的数据,这些数据只会被忽略掉。
编写服务 #3 的人认为,与其将数据以 protobuf 格式发送到 2 个独立的 SQS 队列中,不如将数据发送到一个 SNS 主题中,让服务 #2 直接读取 protobuf #3,并忽略掉不需要的字段,这样更节省资源。
从架构角度来看,谁是正确的?