我们有一个应用程序,我们想要迁移到Azure进行扩展。在开始之前,有一个地方让我很担心:
我们有一个指向用户的网页。页面上的代码输出到数据库并生成一个HTML报告。新的HTML文档与一堆图表和其他图像一起放在一个临时文件中。然后用户被重定向到这个新页面。
在Azure中,我们永远无法确定用户会因为多种原因被定向到同一台机器:Azure负载平衡器可能会根据容量将用户推送到不同的机器上,或者机器可能会因为问题而取消配置,或者其他原因。
因为这些只是被创建和删除的临时文件非常频繁,我最好只是把我的应用程序的临时目录指向某种共享驱动器,所有的web角色都有读/写访问权限,然后能够映射一个URL到这个共享驱动器。这可能吗?还是会比我想象的更复杂?
我仍然可以让每个实例写到它自己的本地临时目录。它只需要一到两秒钟的时间来喂养它们,所以我可以承担这个实例在这微秒内是否会下降的风险。在这方面的问题是,重定向到临时HTML文件是否将使用http 1.1并维护到该特定实例的连接。
谢谢,jasen
你可能想看两件事:
- 使用支持某种分布式文件系统(基于blob存储)的Windows Azure Web Sites。因此,你在Windows Azure网站"本地"存储的文件将从托管该网站的每个服务器(如果你使用多个实例)可用。
- 从Blob Storage提供文件。因此,不要在每个实例上本地保存HTML文件(或试图让用户坚持使用特定的实例),只需将它们存储在Blob Storage中,并在那里重定向使用即可。
@Sandrino的好东西。更多的想法:
- 将生成的html存储在角色缓存中(可以在您的web角色实例中配置),并从缓存中提供html(跨所有实例共享)
- 利用CDN。您可以将"CDN"文件夹映射到实际的边缘缓存。所以你生成html代码一次,然后它被缓存,直到TTL到期,当你必须再次生成内容。
我认为azure blob是最好的地方来存储你的html文件,可以由多个实例访问。您可以将用户重定向到blob内容,或者您可以编写自定义页面以从blob呈现内容。