如何开始使用Web缓存,CDN和代理服务器?

Mat*_*lla 25 caching cdn squid proxy-server amazon-cloudfront

我是新手程序员,建立一个我(自然)希望创建大量流量的创业公司.我在dotcloud上托管我的django项目,该项目位于Amazon EC2上.我有一些流媒体(Http,但不是rmtp)所以dotcloud家伙建议我选择CDN.我也使用Amazon S3进行存储,因此决定将Amazon CloudFront作为我的CDN.

现在是我需要将注意力转向缓存的时候了,我迷失了方向.我对这个概念完全陌生.我的知识的整个范围来自我刚刚阅读的教程(http://www.mnot.net/cache_docs/)和一个令人困惑的周末花在咨询谷歌.最令人不安的是,我甚至不确定我需要为我的网站做些什么.

  1. CDN和代理服务器有什么区别?

  2. 是否有可能我想使用缓存服务(例如memcached,redis),CDN(CloudFront)和代理服务器(squid)?

  3. 我们的站点由数据库驱动,并生成特定于用户位置的动态生成列表.可以缓存这样的网站吗?(列表本身可通过AJAX过滤,因此URL可能保持不变,同时产生大不相同的结果.例如,example.com/some_url/可能会生成40个对象的列表,但只有10个出现在页面上.点击一个过滤器,用户可以在/ some_url /)时最终得到10个不同的对象

  4. 高流量,丰富内容网站的最佳做法是什么?

  5. 我该如何了解这一点?我看起来到处都似乎理所当然地认为我还没有作为自己基础的一部分的一些基础知识.

我不确定我是在问正确的问题.只是感觉非常迷茫.我现在已经构建了整个网站的95%,并认为我只是在解决细节,但缓存似乎是另一项重大任务.任何指导/建议/鼓励将不胜感激!

And*_*ies 46

那么让我们从缓存开始......

缓存是指临时存储内容,这样您就不必每次都执行更昂贵的操作来检索它.

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

如果您将expires标头设置为将来的时间,那么浏览器不会询问此问题,因为它知道它可以使用它所获得的资源副本.

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

从您的简要说明中,HTTP缓存可以帮助处理较小的静态文件(阅读bookofspeed.com的ch3)

数据库缓存作为memcached(和redis)用于减少数据库的负载(例如),通过将结果保存在操作上,然后从缓存中提供它们而不是重复数据库操作)

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

CDN与代理服务器......

这些是真正不同的野兽 - CDN是关于保持内容贴近您的访问者以减少延迟 - 如果您提供大型文件,它也会将它们放在针对它优化的网络而不是您的服务器上,但是这样做会带来一定的价格那.一些CDN(例如云端)具有代理行为,如果他们没有访问者想要的文件,他们会返回到您的原始服务器.

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

反向代理本质上是从服务器上卸载与最终访问者的通信工作,例如,如果他们的连接速度很慢,他们将占用生成页面的服务器更长时间.反向代理也可以位于多个服务器的前面 - 要么全部做同样的事情,要么做不同的事情,代理向外界提供一个地址.Squid是你可以使用的一个代理,但Varnish也是非常受欢迎的ATM.

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

我猜你现在没有高流量网站所以你面临的挑战是了解在哪里花费你的努力,即什么时候需要优化.

我的第一个建议是获得一些真实的用户监控(RUM),即使它是使用Boomerang.js或Pion建立自己的.另请查看Cacti/Munin/CollectD等监控工具,以便了解服务器的负载情况.

了解用户体验是确定需要优化的关键.