定义一个具有不同类型的主题还是为每种类型定义类型化的主题更好?

时间:2019-09-04 09:25:16

标签: google-cloud-pubsub

定义一个具有不同类型的主题或为每种类型定义类型化的主题更好吗?

例如

[topic]
foo

[message]
{
   type: 'x',
   data: [1,2,3]
}

OR

[topic]
foo-x

[message]
{
   data: [1,2,3]
}

根据pub/sub-pricing,由于发送和传递的总消息相同,因此由于消息大小,后一种情况似乎便宜一些。

但这只是定价,我认为可能会有一些经验设计或方案来定义消息。在这种情况下可以考虑什么?

2 个答案:

答案 0 :(得分:1)

这里没有正确或错误的答案。在某种程度上,这取决于您的订户的性质。他们将对所有类型的消息还是仅对一种类型的消息感兴趣?如果是前者,则消息中带有类型的单个主题可能会更好。如果是后者,则单独的订阅可能会更好。另外,您有几种类型?对于数十种或更多种类型,管理单个主题可能会产生大量开销。

价格可能不是一个因素。如果您的消息很大,那么价格将取决于消息的内容。如果您的邮件很小,则每个请求的最低帐单金额为1KB。该类型成为唯一因素的唯一方法是,如果您有非常小的消息,但对它们进行批处理以使它们至少为1KB。

如果您决定对消息中的类型进行编码,请考虑将其放入消息attributes中而不是消息数据中。这样,您可以查看类型而无需解码整个消息,如果您想立即确认某些类型的消息而不是对其进行处理,这将很有帮助。

答案 1 :(得分:1)

首选第二种解决方案。确实,如果您想在特定主题上插入处理(函数,Cloud Run,AppEngine或其他计算平台),则可以执行此操作,因为该主题已键入。

如果未键入主题,则必须在过程中实现过滤器以执行以下操作:“如果我的类型是X,则退出”。而您为此付费。例如,对于功能和Cloud Run,您将按请求和处理时间向您收费,以100毫秒为单位的最小配置->对于简单的IF来说太多了

但是,如果要在多个主题上插入相同的功能,则必须复制功能(除非使用HTTP触发器)

希望获得帮助!