0x00 背景
粗略的记录一下从各个方面让博客有更快的响应速度
0x01 基本知识
一次HTTP的请求过程示例:
用户在浏览器输入luyublog.com后浏览器处理流程(简略版本,不考虑具体交互)
- 浏览器查询本地DNS缓存获取luyublog.com的IP,若没有则查询操作系统DNS缓存,若还没有则请求公共DNS服务器(114,阿里等)
- 获取到网站IP地址后通过TCP建立连接
- 通过HTTP协议进行报文交互
0x02 可能的优化点
了解基本流程后就可以一步步进行优化,例如:
- 用户浏览器DNS解析步骤
- TCP连接建立过程
- 服务器处理速度
DNS解析优化
DNS解析优化的关键点有两个:
- 解析速度
- 解析到最合适的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,内存和磁盘必然更快,一分钱一分货。下面说一下软件层面的优化,主要就是负载均衡和缓存。
负载均衡
这里说的负载均衡只是用在服务器响应方面的,完整的负载均衡是个很大的概念,
简单来说就是通过一定的策略让用户更好的被服务,让服务器保持一致性,可用性。详细的解释可以自行搜索一下,这里介绍一些负载均衡的实现:
- ATS
- LVS+Keepalived
- Squid
- Haproxy
- nginx
缓存
这里的缓存主要指的是请求发到nginx再到获取内容后返回。其中优化点主要就是nginx缓存,具体细节可以看看这篇文章
0x03 最后补充
这里介绍的方法只是针对静态博客而言,建议根据自身网站特性针对性优化。
参考: