如何开始使用 Web 缓存、CDN 和代理服务器? [关闭]
Posted
技术标签:
【中文标题】如何开始使用 Web 缓存、CDN 和代理服务器? [关闭]【英文标题】:How to get started with web caching, CDNs, and proxy servers? [closed] 【发布时间】:2011-11-30 21:00:44 【问题描述】:我是一名新手程序员,正在创建一家我(自然)希望能够创造大量流量的创业公司。我在 Amazon EC2 上的 dotcloud 上托管我的 django 项目。我有一些流媒体(虽然是 Http,而不是 rmtp),所以 dotcloud 的人建议我使用 CDN。我还使用 Amazon S3 进行存储,因此决定使用 Amazon CloudFront 作为我的 CDN。
现在是我需要将注意力转向缓存的时候了,但我迷失了方向。我对这个概念完全陌生。我的全部知识都来自我刚刚阅读的一个教程 (http://www.mnot.net/cache_docs/) 和一个令人困惑的周末花在咨询谷歌上。最令人不安的是,我什至不确定我需要为我的网站做些什么。
CDN 和代理服务器有什么区别?
我是否可能想要使用缓存服务(例如 memcached、redis)、CDN (CloudFront) 和代理服务器 (squid)?
我们的网站是数据库驱动的,并针对用户位置生成动态生成的列表。这样的网站可以缓存吗? (列表本身可以通过 AJAX 过滤,因此 URL 可能保持不变,但产生的结果却大不相同。例如,example.com/some_url/ 可能会生成一个包含 40 个对象的列表,但只有 10 个对象出现在页面上。通过单击一个过滤器,用户最终可能会得到 10 个不同的对象,而仍然在 /some_url/)
高流量、内容丰富的网站的最佳做法是什么?
我如何才能了解这一点?所见之处似乎都理所当然地认为一些基础知识是我自己的基础还没有的。
我不确定我问的问题是否正确。只是觉得很失落。我现在已经构建了整个站点的 95%,并认为我只是在解决细节问题,但缓存似乎是另一项重大任务。任何指导/建议/鼓励将不胜感激!
【问题讨论】:
【参考方案1】:那么我们就从缓存开始吧……
缓存是关于临时存储某些内容,这样您就不必每次都执行更昂贵的操作来检索它。
HTTP 缓存是关于保存到服务器的往返行程,如果您只使用默认行为,浏览器会要求服务器“如果您有更新的版本,请向我发送此资源的副本”
如果您将过期标头设置为未来时间,则浏览器不会询问此问题,因为它知道它可以使用它所获得的资源的副本。
此级别的缓存可改善最终用户体验并节省带宽。
根据您的简短描述,HTTP 缓存可以帮助处理较小的静态文件(阅读 bookofspeed.com 的 ch3)
数据库缓存作为 memcached(和 redis)用于减少数据库的负载(例如),通过将结果保存在操作上然后从缓存中提供它们而不是重复数据库操作)
在您的情况下,您将根据请求参数在数据检索层缓存(并可能确保不缓存对客户端的 HTTP 响应)。
CDN 与代理服务器...
这些是真正不同的野兽 - CDN 旨在让内容靠近访问者以减少延迟 - 如果您提供大型文件,它还会将它们放在针对它而不是您的服务器优化的网络上,但价格为 £££执着于这样做。一些 CDN,例如云前端有一个类似代理的行为,如果他们没有访问者想要的文件,他们会返回到您的源服务器。
代理服务器实际上是位于您的服务器和最终访问者之间的服务器 - 它们可能是您的服务器场(反向代理)、ISP 网络或访问者网络的一部分。
反向代理实质上是从您的服务器上卸载与最终访问者的通信工作,例如如果他们的连接速度很慢,他们会占用一个生成页面的服务器更长时间。反向代理也可以位于多台服务器的前面——要么都做同样的事情,要么做不同的事情,并且代理向外界提供一个地址。 Squid 是您可能使用的一种代理,但 Varnish 也是非常流行的 ATM。
普通代理只是充当那些通过它们的访问者的缓存,例如一家公司可能在其 Internet 网关上有一个缓存代理服务器,这样访问外部站点的第一个人就可以检索文件,随后的访问者可以通过代理获取该文件 - 他们获得更快的体验,公司减少了他们的带宽消耗。
我猜你目前没有高流量的网站,所以你的挑战是了解在哪里花费你的精力,即什么时候需要优化。
我的第一个建议是加入一些真正的用户监控 (RUM),即使它是使用 Boomerang.js 或 Pion 构建您自己的。还可以查看 Cacti/Munin/CollectD 等监控工具,以便了解服务器上的负载。
了解您的用户体验是确定需要优化的关键。
【讨论】:
你就是男人!感谢您的周到,简单的解释。正是这样的答案给了我继续建设的信心!在接下来的几天里,我目前正在为我的项目解决一些松散的问题,然后将注意力转向性能/缓存。我肯定会接受你的提议。再次-谢谢!以上是关于如何开始使用 Web 缓存、CDN 和代理服务器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
ini MODX Cloud中的Web规则(nginx conf),用于CDN,代理缓存资产和statcache