我有一个托管在 Azure 中的云服务。由于它使用的数据量很大,我们有一个每小时的进程告诉服务将数据缓存到内存中。为了更新缓存,我们使用一个名为“RefreshData”的公开方法,我们在本地服务器上的计划任务上调用该方法。
最近我更新了云服务,使其在 2 个实例上运行(这意味着它原来在 1 个虚拟机上运行,现在在 2 个虚拟机上运行)。
我现在注意到的是,我们的数据不再自动刷新为最新数据。这里发生的事情似乎是:
- 在本地服务器上整点触发运行命令可执行文件的计划任务
- exe 调用 http://myCloudService.cloudapp.net/service.svc ,获取响应,并启动 RefreshData 方法
- 收到刷新请求的实例是“随机”的,这意味着 2 个实例中只有 1 个被告知刷新数据。因此,有时使用我们服务的用户会获取最新数据,有时可能会过时几个小时。
因此,如果我有一个响应 IP 的云服务,但有 2 个实例在其“后面”运行且具有单独的 IP,我如何调用此请求并确保两个实例都根据需要进行更新?
PS - 我知道 Azure 现在有“负载均衡器”工具可用,如果需要,我可以非常轻松地使用一个实例作为我的主实例,并让第二个实例作为故障转移,如果这是一个可行的选项?
最佳答案
您当前的解决方案设计过度。您有一个外部服务只是为了触发 Azure 服务内部的定期事件。如果您的 ISP 出现故障并且您在一段时间内无法从一个 ISP 连接到另一个该怎么办?
更好的方法是让每个实例有效地向自身发送 HTTP 请求 http://localhost/service.svc这将消除对外部服务的依赖,并解决通过负载均衡器到达每个实例的问题。
我假设您有一个网络角色。取决于您的RoleEntryPoint.Run()您可以从那里启动单独的线程,或者只是运行一个带有 Sleep()
的无限循环,并从那里发送这些 HTTP 请求。
关于wcf - 更新 Azure 云服务的单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763757/