简介


   Apache Traffic Server(ATS或TS)是一个高性能的、模块化的HTTP代理和缓存服务器,与 Nginx 和 Squid 类似。Traffic Server最初是 Inktomi 公司的商业产品,该公司在2003 年被 Yahoo 收购, 2009 年 8月 Yahoo 向 Apache 软件基金会(ASF)贡献了源代码,并于 2010 年 4月成为了 ASF的顶级项目(Top-LevelProject)。

   Apache TrafficServer 现在是一个开源项目,开发语言为C++。

   Traffic Server的开发团队曾经由Chuck Neerdaels领导,他也是Harvest 项目的早期创始人之一,Harvest项目后来发展为十分流行的Squid项目,LeifHedstrom 直接管理着现在的 Traffic Server 开发团队。目前Chuck Neerdaels和Leif Hedstrom都已×××知名CDN服务提供商Akamai。


功能


   Apache软件基金会发布的最新版本是Apache Traffic Server v3.0.0。Traffic Server的处理能力非常强大,它可以在对内容传输要求非常严格的真实部署环境中处理TB级的数据,V3.0.0就是以此为基础进行构建的,同时增加了一些新特性与新功能、改进了效率与性能、提升了系统正常的运行时间,并且易于使用。

   Apache Traffic Server是个快速、可伸缩、可扩展、兼容于HTTP/1.1缓存代理的服务器,它具有如下特色:

缓存:改进响应时间的同时降低了服务器负载与对带宽的需求,这是通过缓存并且重用经常请求的网页、图片和Web Service调用实现的。

代理:很容易添加持续连接、过滤器或异步内容请求,还可以通过添加代理层实现负载平衡。

速度:在现代的SMP硬件上具有很好的可伸缩性,每秒钟可以处理数以万计的请求。

可扩展性:API考虑到了自定义插件,可以修改头与内容,还可以实现新的协议处理器。

可靠性:能够完美处理TB级别的数据,包括正向与反向代理。

   Apache Traffic Server v.3.0.0基准测试的结果是每秒钟可以处理200,000多个请求,相对于v2.0来说提升了277%。它可以用在各种大规模的产品部署环境中,Yahoo!使用Apache Traffic Server处理400TB的数据量,同时每天还使用它处理多达300亿的数据对象,包括Yahoo!主页、体育、邮件及财经站点。

Apache Traffic Server v3.0.0的开发者与贡献者多达30人,


其新特性与改进如下所示:


完全的64位支持

支持客户端的IPv6

WCCP(Web缓存通信协议)

支持集群

改进了主要的插件API,简化了API的使用并且增加了新特性

支持多种平台,包括OSX、Solaris与FreeBSD(当然了,一直都在支持Linux)

改进了RAM缓存算法,改进了性能与内存使用

现在可以对每个事务进行配置(或是每个映射规则)

改进了统计与管理API

多个线程,还有一个专门的DNS线程

构建环境更加灵活

修复了众多Bug,改善了稳定性与功能

Apache Traffic Server在性能上的改进主要有:

相比于v2.0,v3.0整体的吞吐量提升了2到3倍

响应延迟比v2.0 降低了5倍

基准:对于RAM缓存外的小对象来说,高端服务器每秒可以处理220,000个请求

基准:对于未被缓存的小对象来说,同样的服务器每秒可以代理100,000个请求

以上所有基准都是在局域网中测试的,同时使用了持续连接。

最新版本Apache Traffic Server v3.0.1发布。

该版本的改进:

从构建系统中移除了卸载目标

修复了高流量网站可能宕机的问题

修复了主机内置错误,看起来像是IE的错误

由于错误的维护导致回归检查失败(再次)

使用CONNECT方法时出现严重超时等


组件、机制


Traffic Server(TS) 的组成

1.Traffic Server缓存

   TS 缓存包含一个高速的对象数据库,数据库根据 URL 和相关头部来索引对象,对于同一对象可以缓存不同版本(如不同的编码、语言)。

   当缓存空间满后,TS 会移除过期的数据。

   当磁盘出错时,TS 将不再使用该块磁盘,转而使用剩下的磁盘。所有磁盘都出错时,TS 将切换至 proxy-only 模式,即只代理,不缓存。

   可分区,即可以给指定的协议和源服务器划分一定数量的磁盘空间

2.RAM 缓存

   内存缓存区储存比较热门的对象,在流量的高峰期时能加快处理速度和降低磁盘负载。

3.主机数据库

   储存 DNS 信息,方便主机名到 IP 地址的快速转换

   储存每个主机的 HTTP 版本,方便高级协议特性的使用

   储存主机的可靠性和可用性信息

