`

自建CDN技术选型: squid varnish nginx

阅读更多

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

使用CDN有3个好处

  • 优化跨ISP网络访问速度,在国内大联通和大电信之间是世界上最远的距离,在国外,中国和其他地区很平行,用cdn可以优化全球响应速度
  • 节约流量成本,CDN机房都一般都放在带宽便宜的小城市,1M的费用大概是BGP机房的1/3
  • 快速提升性能,对于结构复杂的系统,部署CDN可以在不改动代码段情况提升网站整体性能,立竿见影

市面上有很多CDN供应商,比较著名有

  • Akamai (全球最大)
  • chinacache
  • webluker
  • cloudflare
  • chinacache

如果需要自己搭建CDN系统,有3种主流方案可以选择

  1. squid
  2. varnish
  3. nginx+memcache
软件存储模式性能配置复杂度purge效率共享存储
squid 硬盘 较高 简单 可以并联,但是配置复杂
varnish 硬盘/内存 比较简单 不能
nginx 内存 需要编程 可以,支持一致性存储

典型用户

存储共享

对于大规模网站的CDN,存储共享是个强需求。为了消除单点,不可能只使用一台CDN服务器,如果只是简单做负载均衡,每个CDN server 上需要存储全部数据,存储利用率太低了

  • squid支持几个实例并联,实际使用的人不多
  • varnish 只能用单实例
  • nginx+memcache 天然的分布式存储

当然,采用squid/varnish 也有解决办法: 需要在它们前面部署一个支持url hash的负载均衡设备(硬件,软件均可,比如说haproxy)

内存存储的代价

如果CDN把缓存放在内存当中,固然性能会有提升,但是当服务遭遇故障重启之后,全部数据都会丢失需要重建,这个时候

  1. 会给后端应用服务器带来很大的短时压力
  2. 服务需要较长的时间才能完全恢复

而实际运行当中,由于各种原因,CDN服务重启的概率相当高

一个很悲剧的事实

对动态网页使用CDN,无论squid还是varnish都不能直接用,都需定制代码。

例如 varnish 会判断response的header,如果发现里面有set-cookie项,它就认为这个页面不应该被缓存。对于规模庞大/OOP封装严密的网站,普通程序员根本意识不到调用哪一个fucntion会输出set-cookie,这个会导致CDN命中率急剧降低。但你也无力去对每行代码做code review,没有办法,只能去修改varnish代码了,这又引入一个新的维护成本. Squid也有这个问题

purge效率

purge就是CDN删除缓存项的接口,国内的UGC网站,因为严厉的内容检查制度和泛滥的垃圾广告,删帖子删图片特别频繁,某些网站可能高达40%(发100个贴,有40个帖子可能被删除或者修改),所以对purge的效率有要求。

squid和varnish purge效率都达不到国内这种强度要求,nginx+memcache purge性能 要好很多

遇到突发事件,你要不及时删除指定的链接,你的老板就可能会去拍下面这种相片

老板入狱拍照

某门户网站曾经发生过,某个链接怎么也删不掉,一慌张把CDN所有缓存都删了重启,导致内网流量瞬间暴涨,各业务线的服务器全线报警,集体骂娘。

推荐CDN方案

  1. 中小型网站直接买服务就好,现在CDN已经进按需付费的云计算模式了,性价比是可以准确计算的
  2. 外地部署单点,推荐用squid
  3. 准备在公司内部实施私有云战略,推荐nginx+memcache

不建议使用varnish

以前的工作中,我力主把一个CDN集群从squid迁移到varnish,持续运行了2年,就是如上感受,严重不推荐.

分享到:
评论

相关推荐

    squid、varnish、ngx_cache的性能测试对比报告

    首先,从测试环境来看,本次测试所使用的Squid、Ngx_cache(也就是Varnish)、Nginx_cache均运行在具有单硬盘资源的服务器上,并为缓存分配了180G的存储空间。这意味着测试结果更侧重于考察三者在单盘存储条件下的...

    CDN加速技术详解.zip

    它可能是一个开源产品,如Squid、Varnish或Nginx,这些服务器软件常用于构建CDN系统,因为它们支持高效的缓存和内容分发功能。 6. X-Cache-LookupHit:此字段可以分为“From Upstream”、“From Disktank”和“From...

    在varnish、squid、apache、nginx中选出一个更好的缓存服务器

    在varnish、squid、apache和nginx这四个选项中,每种都有其独特的特性和适用场景。 首先,Varnish和Squid是专门设计为缓存服务器的。Varnish以其高效的“Visual Page Cache”技术著称,它优化了内存管理,避免了...

    CDN技术详解

    - **其他工具**:如Varnish、Squid等,也可以用作缓存加速。 #### 六、未来发展趋势 1. **边缘计算**:随着5G等高速网络技术的发展,边缘计算成为CDN领域的一个重要趋势。通过在更靠近用户的边缘节点上部署计算...

    Nginx防攻击的调研

    5. **动静分离**:通过缓存(如Nginx的cache,或varnish、squid)将动态请求转化为静态资源,减轻服务器压力。 6. **购买DDoS防火墙**或使用CDN服务,分散攻击流量。 **问题四:设置禁止访问项** 1. **禁止访问特定...

    9.2: 网站架构演变 、 LNP+Mariadb数据库分离 、 Web服务器集群 、 总结和答.docx

    5. 缓存服务器与业务模型:可以使用 varnish、squid 或者 nginx 进行缓存,将数据缓存到距离用户更近的位置,构建 CDN(内容分发网络)架构。 二、LNP+Mariadb 数据库分离 LNP+Mariadb 数据库分离是指将数据库与 ...

    高性能高并发服务器架构

    同时,这些服务器可以与开源缓存系统如Varnish或Squid配合,提高静态内容的访问速度。对于动态内容处理,开源脚本语言PHP、Python、Java等则扮演着重要角色。 在谈论大型高负载网站服务器的优化心得时,通常需要...

    分布式web技术介绍 分布式web服务框架 共19页.pptx

    同时,缓存机制如Varnish、Squid或Nginx被用来加速静态内容的分发,减少服务器的压力。 Web层由Web容器(如Jetty、Ketty、Tomcat、JBoss)构成,负责运行Java Web应用。Session管理是另一个关键点,确保用户在不同...

    互联网动静分离架构

    例如,静态页面可以使用CDN、nginx、squid/varnish等技术来加速,而动态页面可以使用分层架构、服务化架构、数据库、缓存架构等技术来提高访问速度。 页面静态化是一种将原本需要动态生成的站点提前生成静态站点的...

    易度云查看产品介绍书ppt

    转换后的数据通过CDN分布式缓存系统进行分发,减少带宽消耗,并利用Squid、nginx、varnish等工具进行管理和整合,实现大负载处理、容错和负载均衡。 【运维监控后台】 监控后台提供对队列拥塞的查看和处理,可以...

    中大型网站架构演变之路

    4. **静态缓存服务器**:为了加速静态资源的加载速度,部署了专门的静态缓存服务器,如Varnish或Squid等。这些缓存服务器可以将经常访问的静态资源缓存在内存中,大大减少了对后端服务器的请求次数。 5. **分布式...

    tengine 淘宝web服务器

    同时,Tengine还支持与Squid、Varnish等缓存服务的集成,提供更高级别的缓存策略。 6. **模块扩展** Tengine提供了一系列额外的模块,如动态脚本语言支持(如Lua、Perl),日志统计分析模块,Web管理界面,以及...

    网站架构之负载均衡必须要考虑的八个方案

    利用反向代理服务器(如Squid、Varnish等)可以在应用层面对动态内容进行缓存,减轻后端服务器的压力。动态内容缓存通常结合条件缓存、缓存穿透预防等高级技术,确保既能快速响应请求,又能提供最新鲜的数据。 ### ...

Global site tag (gtag.js) - Google Analytics