标签归档:cdn缓存

互联网巨头进军CDN的真正用意在于抢占云服务入口

 继阿里云CDN从内部业务进化成提供云业务的CDN公共服务之后,腾讯云也发布了CDN
2.0版本,将全面开放自营八年、支撑亿级用户的腾讯自建CDN。至此,在CDN市场上,已经挤下了电信运营商、互联网巨头以及第三方专业公司网宿科技和
蓝汛通信等,而巨头们业务的延伸影响最大的就是先入为主的第三方公司。

CDN(Content
Delivery
Network)即内容分发网络,是一个由地理上分散分布的节点服务器组成的网络。通过在现有的Internet中增加一层新的网络架构,部署边缘服务
器,将网站的内容发布到最接近用户的Cache服务器,使用户可以就近取得所需的内容,实现用户就近访问,有效提升网站的响应速度。

就好比以前买火车票要去火车站,有一天你家附近多了一个火车票代售点,你就可以不用去火车站了,就近购买,缩短了购票时间。

在国内CDN市场上,最早布局的网宿科技和蓝汛通信合计占到了80%以上的市场份额,这两家公司是随着国内CDN市场的发展而起来的。由于网通和电信之
间的网络差异化,借此诞生了作为中间商的网宿科技和蓝汛通信,它们的CDN业务,打通了各大运营商用户访问网络的瓶颈,使得不同运营商用户可以畅通访问到
不同运营商服务器,快捷获得内容服务。

像国内的门户网站新浪、搜狐等,均使用CDN网络加速技术,虽然网站的访问巨大,但无论在什么地方访问都会感觉很快,而一般的网站如果服务器在网通,电信用户访问很慢,如果服务器在电信,网通用户访问又很慢。

对于互联网巨头们来说,由于业务多、流量巨大且技术储备成熟,出于省钱和提高服务质量的考量几乎都会选择自建CDN。

阿里云CDN前身就是淘宝CDN,而腾讯自建CDN也有八年时间,业务加速平台包括静态内容平台、游戏下载平台、UGC加速平台、流媒体平台、动态加速平台等,服务于QQ、QQ空间、微信、腾讯视频、QQ音乐、腾讯游戏等腾讯公司自营业务。

腾讯云CDN高级产品经理就表示,最早的时候腾讯是用的第三方厂商的CDN,随着腾讯业务的发展,才发现第三方提供给的服务不够灵活,包括成本和质量不太满足腾讯的需求,所以从2007年开始我们做CDN这件事情。

中国CDN使用率仅为10%,市场空间巨大

有预计称,随着OTT、手机视频和云服务的增长,未来几年CDN市场将迎来快速增长,到2017年,全球CDN商业服务预期产值为46.3亿美元。

在我国,随着移动互联网的普及,智能设备的便利性,每个人其实每天至少在两到三种网络之间切换,流量需求空前巨大,同时视频业务正迎来爆发性的增长,而视频业务将是CDN市场最主要的增长点。

腾讯云CDN负责人表示,未来整个全球CDN的市值在60亿美元左右,美国和韩国CDN的覆盖率和使用率接近80%,中国的使用率仅为10%,说明中国市场的空间是非常巨大的。

对于中国广阔的市场,无论是互联网巨头还是电信运营商都不想错过。2013年底,中国电信云计算分公司正式推出云加速CDN产品,进军CDN市场;随后阿里云推出CDN服务;腾讯云CDN在经历内部各项业务洗礼之后如今也对外开放。

巨头们的优势在哪?

去年10月份,一位原中国电信高层透露,中国电信、中国联通要共同出资组建一个CDN公司,新成立的公司将由中国电信云计算分公司负责运营。

若合作成真,南电信、北联通的格局将会被打破,中国电信的CDN服务完全可以覆盖全国的,彻底解决‘跨网’问题,电信运营商也能把自己的管道服务优势发挥到最大,这样就会把压力抛给网宿科技和蓝汛通信。

2014年3月,阿里云宣布开拓海外市场,CDN平台正式商用,同时声明将向亚马逊及其中国盟友们正式宣战。阿里云原本为天猫、淘宝等流量巨大的网站提供CDN支持,在全球建立起了上百个优质节点和带宽资源。相对于传统CDN服务商,这可能是它们最大的优势。

腾讯云CDN接入的第一项业务是腾讯网,随后开始适配游戏、QQ农场、视频等,腾讯云CDN的发展与腾讯业务的发展是非常紧密结合的,用王琰的话说,这一路的发展都是通过实践锻炼出来的。

现在微信是腾讯的重中之重,微信所有的加速都是用腾讯云CDN,他表示,凡是能够加速的点我们其实都会做到极致。

