用Blob存储替换Azure Service Bus

时间:2018-07-10 12:32:19

标签: azure azure-storage-blobs azureservicebus

我使用Azure Service总线已有两年了。我前面有一个API,用于将消息发布到服务总线主题。关于该主题,我有两个订阅,每个订阅都使用Azure函数。一个将消息写入Blob存储,另一个将数据保存在数据库中。

              /--- subscription 1 -> Function 1 -> database
API -> topic <
              \--- subscription 2 -> Function 2 -> blob storage

我在Azure Service Bus上的性能遇到很多问题,最终升级到高级Service Bus计划。它运行良好,但是非常昂贵,考虑到我只是用它来将消息保存到两种存储类型。

我正在考虑切换到另一种架构的可能性,该架构中我的API将所有消息存储在blob存储中。然后创建一个函数,以在Blob存储中触发一个新的Blob并将结果保存到数据库中。

API -> blob storage -> function -> database

这将是一种便宜得多的方法,但是我在实施此方法时有些谨慎。使用服务总线,我可以通过多种方式来优化性能,例如升级到更大的计划,分批使用消息等等。使用Blob存储方法,我将所有鸡蛋都放在Blob存储的篮子中,并表现出来。

任何有想法,相似经验或有贡献的人吗?

1 个答案:

答案 0 :(得分:0)

如果您的用例需要将数据存储在blob和数据库中,则只需使用Azure Function with Blob Trigger即可。

使API无需将消息发布到Topic,而是将消息保存在Blob存储中。每当将新消息存储在blob中时,就会触发该函数,在那里您可以将消息保存到数据库。

我在其他情况下使用了Blob触发器。我的API将一个zip文件上传到blob,我有一个带blob触发器的逻辑应用。每当触发时,逻辑应用程序就会向服务总线队列发送一条消息。我的工作人员角色侦听来自Service Bus Queue的消息,并处理zip文件并将其存储在我的数据库中(我将blob URL作为消息主体发送)。我将其替换为带有Blob触发器的Azure Function,并且工作正常。