1

我处于需要在 Azure WebRole 上高度可用的 WCF 服务的情况。但是有一个小问题,因为该服务将处理需要从 Blob 存储加载大量数据 (3GB) 的请求。这些数据只需要在服务启动后加载!所以,发生的事情是在服务的构造函数中我正在加载这些数据(大约需要 2 分钟)。对服务的每个请求只需要大约 100 毫秒。

我遇到的第一个问题是服务的构造函数只在第一个请求时被调用。所以第一个使用这个服务的人要等2分钟,真的很烦。

第二个问题是每隔一天(有时是半周)服务必须再次加载该数据。所以我想服务类已经被处理了?因此,再次使用该服务的人必须等待 2 分钟,该服务不负责。

我不知道为什么会发生这种情况以及如何阻止它发生。我的服务在 InstanceContextMode.Single 和 ConcurrencyMode.Multiple 中。

任何想法都非常感谢!

4

2 回答 2

1

如果神奇的数据不经常更改,您应该从内部下载它,OnStart()以便在OnStart()返回之前不会将请求分派到角色实例。大约两分钟的额外工作OnStart()不是很好,但它可能是可以容忍的,特别是因为用户不会再注意到延迟了。

于 2013-09-02T12:42:54.293 回答
0

将 3GB 数据加载到辅助角色进程中可能不是一个好主意。您提到“高可用性”,所以当您想要并排启动多个工作角色以负载平衡您的请求时会发生什么。这些工作人员中的每一个都需要托管这些数据。此外,在多实例环境中,Azure 保留关闭您的服务并移动它们并重新启动它们以用于资源分配等目的的权利。

您是否考虑过使用 App Fabric/Windows Azure 缓存来托管您的数据?

http://www.windowsazure.com/en-us/pricing/details/caching/

您可以使用单独的工作角色将其加载到缓存中,并在服务器负载较低的某个已知时间根据需要刷新它。

然后,您可以让所有 Web 服务工作者角色根据需要查询缓存中的数据。

于 2013-09-02T11:26:54.787 回答