【问题标题】:Update individual instance of Azure Cloud Service更新 Azure 云服务的单个实例
【发布时间】:2015-06-10 17:51:46
【问题描述】:

我在 Azure 中托管了一项云服务。由于它使用的数据量,我们有一个每小时的进程,告诉服务将数据缓存到内存中。为了更新缓存,我们使用了一个名为“RefreshData”的公开方法,我们在本地服务器上的计划任务上调用该方法。

最近我更新了云服务以在 2 个实例上运行(这意味着它在 1 个虚拟机上运行,​​现在在 2 个虚拟机上运行)。

我现在注意到的是,我们的数据不再自动刷新为最新数据。这里似乎发生的是:

  1. 运行可执行命令的计划任务在本地服务器上的整点触发
  2. exe 调用http://myCloudService.cloudapp.net/service.svc,得到响应,并启动 RefreshData 方法
  3. 收到刷新请求的实例是“随机的”,这意味着 2 个实例中只有 1 个被告知刷新数据。因此,有时使用我们服务的用户会获取最新的数据,有时可能长达几个小时。

因此,如果我有一个响应 IP 的云服务,但有 2 个实例在其“后面”运行各个 IP,我如何调用此请求并确保两者都根据需要进行更新?

PS - 我知道 Azure 现在可以使用“负载平衡器”工具,如果需要的话,我非常乐意使用一个实例作为我的主实例,并让第二个实例作为故障转移,如果这是一个合理的选项吗?

【问题讨论】:

    标签: wcf azure azure-cloud-services


    【解决方案1】:

    您当前的解决方案设计过度。你有一个外部服务来触发 Azure 服务内部的周期性事件。如果您的 ISP 出现故障并且您暂时无法从一个连接到另一个,该怎么办?

    更好的方法是让每个实例向自己发送一个 HTTP 请求 - 有效地 http://localhost/service.svc 这将消除对外部服务的依赖,并解决通过负载平衡器到达每个实例的问题。

    我假设你有一个网络角色。根据您的 RoleEntryPoint.Run() 是什么,您可以从那里启动单独的线程,也可以在内部运行带有 Sleep() 的无限循环并从那里发送这些 HTTP 请求。

    【讨论】:

    • 完全同意@sharptooth,肯定是过度设计的。我们必须非常快速地进行多实例,并且需要一个“补丁”来适应我们当前的场景,但将在接下来的几周内重新调整它。感谢您的输入
    【解决方案2】:

    你有几个选择:

    1. 为什么您的云服务本身不负责按计划刷新自己的数据?为什么必须从外部告诉他们这样做?在角色实例内部使用计划任务或计时器将是最简单、最可靠的方法。
    2. 使用 InstanceInputEndpoint 以便每个实例获得唯一的端口号。然后您的计划任务将进行两次调用,一次调用http://myCloudService.cloudapp.net:81/service.svc,另一次调用http://myCloudService.cloudapp.net:82/service.svc
    3. 设置实例级公共 IP 地址 (http://azure.microsoft.com/blog/2014/10/22/instance-level-public-ip-address/)。您的计划任务将进行两次调用,一次调用 http://{instanceIP1}/service.svc,另一次调用 http://{instanceIP2}/service.svc。
    4. 使用您现在使用的相同配置,其中负载均衡器后面的随机实例获取刷新命令,然后在内部该实例将使用 InternalEndpoints 与其他实例通信。

    【讨论】:

    • 我会争论 2) 和 3)。如果我有 10 个或 50 个角色实例怎么办? 2) 和 3) 在规模上毫无意义。
    • 正确的 astaykov,但这个具体问题是针对 2 个实例,而不是 50 个。如果问题是关于规模的,那么您是正确的,#2 和#3 不太可行。
    • 感谢@kwill,此时所有对我来说都是有效的选项。很高兴知道我可以添加实例级公共 ip 来进行通信,目前我认为这就是我所需要的。我们的方法是在我们不知道我们将使用多少云服务时建立的,并且它在我们身上发展得相当快,因此我们需要重新设计我们的方法,但目前这是处理它的好方法。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多