我有几个子网站,它们基本上是 powerpoint 演示文稿的 html 版本。我需要在父应用程序的每个 Azure Web 角色上安装这些文件,因为这些文件必须来自同一域(在 SSL 环境中正在进行相关的跨框架操作。)
我只是将它们添加到项目文件并上传它们,但这并不能扩展,这些包一个可能超过 5mb,最终会存在大量。
我怎么能/应该考虑在角色启动时从 S3 或 Azure Blob 中提取文件,并在有更新时由我手动触发?
对于点播,父应用程序是一个 c# MVC 应用程序,因此我可以使用该框架内的任何内容来触发作业。
请您参考如下方法:
首先:如果您在 Azure 中运行您的网站,您应该考虑 Azure blob 与 Amazon S3 存储,以避免导出成本(在 AWS 端)和延迟。
现在:就从存储中获取内容而言,这是一种相当常见的模式,因为(正如您已经看到的那样)部署包变得非常大。此外,更新单个文件并不容易,因为您需要重新捆绑/部署包。
在您的 Web 角色中,您有一个 OnStart() 事件,该事件在您的实例添加到负载均衡器之前被触发。这可能是放置您的内容下载代码的最佳位置(或通过触发初始化应用程序或脚本来执行下载的启动脚本)。在 C# 中,一旦您引用了 CloudBlockBlob,就可以执行 DownloadToFile() 或 DownloadToFileAsync() 从您的 blob 中获取内容并存储在本地网络应用程序的内容目录中。还有很多其他方法 - 仅以文件下载为例。
就自动更新而言:没有 blob-watcher 的概念;你需要实现一些东西来识别更新。也许是有关管理 主题的服务总线消息,其中每个实例都订阅该主题,监听有关更新的消息?然后,每次推送新内容时,您可以向标识内容的主题推送一条消息(可能带有子网站名称)。您也可以在 OnStart() 期间启动每个 Web 角色实例中的监听器。
