静态资源(图像)Web服务器的架构思想?

时间:2009-07-20 09:25:01

标签: asp.net web-services iis

我们正在考虑删除ASP.NET 2.0 Web应用程序中的所有静态资源(主要是图像),并将它们移动到各自的服务器上。主要的设计要求是速度(因此缓存很重要)和最低级别的安全性(这样人们不能直接下载或撕掉图像)。使用简单的.net 2.0 Web服务立即冲刺,但我担心可能的性能问题和缓存?这是一个有效的问题吗?

那么什么样的建筑设置适合这个法案呢?

其他一些要考虑的要点:

  • WCF还不是一个选项,因为我们还没有转移到.net3.5几个月
  • 开发时间限制为2周

编辑 - 进一步澄清我们的立场:

我真的不需要一个关键任务,超高负载,异步RPC服务器来发送大量数据。我需要的只是某种外观来从我们的主站点发出请求(并利用IIS缓存)来获取单独的Web服务器上的图像,并且能够简单地验证请求以防止基本的盗窃案件。

3 个答案:

答案 0 :(得分:2)

用于高速静态Web服务的山丘之王是异步I / O,至少它最后一次看起来。有一次,有一个名为“Zeus”的Web服务器使用了这种类型的体系结构。它专为服务大量静态内容而设计 - 猜测哪个行业。

线程和同步比你想象的要贵。异步架构在服务器中使用得相当广泛,并且可以非常节省资源。通常,单个线程速度太快,以至于它可以超出多线程服务器。

使用asynccore(Python异步服务器框架)我可以创建一个单线程XML-RPC服务器,它可以连接到数据库,发出一个简单的查询,连接并回复请求比一个多线程服务器更快一个线程池。在单CPU机器上,速度提高了约2.5倍。

滚动自己的异步服务器并不难。我看到他们被分配为二年级计算机科学任务。您可以找到大多数语言的Async Web服务器库 - Python附带标准库中的一个。

最后,我没有太多时间让人们说“做,但必须在两周内完成。”如果您的商业案例只能证明两周的开发时间,那么请考虑不要打扰 - 商业案例太过边缘,除非它真的是低调的结果。我机械地将边缘商业案例转化为无商业案例。如果重要的是给我时间去做真实的。如果不重要的话根本不要这样做。

我们去了 - 只是为您节省了两周的时间和所有持续的维护费用。

答案 1 :(得分:2)

只需在IIS中使用配置为虚拟文件夹的静态文件夹即可。这将提供您需要的一切。缓存,速度等。

使用随机文件夹/文件名可以实现最小的伪安全性。或注入pipline处理程序。当然,您应该禁用文件夹列表等。

答案 2 :(得分:1)

您可以开发简单的HttpHandler(用户友好网址的+ MVC路由)。但这需要手动处理压缩,缓存头,内容部分等。

但是使用此解决方案,您可以自由地实施任何操作,例如跟踪异常下载,正确的用户验证,图像大小调整,图像优化等等。