“腾讯QQ的月活跃是8亿多,微信的月活跃是5亿多,腾讯的两大社交平台可以覆盖中国所有网民,这个我觉得是现在迄今为止腾讯在技术层面积累最深的一个
点。”腾讯云CDN负责人表示,“每一个用户每一次联网的操作快慢、质量、访问速度,其实都可以帮助我们去学习中国特色的网络哪条链路是快的,哪条链路是
慢的。”

这就相当于腾讯知道全国所有链路的通畅程度。目前,腾讯云CDN已在全球100多个地区,建设超过400个节点,总带宽量超过10Tb,确保用户无论在任何地区,处于何种网络环境下,都可以在最近的节点,就近获取数据。

在固网时代,传统CDN厂商利用缓存技术把数据放到边缘服务器,由此获取稳定的信息和有保障的速度。不过,进入移动互联网时代后,用户获取信息的位置、带宽需求等等成了未知,而这恰恰是腾讯的强项。

而且阿里云和腾讯云进入这一市场,未来很可能在价格上做足文章,这对于单一的CDN厂商来说,会面临不小的压力,拓展业务势在必行。

但也有不同的看法,网宿科技副总裁刘洪涛就表示,运营商和互联网大佬的进入可以让整个蛋糕变大。比如阿里云进入到CDN,让CDN平台蛋糕变大。因为阿
里平台覆盖了很多大量的小微客户,这些小微客户未来就有可能变成CDN的大客户或者是目标客户。这对整个CDN市场是一种互补。

有人说,运营商进军CDN的真正用意在于抢占云服务入口,这是其转型互联网公司的重要支点。那么,作为互联网巨头们云服务的延伸,CDN服务商所扮演的“网络交警”身份,可能更加的诱人。

亚太CDN峰会:迅雷CTO陈磊谈颠覆CDN行业的三大趋势,自建CDN价格只需要1.3万/G/月

以下是2015年3月30日第三届亚太CDN峰会上迅雷CTO陈磊的演讲ppt,这一有关CDN发展趋势的ppt引发了现场的广泛讨论。有钱就是任性,一起来看看陈磊眼中颠覆CDN行业的三大趋势:

640.png

趋势一:颠覆CDN行业的第一大趋势是价格。

    中国CDN行业目前的价格其实是非常高的,相对于美国的CDN的价格而言,差价非常大,而这个差价中有很大一部分是CDN公司的利润。

640.png
    今天整个CDN行业最大的竞争对手其实并不是某一家CDN公司,而是各互联网公司的自建。现存的CDN商业模式下,以现有的成本来看,用户能够在CDN市场买到的最低的价格可能是1.5万/G/月的价格,而实际上很多互联网公司自建只需要1.3万/G/月。

640.png

    中国的CDN购买过程是以传统的方式去购买一个很互联网的产品,就像租房子,整个过程中需要反复和房东以及中介去谈,有的公司付出的价格低,有的公司付出
的价格高,而实际上他们拿到的服务并没有太大区别。造成价格不透明的还有两个非常重要的因素就是回扣和计费方式的复杂,一方面CDN行业中普遍存在“拿回
扣”现象,另一方面各式各样的计费方式下售价也完全不同。

640.png

    大型企业在采购CDN时拥有一定的话语权,可以协商之后用较低的价格采购,但是绝大多数企业在面对多重价格时并没有太多的话语权,没有经验的、或者经验不多的企业无法和CDN服务商斗智斗勇。

640.png

    2015年之后,CDN的市场价格不会再高于1.5万/G/月,这是一个比较合理的价格。

640.png


趋势二:颠覆CDN行业的第二大趋势是技术。

640.png

    未来几年中国的CDN市场将继续保持30%以上的高增长,有很多人觉得CDN增长很快,而实际上,增长可能远不止这么多。今天的农村互联网方兴未艾,很多新兴的互联网企业正在把大流量的业务快速地带到农村。

640.png

    迅雷仅用4个人便在半年时间内自建1T规模的CDN;另一家互联网企业自建3T规模CDN也只用了3年时间和8个人力。这些公司原本做自建的初衷是想要作
为和CDN公司谈价的筹码,做完之后却发现自建的质量和价格都更有优势。CDN公司谈价的筹码,做完之后却发现自建的质量和价格都更有优势。这说明了什
么?说明传统CDN的技术门槛极低,而2015年CDN厂商想要在市场中立足,必定需要在技术上进行变革和突破。

640.png

    我们总是在说最后一公里,但如果把终端的容量更好的运用起来,就能做到从终端到用户之间只有一公里。

