如何让静态博客响应更快

0x00 背景

粗略的记录一下从各个方面让博客有更快的响应速度

0x01 基本知识

一次HTTP的请求过程示例:

用户在浏览器输入luyublog.com后浏览器处理流程(简略版本,不考虑具体交互)

  1. 浏览器查询本地DNS缓存获取luyublog.com的IP,若没有则查询操作系统DNS缓存,若还没有则请求公共DNS服务器(114,阿里等)
  2. 获取到网站IP地址后通过TCP建立连接
  3. 通过HTTP协议进行报文交互

0x02 可能的优化点

了解基本流程后就可以一步步进行优化,例如:

  1. 用户浏览器DNS解析步骤
  2. TCP连接建立过程
  3. 服务器处理速度

DNS解析优化

DNS解析优化的关键点有两个:

  1. 解析速度
  2. 解析到最合适的IP地址(如果你有多个服务器)

DNS解析速度

若本地DNS缓存没有命中的话,DNS解析本质上还是HTTP请求,所以理论上国内的DNS服务肯定是优于国外的,国内出名的有DNSPOD,国外的有CloudFlare。具体要用哪个需要自行判断。

DNS智能解析(前提:有多IP)

DNS智能解析的意思是将域名解析到最合适的服务器IP上,例如距离用户最近的服务器或响应最快的服务器,智能解析这部分主要有:

  • 地域解析(GEODNS)
  • 运营商线路解析
  • 任播(AnyCast)

DNS地域解析(GEODNS)

  • 前提:有多服务器IP 其中1.1.1.1位于亚洲 2.2.2.2位于美洲
  • 例子:若亚洲用户访问luyublog.com则通过GEODNS将域名解析到1.1.1.1,美洲用户解析到2.2.2.2

通过DNS将用户解析到其最近的服务器上,理论上就会缩短网站服务的响应时间,毕竟物理距离摆在那。国内很多免费DNS解析商都提供这项功能,国外免费的目前只发现gcore提供,ns2貌似也有(但感觉容易被付费)。

DNS运营商线路解析

  • 前提:有多服务器IP 其中1.1.1.1服务器移动线路友好 2.2.2.2电信线路友好
  • 例子:若移动用户访问luyublog.com则将域名解析到1.1.1.1,电信用户解析到2.2.2.2

举个例子,如果你的服务器1.1.1.1线路是移动直连,联通电信入网绕路。2.2.2.2电信直连,移动绕路,那么就可以将移动用户解析到1.1.1.1。电信,联通用户解析到2.2.2.2

如果服务器在国内这项功能基本用不到因为都差不多,但是在国外的话就有些用了,因为晚高峰除了像CN2,9929,CMI这些高级线路,国际普通线路丢包率和延迟普遍都高。

这项功能大型DNS服务商貌似都有但国外没看到免费的,国内的话,大厂DNS都提供。

DNS任播(AnyCast)

  • 前提:有多服务器IP 其中1.1.1.1位于亚洲 2.2.2.2位于美洲
  • 介绍:详情可以自行搜索,简单来说就是利用网络拓补结构,通过算法寻找到最合适的特定节点(综合考虑地理位置,服务器状态,线路质量等),根据老外测试加速效果和GEODNS差不多GeoDNS vs Anycast

这个国外没找到免费的。

服务器连接线路优化

上面说完DNS解析拿到服务器IP,下面记录从浏览器到服务器建立连接过程优化,如果是国内的服务器就别看了,基本用不上。

国外服务器到国内是有线路区别的,晚高峰国内入口必然会拥堵,所以尽量选择线路好一点的服务器或者使用CDN加速。

优质线路

  • 联通9929
  • 移动CMI
  • 电信CN2

CDN加速

CDN详细解释自行搜索,用上CDN后对网站响应,对服务器负载和带宽都有好处,这里还是说说免费的,国外出名的有Cloudflare,但是在国内效果不稳定。国内的CDN服务需要网站先备案。这里就不讨论了。

服务器处理优化

优化服务器处理之前首先得弄明白http请求到达服务器后的流程,这里大概归结为:http请求->缓存->内容->返回,所以这部分可以优化的部分大致为

  • cpu(INTEL,AMD)
  • 内存
  • 磁盘(NVME,SSD,HDD)
  • 缓存

对于前三样没什么好说的,好的CPU,内存和磁盘必然更快,一分钱一分货。下面说一下软件层面的优化,主要就是负载均衡和缓存。

负载均衡

这里说的负载均衡只是用在服务器响应方面的,完整的负载均衡是个很大的概念,
简单来说就是通过一定的策略让用户更好的被服务,让服务器保持一致性,可用性。详细的解释可以自行搜索一下,这里介绍一些负载均衡的实现:

缓存

这里的缓存主要指的是请求发到nginx再到获取内容后返回。其中优化点主要就是nginx缓存,具体细节可以看看这篇文章

0x03 最后补充

这里介绍的方法只是针对静态博客而言,建议根据自身网站特性针对性优化。

参考: