【问题标题】:Communication between multiple scaled-out Azure AppService instances多个横向扩展 Azure 应用服务实例之间的通信
【发布时间】:2022-11-22 11:46:15
【问题描述】:

我正在运行一个 Azure AppService(目前是 ASP.NET 4.6 WebApi),它总是在至少 2 个实例上运行,并且使用自动缩放扩展到最多 5 个实例。

这个应用程序正在处理存储在 Azure 表中的大量数据,其中很多表都是非常静态的。它们每月更新一次或两次,但在日常操作中会被阅读数千次。当我试图稍微提高该服务的性能时,我正在考虑将这些“静态”表缓存在内存中,并仅在将新更改推送到存储时更新它们。这不会成为问题,因为对存储的更改仅通过相同的 API 通过 /POST 调用进行。

但是现在我想知道在运行我的服务的多个实例时如何处理这种架构。我显然无法预测哪个实例会响应我的 /POST 调用,并且所有其他实例都不会收到更改通知。

我也不想将状态/信号量写入任何类型的共享存储,因为这会破坏试图减少存储调用的全部目的。

有什么提示可以让这些实例以某种方式相互“通信”吗?

【问题讨论】:

    标签: asp.net .net azure-web-app-service azure-table-storage


    【解决方案1】:

    这是常见的场景,您可以使用像 Azure Service Bus 这样的 Message Broker。

    您将设置 one topic and multiple subscriptions,为每个应用服务实例设置一个以侦听新消息。

    当存储更新时,处理请求的实例会在主题中插入一条消息,所有实例都会收到该消息,然后继续从表存储中获取最新的消息。

    这允许一种拉模型,因为实例已经连接到服务总线实例,消息的发送者不必知道有多少实例存在以通知其他人。

    【讨论】:

      猜你喜欢
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2020-11-25
      • 2021-10-13
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      相关资源
      最近更新 更多