CDN(Content Delivery Network):内容分发网络。CDN本质上是一套分布式缓存集群,范围可以是全国甚至全球。
通过云厂商提供的CDN服务,将用户的静态资源存储在不同区域的边缘节点服务器的内存中,当用户发起静态资源请求时,DNS服务器会根据就近原则将IP解析到离用户最近的一台存储服务器的IP地址(通过设置域名别名CNAME),这样客户端到服务端的访问距离就近了,提升访问和响应的速度。
通俗来说,CDN可以解决资源访问慢的问题。
阿里云的CDN产品:https://www.aliyun.com/product/cdn
单线带宽
CDN大多数使用单线带宽,CDN公司通过智能DNS解析判断运营商来源,进而重新分配最近的适合用户访问的某个单线线路。
智能DNS调度
最主要的技术,在于对用户的客户端IP实现精准定位,对IP进行负载均衡,根据就近原则将用户调度到最佳最合适的服务器节点。
缓存服务器
CDN服务器中的资源来自于源站服务器,所以应该给CDN设置缓存过期时间,防止源站数据更新了,CDN服务器数据没有更新,用户看到的还是旧资源
资源更新的方式有两种:
省钱
使用CDN比使用BGP机房省钱。
提升用户访问体验
通过各地的缓存节点,解决资源访问慢的问题
阻挡大部分网络攻击
CDN提供防盗链功能
盗链
一般在网上浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个HTTP请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行,如果发现其中还有图片,那么客户端的浏览器会再次发送一条HTTP请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器回将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送HTTP请求才能够被完整的显示。
基于这样的机制,就会产生盗链问题,如果一个网站中将其图片源链接到其他网站的图片信息上,而不是自己的网站服务器中,那么一个没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然对于那些被利用了资源的网站是不公平的。
一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
防盗链
在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面,只允许从本站访问资源,而不允许从其他网站访问本站的资源,从而实现防盗链的功能。
- 准备好一个源站服务器,以及源站域名apecome.com
- 创建好一个加速域名
- 创建CDN域名
指定需要加速的域名alicdn.apecome.com , 源站信息
- 修改 【加速域名】的类型,从A记录改为CNAME
修改DNS设置即可
- 如何判断,静态资源是否使用到了CDN
查看是否有CNAME:通过ping 命令或者 dig 命令,查看是否解析到CNAME指定的域名。
参考链接:轻松应对IDC机房带宽突然暴涨问题_51CTO博客
IDC带宽被占满的原因很多,常见的有:
CDN带宽异常,源站没异常。
这类问题基本都是缓存在CDN的数据被频繁访问引起的。解决方法见结尾案例。
CDN带宽异常,源站也异常。
可能原因如公司做推广,大量数据访问,热点数据cache里不全。或CDN问题导致数据回源(有关CDN回源率问题及提升回源率经验,以后再和大家分享)。影响就是带宽高,后端静态服务器及图片及存储压力大(解决办法参考7层门户网站架构案例文章 http://oldboy.blog.51cto.com/2561410/736710)
分析了问题的可能原因,就好比较排查了。
DDOS问题的解决老男孩已经写了原创文章( http://oldboy.blog.51cto.com/2561410/845349),提供了17条解决经验思路,供大家参考,这里就不提了,
这个问题的解决比较简单,可能有的朋友说,看看服务器流量,哪个机器带宽高处理下就好了。其实不然,实际解决比这复杂得多,带宽打满,所有监控都是看不到的。
比较好的思路,是联系机房确定机房自身无问题后(机房一般没法帮我们的),请机房断开连接外部IP服务器的网线,如负载均衡器,仅保留××× SERVER,然后断掉内部服务器出网光关的线路,切断外发流量源头。
接下来查看监控流量服务,判断外发流量的服务器,然后进行处理。
其实,这个问题的发生及快速定位和很多公司的运维规范、制度关系很大,老男孩在给一些公司做运维培训分享时发现这个问题很严重(表象很好,内部运维规范、制度欠缺很多),大家都讨论的很深入,实际用的还是和聊的有差距。。
比如有的公司开发直接FTP连接随时发布代码,或者由开发人员负责定时多次上线。而运维人员又不知晓,结果导致问题发生定位时间长,这点建议各公司的老大多思考下。
老男孩的运维思路是,如果把网站机房比喻为一座房子,那首先要堵住后门(内部),其次是监控好前门(做好安全,留个小窗户给外面人看,即80端口服务,同时安排站岗值班的)。
网站的无休止的随时随意发布代码,对网站的稳定影响是至关重要的。对运维人员对故障的定位快慢也很关键。根据老男孩不完全调查,约50%以上的重要运维故障都是程序代码导致的,这也是老男孩给企业做培训分享时,灌输建议CTO的,多把网站稳定的责任分给开发,而不是运维。如果这个思想不扭转,网站不稳定状况就难以改变。
1 | 这个属于网站的基本优化了,apache,lighttpd,nginx都有防盗链的方案,必须要搞。说到这也提个案例,老男孩的一个学生,到了企业工作,发现人家网站没有防盗链,结果上来没有周知老大,直接做防盗链了,然后美滋滋的当时还给我留言,说给公司搞防盗链了,很有成就,结果导致公司对外合作的业务,都是小叉子了,幸亏发现的及时没出大问题。 |
最常见的就是购买CDN服务,如:CDN新建一个节点(可能数十机器),直接来我们IDC原战来抓数据(有的做好点的夜里来抓)。把原站抓的流量暴涨,严重的导致服务宕机。几家CDN公司,都有过这样的问题。这点希望CDN公司看到了,能改善,毕竟用户上帝嘛。
当然和电信,联通,GOOGLE,BAIDU,词霸等公司的合作,也会有流量暴高的情况,这里面包括了为合作的站搜索引擎爬虫爬数据的问题。有时虽然带宽流量不高,但是服务器或数据库撑不住了,搜索引擎专门喜欢爬我们的站内搜索,DISCUZ,CMS等早期的开源程序的搜索都是全站like %%方式去数据库搜索的,几个爬虫过来,直接就挂掉了,当然这不是本文要讨论的,解决方案以后再聊。