4.DNS 解析器

   TS 原生实现了 DNS 解析器,不依赖较慢的传统解析库。同时也降低了 DNS 的流量。

5.Traffic Server 进程

   traffic_server 进程负责接受连接,处理协议请求,然后从缓存或源服务器获取对象并返回。

t   raffic_manager 进程是 TS 的命令和控制设施,负责启动、监控和配置 traffic_server 进程,它也负责代理的端口配置、统计信息的接口、集群管理和虚拟 IP 的故障转移。

   如果 traffic_manager 检测到 traffic_server 进程失效,它立即重启 traffic_server 进程并且维护一个连接队列,保存此时到来的请求,完全重启后这个队列里的连接将按顺序被处理。

   traffic_cop 进程监视 traffic_server 和 traffic_manager 进程,此进程周期性的查询 traffic_server 和 traffic_manager 进程的健康状况,如果查询在一定间隔时间内未返回或者返回信息不正确,traffic_cop 将重启 traffic_manager 和 traffic_server 进程。


6.管理工具

   Traffic Line 是命令行程序,可以用来快速监视 Traffic Server 的性能和网络流量,也能配置 TS。

   Traffic Shell 也是命令行工具,进入该 shell 后有自己一套语法,可代替 Traffic Line 完成监控、配置任务。

   通过 Traffic Line 和 Traffic Shell 对配置作出的修改将会自动写入配置文件中。


Traffic Server 的底层机制

   Apache Traffic Server 不同于大部分开源代理服务器,它结合了两种技术来处理高并发:


异步事件处理(Asynchronous event processing)

多线程(Multi-threading)

Traffic Server 在多 CPU、多核的硬件上扩展良好,能充分利用所有可用的 CPU 和其他资源。


HTTP 代理缓存相关机制

   1. Traffic Server 处理请求的过程

1)用户请求一个 web 对象,TS 收到请求

2)TS 通过对象的地址,在对象数据库(缓存)中去定位该对象

  a.如果对象在缓存中,TS 会检查对象是否新鲜(fresh)如果新鲜,TS 从缓存里返回该对象给用户,此时称为缓存命中(cache hit)如果不新鲜(stale),TS 会连接源服务器去验证对象是否仍然新鲜,即重新验证(revalidation),如果仍然新鲜,TS 立即将缓存中的副本返回给用户

  b.如果对象不在缓存中(缓存未命中,cache miss),或者缓存的副本不再有效,TS 会去源服务器获取对象,然后同时做下面两件事将对象返回给用户将对象放到本地缓存中


  2. Traffic Server 判断 HTTP 对象是否新鲜(fresh)的过程

  如果有 Expires 或者 max-age 头部直接定义缓存的过期时间,TS将对比当前时间和过期时间去判断对象是否新鲜如果没有上述头部,TS 将检查 Last-Modified 和 Date 头部(其中Date是源服务器返回对象的时间,如果没有 Last-Modified 头部,TS 会用对象写入缓存的时间以作代替),然后用以下公式算出新鲜的时间范围(freshness_limit,可理解为保质期):freshness_limit = ( Date - Last-Modified ) x 0.1

  0.1 这个参数可以作调整,并且能限制 freshness_limit 的上下限,默认最小是1小时,最大是1天

  如果没有 Expires 头部或者没有 Last-Modified、Date 头部,TS 将使用默认的 fressness limit

  另外,TS 还会检查 cache.config 配置文件中的 revalidate 规则,该规则可以对特定的 HTTP 对象设置特定的验证时间(特定的域名、IP、一定规则的 URL、特定的客户端等等)


  3. 缓存过期(stale),Traffic Server 去源服务器重新验证对象可能的情况仍然 fresh,TS 重置 freshness_limit,并返回对象

  对象新副本可用,TS 缓存新对象,并同时返回给用户源服务器上的对象不再存在,TS 也不再返回该副本给用户源服务器没有响应,TS 返回过期的对象并发出警告。更详细的说明请查看 Traffic Server 管理文档中的 HTTP Proxy Caching 部分。


总结


   Apache Traffic Server 开源后功能在不断被开发,性能得到很大提升,社区也在逐渐发展,但除了 Yahoo 之外还很少有其他实践,很多功能(如集群)的文档有待完善。Traffic Server 丰富的插件开发是其一大亮点,模块化的特点使其拥有很好的扩展性和灵活性,再加上它的高性能,相信 Apache Traffic Server 未来将在很多场景中替代传统的代理和缓存服务器而成为大家的首选。