Page 187 - Web性能权威指南
P. 187
图 11-5:由于每个主机只能同时发起 6 个连接而导致的资源错列
实践中,把多个域名(如 shard1.example.com、shard2.example.com)解析
到同一个 IP 地址是很常见的做法。所有分区都通过 CNAME DNS 记录指
向同一个服务器,而浏览器连接限制针对的是主机名,不是 IP 地址。另
外,每个分区也可以指向一个 CDN 或其他可以访问到的服务器。
怎么计算最优的分区数目呢?这个问题不好回答,因为没有简单的方程式。答案取决
于页面中资源的数量(每个页面都可能不一样),以及客户端连接的可用带宽和延迟
(因客户端而异)。实际上,我们能做的,就是在调查的基础上做出预测,然后使用固
定数量的分区。幸运的话,多这么一点复杂性,还是能给大多数用户带来好处的。
实践中,域名分区经常会被滥用,导致几十个 TCP 流都得不到充分利用,其中很多
永远也避免不了 TCP 慢启动,最坏的情况下还会降低性能。此外,如果使用的是
HTTPS,那么由于 TLS 握手导致的额外网络往返,会使得上述代价更高。此时,请
大家注意如下几条:
• 首先,把 TCP 利用好,参见 2.5 节“针对 TCP 的优化建议”;
• 浏览器会自动为你打开 6 个连接;
• 资源的数量、大小和响应时间都会影响最优的分区数目;
• 客户端延迟和带宽会影响最优的分区数目;
• 域名分区会因为额外的 DNS 查询和 TCP 慢启动而影响性能。
域名分区是一种合理但又不完美的优化手段。请大家一定先从最小分区数目(不分
区)开始,然后逐个增加分区并度量分区后对应用的影响。现实当中,真正因同时
打开十几个连接而提升性能的站点并不多,如果你最终使用了很多分区,那么你会
172 | 第 11 章