Caching 如何开始使用web缓存、CDN和代理服务器?

Caching 如何开始使用web缓存、CDN和代理服务器?,caching,cdn,squid,amazon-cloudfront,proxy-server,Caching,Cdn,Squid,Amazon Cloudfront,Proxy Server,我是一个新手程序员,正在创建一个我(自然)希望能够创造大量流量的初创公司。我正在AmazonEC2上的dotcloud上托管我的django项目。我有一些流媒体(Http,而不是rmtp),所以dotcloud的家伙推荐我使用CDN。我还使用AmazonS3进行存储,因此决定使用AmazonCloudFront作为我的CDN 我需要将注意力转向缓存的时候到了,我迷失了方向,感到困惑。我对这个概念完全陌生。我的全部知识来源于我刚刚读过的一篇教程()和一个令人困惑的周末咨询谷歌。最麻烦的是,我甚至不

我是一个新手程序员,正在创建一个我(自然)希望能够创造大量流量的初创公司。我正在AmazonEC2上的dotcloud上托管我的django项目。我有一些流媒体(Http,而不是rmtp),所以dotcloud的家伙推荐我使用CDN。我还使用AmazonS3进行存储,因此决定使用AmazonCloudFront作为我的CDN

我需要将注意力转向缓存的时候到了,我迷失了方向,感到困惑。我对这个概念完全陌生。我的全部知识来源于我刚刚读过的一篇教程()和一个令人困惑的周末咨询谷歌。最麻烦的是,我甚至不知道我需要为我的网站做些什么

  • CDN和代理服务器之间的区别是什么

  • 我是否可能希望使用缓存服务(例如memcached、redis)、CDN(CloudFront)和代理服务器(squid)

  • 我们的站点是DB驱动的,并生成特定于用户位置的动态生成的列表。这样的网站可以缓存吗?(列表本身可以通过AJAX进行过滤,因此URL可能会保持不变,同时产生很大不同的结果。例如,example.com/some_URL/可能会生成一个包含40个对象的列表,但页面上只显示10个对象。通过单击过滤器,用户可能会在仍然位于/some_URL/的情况下得到10个不同的对象。)

  • 对于高流量、内容丰富的网站,最佳做法是什么

  • 我怎样才能了解这一点?我所看到的每一个地方似乎都理所当然地认为一些基本的东西我还没有作为我自己的基础的一部分。


  • 我不确定我问的问题是否正确。只是觉得很失落。我现在已经建立了95%的整个网站,并认为我只是熨烫出的细节,但缓存似乎是另一个主要的任务。任何指导/建议/鼓励都将不胜感激

    好的,那么让我们从缓存开始

    缓存是指在临时的基础上存储一些东西,这样您就不必每次都执行更昂贵的操作来检索它

    HTTP缓存是关于保存到服务器的往返,如果您只使用默认行为,浏览器将要求服务器“如果您有更新的版本,请向我发送此资源的副本”

    如果您将expires头设置为未来时间,那么浏览器不会问这个问题,因为它知道它可以使用它所拥有的资源的副本

    此级别的缓存可以改善最终用户体验并节省带宽

    根据您的简要描述,HTTP缓存可以帮助处理较小的静态文件(请阅读bookofspeed.com的ch3)

    DB caching as memcached(和redis)用于减少数据库的负载(例如,通过保存操作的结果,然后从缓存中为其提供服务,而不是重复数据库操作)

    在您的情况下,您将基于请求参数在数据检索层进行缓存(并可能确保不会缓存对客户端的HTTP响应)

    CDN与代理服务器

    这些都是真正不同的野兽——CDN是为了让内容与访问者保持距离,从而减少延迟——如果你提供的是大文件,它也会将它们放在为其而优化的网络上,而不是放在你的服务器上,但这样做要付出一定的代价。一些CDN(例如cloud front)具有类似代理的行为,如果没有访问者想要的文件,它们会返回到您的原始服务器

    代理服务器实际上是位于您的服务器和最终访问者之间的服务器-它们可能是您的服务器场(反向代理)ISP网络或访问者网络的一部分

    反向代理实质上是从您的服务器上卸载与最终访问者的通信工作,例如,如果他们的连接速度慢,他们将占用生成页面的服务器更长时间。反向代理也可以位于多个服务器的前面—所有服务器都在做相同的事情或不同的事情,并且代理向外部世界显示一个地址。Squid是您可能使用的代理之一,但Varnish也非常流行

    普通代理只是作为通过它们访问的访问者的缓存。例如,一家公司可能在其互联网网关上有一个缓存代理服务器,以便第一个访问外部站点的人可以检索文件,随后的访问者可以从代理中获取文件-他们可以获得更快的体验,公司可以减少他们的带宽消费

    我猜你目前没有一个高流量的网站,所以你的挑战是了解在哪里花费你的精力,即什么时候需要优化

    我的第一个建议是加入一些真正的用户监控(RUM),即使它是使用Boomerang.js或Pion构建自己的。还可以查看诸如Cacti/Munin/CollectD之类的监控工具,以便了解服务器上的负载


    了解您的用户体验是确定哪些方面需要优化的关键。

    您就是最佳人选!!感谢您的周到、简单的解释。正是这些答案给了我信心,让我不断建立!在接下来的几天里,我将在我的项目上解决一些未解决的问题,然后我将把注意力转向性能/缓存。我绝对会接受你的提议。再次感谢你!