640.png

    2015年是一个元年,未来的CDN节点数,将不会以百计、而是以万计、甚至以十万计。视频内容的快速的推出,将会越来越快的替代点播拍完之后等待几天再
发行的模式。现在有的公司有能力把延时做到2秒以下,未来的一两年中,2秒的延时将会变成几百毫秒。广电、游戏公司、体育赛事等,都能实现全网的瞬时直
播。

640.png

    随着VFN和虚拟化技术的发展,CDN技术可以实现更多的功能,比如说允许用户用他的业务逻辑去做防盗链。很多企业选择自建的原因是自建更加具有可控性和业务相关性,这样可以防止盗链,或者更好地压缩流量和视频文件等,这些也将是CDN行业未来的一个技术突破重点。

640.png


趋势三:颠覆CDN行业的第三大趋势是服务心态的转变。

640.png

   行业要越来越互联网化,最重要的是提升服务。现在的CDN行业做得还不够,因为跟CDN服务商的利益产生冲突:CDN服务商在想方设法的帮助用户省流量、省带宽的同时也在提升自身的技术实力。

640.png

   许多人都有过这样的体验:住酒店的时候用WiFi看视频并不顺畅,为什么呢?因为网络有太多用户的时候,丢包和延迟都会增多。如何能够在弱网环境下让用户
很好地去看视频?这需要CDN厂商和手机厂商技术结合。今天在这个领域里面有很多新的技术在涌现,并会成为手机厂商和CDN厂商的共同的重要价值点。

640.png

    迅雷现在和小米有很多合作,在跟小米合作的过程当中,迅雷一直有一个目标就是给小米的用户和小米公司带来价值。在给小米做下载和CDN时,首先尽量不用它
的CDN的采购流量;第二,做到精细化地运营,在下载库、网络协议等方面做大量的技术创新,去提升小米的应用商店的下载速度和完成率。这实际上就是在提升
小米公司的收入,因为应用分发最核心的一点就是成功地分发是可以收费了。

640.png

   综上所述,2015年很有可能是CDN行业重大的变革一年、颠覆的一年,在这一年里价格、技术和服务三个方面都会有所突破。

nginx1.6.2配ngx_cache_purge实现cdn cache服务器

nginx默认安装就会带有反向代理的功能,但想要更好的使用,还得配备frickle.com的ngx_cache_purge模块,用于清除指定URL的缓存。
引用在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“CDN缓存服务器”来使用.

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxf ngx_cache_purge-2.3.tar.gz

切换到nginx目录
cd nginx-1.6.2
./configure –user=www –group=www –prefix=/usr/local/nginx –add-module=../ngx_cache_purge-2.3 –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-ipv6
make;make install

安装完成!

安装完后在/usr/local/webserver/nginx下多了四个目录,分别是fastcgi_temp,proxy_temp,scgi_temp和uwsgi_temp。

proxy_temp这个目录用于存储临时文件,需要看下是否www有权限写入,如果不可写,无法在这个目录生成文件的话,会导致反向代理失败。也可以在nginx的配置里设置proxy_temp_path指定存储临时文件的目录。

nginx配置文件参考:

http {
    #proxy_temp_path   /www/proxy_temp;
    #设置Web缓存区名称为cache_one,内存缓存空间大小为100MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为10GB。
    proxy_cache_path  /www/proxy_cache  levels=1:2   keys_zone=cache_one:100m inactive=1d max_size=10g;
  
     server {
        listen       80;
        server_name  s.9enjoy.com;

            location / {
            proxy_cache cache_one;
            proxy_cache_valid  200 304 12h;
            proxy_cache_key $uri$is_args$args;
            proxy_set_header Host  $host;
            proxy_set_header X-Forwarded-For  $remote_addr;
            proxy_pass http://www.9enjoy.com;
            expires      1d;
                }

            location ~ /purge(/.*) {
                allow              all;
                allow               127.0.0.1;
            #    deny               all;
                proxy_cache_purge cache_one $1$is_args$args;
            }
            access_log /www/logs/s.log access;
        }
    ……
}

这样访问s.9enjoy.com/images/logo.gif,反向代理就会去请求http://www.9enjoy.com/images/logo.gif,保存在内存中,然后输出。
如果logo.gif这个文件发生了变化,则需要刷新缓存,访问s.9enjoy.com/purge/images/logo.gif,就会提示:Successful purge

Key : /images/logo.gif 
Path: /www/proxy_cache/39aaa70038997e0e5e77beaa4392848d
如果这个文件没有被缓存过,则提示:404 Not Found

————————————————————————————————————————-
如果是已经安装过nginx了,请一定注意,使用nginx -s reload重启是无效的!一定要-s stop之后再启动,这样才会使用新版本的nginx!

