刷新所有Azure实例中的数据的最佳方法是什么?
我有几个实例,每个实例都运行相同的Web角色。在角色启动时,数据从blob存储读取到本地存储。间歇性地,将对网站使用的数据进行新的更新。我希望能够以编程方式通知每个实例,以便将blob存储中的更新数据提供给实例的本地存储,以便每个实例都刷新。
一个想法是编写一个自定义客户端程序来调用Web角色上的Web服务,并传入角色ID进行更新。如果端点是角色ID,则实例将刷新自身。如果不是,则客户端再次尝试,直到所有实例报告它们都被刷新。这是一个很好的方法,还是在Azure中有内置方法来执行此操作?
我考虑过一个单独的线程,间歇性地检查刷新标志,但我担心我的实例会变得不同步。
没有大量数据,所以我可以把它放在Azure缓存中。但是,我担心使用缓存的网络延迟。 Azure缓存是否能很好地处理这个问题?
另一个想法是一个接一个地重启实例(在角色启动时执行刷新操作)。
答案 0 :(得分:5)
我认为您可以这样做的一种可能方法是在配置设置中使用设置(例如时间戳) - 然后您可以以编程方式更新配置并使用RoleEnvironment.Changing事件来监控所有更改实例 - http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.changing.aspx
如果这样做,请确保在所有角色中拦截事件 - 并确保解析更改(查找Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironmentConfigurationSettingChange)并将false返回到Cancel参数以防止实例重新启动
答案 1 :(得分:2)
根据斯图尔特的回答,让我谈谈你提出的技巧:
斯图尔特建议使用配置设置是一个很好的建议。确保您可以在不破坏应用的情况下更新文件。如果无法安全地完成此操作,请不要处理Changing事件 - 只需让角色实例回收。