1. 为什么写这个文章
写这篇文章的起因是想把之前工作学习到的内容都记录下来,深究下有下几个原因:
- CDN涉及的知识点比较多,从技术到业务,可以先做个记录
- 很多业务知识想沉淀,虽然离开这个行业,但是很多经验可以复用
- 给更多有CDN消费需求的同学做下指引
再说一下本人,在独立第三方CDN服务商企业工作四年半,主要负责公司各类运营侧的系统研发。这里不得不感谢老东家,老东家推崇无边界、不对自己设限,这样的环境帮助我养成了了解上下游业务情况的习惯。
2. 请求从发起到看到结果
作者在校招进老东家的时候,甚至今年面试腾讯,都碰到下面这个问题:
用户从浏览器的地址栏输入网址,按下回车之后到界面展示出结果,背后都经历了什么
只能说刚毕业时的作者太年轻,当时回答了
- tcp三次握手
- http连接建立在tcp之上
- http的不同请求
- 请求经过DNS解析
- 后端的web服务器如何运作服务
- 前端如何渲染界面
- tcp四次挥手
- 考虑到面试的是CDN公司,简单的回答如果接入CDN,先从CDN返回结果
进入公司之后,才发现坐着只是简单的回答了框架,可能也就20%~30%,作为一家CDN公司,非常看重成员对网络流程的理解,其实上面的回答可以继续深入
- 本地的host解析,getHostByName的系统调用
- DNS分为localDNS、根域服务器、顶级域名服务器
- 网络的路由转跳
- CDN的多级缓存,回源
上面举了一些可以深入的例子,也是作者再进入公司后,实习期和试用期逐步了解起来的。
说了这么多,其实还是想引出来,CDN其实可以算是现在网络中的基建,网友现在的衣食住行离不开流行的app之外,也离不开CDN,就比如大家经常刷的抖音,背后就有大量的CDN服务在做支持。
3. CDN基本概念
内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。
上面的引用是百度上到处可以找到的解释,如果是有想用CDN的同学,我想可以不用再详细说这块的内容了。
再简单总结下CDN是干啥的
- CDN供应商将要访问的内容缓存到物理位置离用户最近的服务器上
- 用户访问目标资源,DNS通过用户IP定位用户所在区域
- 根据用户所在区域,找到该区域缓存服务器,并返回给用户
- 用户通过拿到的服务器IP,进行服务访问
这上面的描述当然是尽量精简过的,如果还需要详细了解,可以参照标题2的内容进行深入了解。
4. CDN涉及到的开源软件
- Bind--提供name服务
- Nginx--提供7层负载均衡的能力
- Squid--提供缓存服务的能力
- Lvs--提供4层负载均衡的能力
上面这些,除了lvs,其他三个基本是CDN常用到的基础软件,但是上面的软件都比较旧,市场上有其他新的技术已经可以取代了,大家可以自己再去了解。
这里就挑一个扩展说一下lvs的使用场景。其实简单的理解成做负载均衡是可以的,但是实际场景可以解决一些带宽突刺的问题。
由于localDNS没有参照下发的ttl时间进行ns记录的过期,会导致用户请求一直打到非预想的服务器上,这会导致CDN供应商的单服务器或单节点带宽突刺,带宽增高的影响
- 服务器负载
- 节点成本
这里就引入lvs,因为lvs可以挂在vip(这个vip当然不是very important person),是virtual ip,这样可以将vip返回给localDNS,这样即使ttl过期,CDN供应商自己替换vip下的服务器就可以解决带宽突刺
5. 推荐的CDN服务提供商
上面简单介绍了下CDN,那国内好的CDN公司有哪些呢,其实我当然比较想推荐老东家啦,作为CDN服务商,老东家的质量和速度在早期确实在业界掀起一阵清流,pk也是无往不胜,其他厂商也是望尘莫及。
如果是个人用户,推荐云厂商
- 阿里云
- 腾讯云
如果是企业用户,推荐第三方服务商
- 白山云
- 网宿科技
本篇仅代表个人观点,如有错误或不同意见,欢迎留言指正和交流~