第8章 构建大型网站的其他要素
8.1 加速静态内容访问速度的CDN
CDN是Content Delivery Network的缩写,意思是内容分发网络。CDN的作用是把用户需要的内容分发到离用户近的地方,这样可以使用户能够就近获取所需内容。
整个CDN系统分为CDN源站和CDN节点,CDN源站提供CDN节点使用的数据源头,而CDN节点则部署在距离最终用户比较近的地方,加速用户对站点的访问。
CDN其实就是一种网络缓存技术,能够把一些相对稳定的资源放到距离最终用户较劲的机房,一方面可以节省整个广域网的带宽消耗,另外一方面可以提供可以提升用户的访问速度,改进用户体验。我们一般把一些相对静态的文件放到CDN中。
我们通过浏览器访问一个网站的过程大致如图所示。
(1)用户向浏览器提交要访问的域名。
(2)浏览器对于域名进行解析,得到域名对应的IP地址。
(3)浏览器向所得到的IP地址发送请求。
(4)浏览器根据返回的数据显示网页的内容。
而在有了CDN以后,用户通过浏览器访问网站的过程会产生一些变化,如图所示。
(1)用户向浏览器提交要访问的域名。
(2)浏览器对域名进行解析,由于CDN对域名解析过程进行了调整,所以得到的是该域名对应的CNAME记录。
(3)对CNAME再次进行解析,得到实际IP地址。在这次的解析中,会使用全局负载均衡DNS解析,也就是我们需要返回具体IP地址,需要根据地理位置信息以及所在的ISP来确定返回的结果,这个过程才能让身处不同地域、连接不同接入商的用户得到最适合自己访问的CDN地址,才能做到就近访问,从而提升速度。
(4)得到实际的IP地址以后,向服务器发出访问请求。
(5)CDN会根据请求的内容是否在本地缓存进行不同处理:
- 如果存在,则直接返回结果。
- 如果不存在,则CDN请求源站,获取内容,然后再返回结果。
8.2.1 分布式文件系统
对一些图片、大文本的存储,使用数据库就不合适了。可以考虑的一个方案是采用NAS网络存储设备,不过NAS本身的IO吞吐性能及扩展性在大型网站中会表现出比较明显的不足;另外一个方案是采用分布式文件系统。
GFS主要由三部分构成,GFS Client(客户端)、GFS Master(在有些系统中被称为Namenode)、CFS chunkserver(在有些系统被称为DataNode)。
8.3.1 爬虫问题
对于全网搜索来说,爬虫是一个非常关键的系统,需要通过爬虫去获取被检索的网站的网页信息。在站内搜索中,我们同样需要可以发现,获取要被搜索的内容的系统(这个系统在站内一般不称为爬虫)。对于内部搜索来说,进入搜索系统中的数据的来源、格式及要求更新的频率都是已知的,这为我们根据数据变化来更新索引带来了很大的便利。
跟新索引的方式一般有如下两种。
- 定时从数据源(一般是关系型数据库)中拉取,我们称之为增量Dump,这要求数据库记录中有一个记录变更时间的字段,否则就无法获取一段时间内变化的数据,而这个字段需要有索引,否则会使效率变得很低。增量Dump开始前,需要进行全量的Dump构造初始化的数据。增量的时间间隔一般会在分钟级,这会引起明显延时。
- 通过数据变更的通知,即使通知搜索引擎构建索引,及时性会很好,不过带来的系统压力也比较大。因此这种方式主要用在对实时性要求很高的场景。
8.5 发布系统
8.7 依赖管理系统
