domain-name-system – 优化HTTP请求的操作系统

前端之家收集整理的这篇文章主要介绍了domain-name-system – 优化HTTP请求的操作系统前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
We发出了很多HTTP请求.最近,我们开始考虑在操作系统级别进行优化,以便从单个机器发出更多请求.

为了检查我们的操作系统的性能,我创建了一个小基准来比较不同机器上的东西.
基准测试使用curl -w:

  1. #!/bin/bash
  2. for (( ; ; ))
  3. do
  4. curl $URL -o /dev/null -s -w "SIZE: %{size_download} SPEED: %{speed_download} LOOKUP: %{time_namelookup} CONNECT: %{time_connect} START: %{time_starttransfer} TOTAL: %{time_total}\n"
  5. done

现在我为1个单一的URL运行它.结果如下:
从我的本地开发机器(与光纤连接):

  1. SPEED (b/sec) LOOKUP CONNECT START TOTAL
  2. 13,331.2481 0.0022 0.0228 0.2163 0.2175

在我们的一个生产服务器上(使用XEN虚拟化),结果略有不同:

  1. SPEED (b/sec) LOOKUP CONNECT START TOTAL
  2. 22,764.7700 0.0093 0.0455 0.1318 0.1334

在另一个不相关的服务器上,没有XEN虚拟化(不同的数据中心,不同的大陆,远离资源)

  1. SPEED (b/sec) LOOKUP CONNECT START TOTAL
  2. 32,821.3569 0.0004 0.0080 0.1608 0.1672

正如您所看到的,我们的生产服务器上的性能远远不能令人满意.数据传输速率比我的本地笔记本电脑更快,但是延迟正在扼杀我们.由于我们获取大小相当小的HTTP资源,因此我们需要优化此延迟.

知道从哪里开始?

更新:这不是关于扩展Web服务器.这是关于扩展Web请求.

解决方法

这是一个研究得很好的问题(“高性能网络爬行”),有大量可用的研究: http://scholar.google.com/scholar?q=web+crawling+performance …是的,我在作弊,但老实说,你应该首先阅读文献.

根据我自己过去构建此类系统的经验:你无法击败光速,所以不管怎样,你都会遇到它.您可以做的是优化计划资源提取的方式和时间.例如,您可以使用优化的子系统来处理问题的某些部分 – 例如DNS解析.您可以预先解析名称并直接连接到IP地址(只需添加正确的主机标头).之后,您将不得不承担TCP连接成本,无法绕过它.也就是说,如果您对同一主机有多个请求,那么您可以利用它来通过现有连接序列化多个请求:这有助于分摊TCP / TLS握手成本并为您提供更好的端到端性能.从那里开始,你必须向上移动协议阶梯:有时你可以跟踪重定向链并记住最后一个位置,以便在将来跳过额外的重定向(只需要一个后备).实际上,同样适用于DNS.您可以实施乐观策略并直接连接到IP,然后在失败时使用回退.对于TLS,您可以存储会话票证和其他元数据以获得更快的重新连接(即,假设您经常重新连接).

tl;博士:我没有在这里添加任何新内容,所有上述提示(以及更多内容)都包含在现有研究中.拿一杯咖啡,花一些时间阅读现有的论文!

猜你在找的HTML相关文章