我今天就没注意这点,在这上面化了N个小时!

/usr/local/webserver/nginx/sbin/nginx -V       
nginx version: nginx/1.6.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) 
TLS SNI support enabled
configure arguments: –user=www –group=www –prefix=/usr/local/nginx –add-module=../ngx_cache_purge-2.3 –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-ipv6

一直以为是装成功了,但反复测试均清除失败,很郁闷!明明开启了访问日志,日志也没记录任何信息!
晚上继续测试时,在nginx_error.log里看到有如下的错误提示:
2011/05/11 21:23:40 [emerg] 20976#0: unknown directive “proxy_cache_purge” in /usr/local/webserver/nginx/conf/nginx.conf:481

才确认这个模块跟本没装上,当然不能用了。后来在一个论坛看到一个人的回复说要restart,但reload是无效的。才想到前段搞nginx升级时就发现,如果不用make upgrade升级,重新编译升级的话,必须停掉,再启动才会使用新的版本!

server配置文件:注意purge的location需要处于被缓存的内容的location的前面,否则会被匹配拦截,无法准确匹配到purge!
刷新缓存办法:
wget -S -O /dev/null –header=”host:www.dnsdizhi.com”  http://127.0.0.1/purge/ngx_cache_purge.html
返回200就是刷新缓存了,
wget -S -O /dev/null –header=”host:www.dnsdizhi.com”  http://127.0.0.1/ngx_cache_purge.html 看看是不是更新了?

更加详细配置说明参考:

server {
listen 80;
server_name zhang.ge;
#缓存清理模块
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.1.101; #此处表示允许访问缓存清理页面的IP
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
#缓存html页面,可以缓存伪静态【这是亮点!】
location ~ .*\.html$ {
proxy_pass http://127.0.0.1:8080;
proxy_cache_key $host$uri$is_args$args;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
#状态为200、302的缓存1天
proxy_cache_valid 200 302 1d;
#状态为301的缓存2天
proxy_cache_valid 301 2d;
proxy_cache_valid any 1m;
#浏览器过期时间设置4小时
expires 4h;
#忽略头部禁止缓存申明,类似与CDN的强制缓存功能
proxy_ignore_headers “Cache-Control” “Expires” “Set-Cookie”;
#在header中插入缓存状态,命中缓存为HIT,没命中则为MISS
add_header Nginx-Cache $upstream_cache_status;
}
#图片缓存设置,如果不是使用了Nginx缩略图功能,这个可以不用,效果不明显
location ~ .*\.(gif|jpg|png|css|jsico)(.*) {
proxy_pass http://127.0.0.1:8080;
proxy_cache_key $host$uri$is_args$args;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 30d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 30d;
proxy_ignore_headers “Cache-Control” “Expires” “Set-Cookie”;
add_header Nginx-Cache $upstream_cache_status;
}
#动态页面直接放过不缓存
location ~ .*\.(php)(.*){
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#设置缓存黑名单,不缓存指定页面,比如wp后台或其他需要登录态的页面,用分隔符隔开
location ~ ^/(wp-admin|system)(.*)$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#缓存以斜杠结尾的页面,类似于CDN的目录缓存,如果存在问题请取消缓存机制
location ~ ^(.*)/$ {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 1d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 1h;
proxy_ignore_headers “Cache-Control” “Expires” “Set-Cookie”;
add_header Nginx-Cache $upstream_cache_status;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

设置http响应头Cache-Control及Pragma,增加CDN cache命中率

最近在折腾CDN cache命中率。然后就发现在伪静态环境下,cdn缓存命中率非常低,一番折腾后发现如果源站的http头部包含一些不缓存的信息,那么CDN”也许“会相应的继承源站发出的HTTP状态。
通常喜欢用军哥LNMP安装包的朋友会发现,在动态及伪静态的环境中,HTTP头部信息会包含Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 和 Pragma: no-cache,“可能“就是这种状态影响了CDN对源站缓存的判断。

如何去掉Cache-Control及Pragma在http头部中的状态呢?
如果没有看到此文的话,你会非常痛苦的认为是网站程序本身所发出的状态,然后一番查找修改后发现依然无解,我理解这个过程,因为我就是这么干的。非常之痛苦。。。。

其实解决Cache-Control: no-store,no-cache.....和Pragma: no-cache很简单,只需修改php.ini中的session.cache_limiter参数,军哥lnmp默认值是nocache,只要修改为none即可解决这个HTTP状态中的缓存问题。耶!耶!耶!耶!耶~~~~~~~~~


session.cache_limiter = nocache

改为 

session.cache_limiter = none

重启apache