简介
CDN是大型互联网公司架构不可缺少的一环,也是我们作为JAVA后端开发人员朝架构师方向成长的必经之路,这篇文章让你知晓为什么用CDN,以及CDN解决了什么问题。
场景描述
我们网站中会有很多静态资源,比如js、css、图片等等,就以图片展示为例。
假设我们现在有一个网站:www.tony.com,图片通过/images路径访问,比如访问logo.png的地址是:www.tony.com/images/logo.png。
我们的html页面是这样引用的:
在小型系统、访问量小流量少的系统中这么做是可以的。
大型系统架构中会有三个问题:
第一:带宽压力大。BAT这个级别的用户量,如果都访问一个区域的服务器,网络运营商压力山大,如果真的怼到一个区域,需要单独做网络升级。
第二:系统无法保障高可用。全球用户请求全部怼到一个区域,如果出现运营商级别的网络故障,会导致系统中断服务。比如微信出现的多次故障,都是挖掘机背锅(挖断了光缆)。
第三:用户体验差,响应慢。大型企业面临的是跨区域,跨国家的网络环境,国内的不同地区的网络条件都有很大差别,更何况是全球化的大型企业。比方说,美国用户访问一个部署在四川成都的网站,响应时间肯定要比直接访问美国本土的网站要慢很多,毕竟信号传输的距离都远了不止一星半点。
这是大型高并发系统开发中的技术难点,接下来我们分析一下解决方案。
上次有人问我怎么学的JAVA架构知识,我在这说一下吧,关于分布式高并发系统开发技术的学习,我是按照下面这些知识点去学习的,手上有一些学习的视频资料,有需要的可以私信我,分享给大家。
解决:CDN加速
CDN加速意思就是在用户和我们的服务器之间加一个缓存机制。类似JAVA开发中我们在应用和数据库之间加一个redis分布式缓存。
1、 为什么加了CDN就解决了上面三个问题?
大型的专业CDN服务商全球各地都有服务器,它把用户请求分配到就近的服务器。从而解决了带宽、高可用、响应慢的问题。术业有专攻,我们这里实际就是借助了CDN服务商,当然,BAT这些公司,自己有专门做CDN这块的业务。
2、这个缓存关系怎么对应起来的?
请求 -> http://static.tony.com -> cdn.tony.xxx.com -> 缓存 -> www.tony.com
我们使用CDN之后,服务商会提供一个子域名,比如static.tony.cdn.com,我们可以在后台配置与这个子域名相对于的源域名(www.tony.com),形成一个绑定关系(这个环节你可以自己去看看阿里云,七牛云的CDN操作文档)。
同时,我们系统html页面中访问logo.png的方式也发生了变化,不再是直接访问自己的服务器,而是通过指定域名去访问cdn提供的子域名(static.tony.com 这个子域名 通过CNAME配置把请求转发到CDN子域名)。
这就是大型互联网公司的网站为什么那么快的原因之一,这个CDN加速的环节你明白了嘛?
可以自己去弄个免费CDN玩一下哦,理论+实战掌握的才更牢固
閱讀更多 JAVA老油條 的文章