ApacheTrafficServer简介
⼀介绍
Apache Traffic Server(ATS或TS)是⼀个⾼性能的、模块化的HTTP代理和缓存服务器。Traffic Server最初是Inktomi公司的商业产品,该公司
在2003年被Yahoo收购,之后Traffic Server⼀直在Yahoo内部使⽤长达4年,直到2009年8⽉Yahoo向Apache软件基⾦会(ASF)贡献了源代码,并于2010年4⽉成为了ASF的顶级项⽬(Top-Level Project)。Apache Traffic Server现在是⼀个开源项⽬,开发语⾔为C++。
Traffic Server的开发团队曾经由Chuck Neerdaels领导,他也是Harvest项⽬的早期创始⼈之⼀,Harvest项⽬后来发展为⼗分流⾏的Squid项⽬;Leif Hedstrom直接管理着现在的Traffic Server开发团队。⽬前Chuck Neerdaels和Leif Hedstrom都已加盟知名CDN服务提供商Akamai。
Traffic Server 在 Yahoo 内部使⽤了超过 4 年,主要⽤于 CDN 服务,CDN ⽤于分发特定的HTTP 内容,通常是静态的内容如图
⽚、JavaScript、CSS。下⾯是Traffic Server 在 Yahoo CDN应⽤的⼀些情况:
超过 4 年的使⽤中,缓存中没有出现已知的数据损坏(data corruption);
作为反向代理,服务器⽅便部署和管理,并且⼤部分配置的更改可直接在线上服务器完成,⽽不⽤重启服务;
在⾼并发情况下扩展良好,⽀持 HTTP/1.1 协议特性,如 SSL、Keep-Alive;
在世界范围内部署了超过 100 台服务器;
在实际CDN中,每秒处理超过 350,000 次请求,达到 30 Gbps,最⼤容量⾄少⼗倍于普通使⽤,以应对⾼峰时的⼤量请求;
在实际 CDN 中,每台服务器有 20,000 到 30,000 的 keep-alive 并发连接,其中有 1,000 到 2,000 的连接是⼀直很活跃的;
实验环境中,单台服务器每秒处理 105,000 次请求,请求的对象是被缓存住的⼩⽂件;
实验环境中,请求⼤⽂件时,单台服务器达到 3.6 Gbps(4x GigE NIC bonded)。
⼆组件、机制
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 进程负责接受连接,处理协议请求,然后从缓存或源服务器获取对象并返回
traffic_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 还会检查 fig 配置⽂件中的 revalidate 规则,该规则可以对特定的 HTTP 对象设置特定的验证时间(特定的域名、IP、⼀定规则的URL、特定的客户端等等)
3.缓存过期(stale),Traffic Server去源服务器重新验证对象可能的情况
仍然 fresh,TS 重置 freshness_limit,并返回对象
对象新副本可⽤,TS 缓存新对象,并同时返回给⽤户
源服务器上的对象不再存在,TS 也不再返回该副本给⽤户
源服务器没有响应,TS 返回过期的对象并发出警告。
更详细的说明请查看Traffic Server管理⽂档中的HTTP Proxy Caching部分
三安装、使⽤
Apache Traffic Server 开源后添加了 64 位⽀持,也移植到了常见的 Linux 发⾏版、FreeBSD、OpenSolaris 和 Mac OS X,开源之前Yahoo Traffic Server ⼀直运⾏在 32-bit Linux 上。
(以 Apache Traffic Server 2.1.1 unstable 为例在 32-bit Linux 环境下进⾏安装测试)
安装
1. 下载、解压
md5sum -c trafficserver-2.1.1-unstable.tar.bz2.md5
tar jxvf trafficserver-2.1.1-unstable.tar.bz2
cd trafficserver-2.1.1-unstable
2. 编译、安装
查看 README 说明⽂档,安装编译依赖的库(centos 可参照 fedora 依赖的软件包,pcre包替换为 pcre-devel 即可)
./configure --help  查看编译的⼀些选项
./configure  (默认安装在 /usr/local,如需修改,使⽤ --prefix=PREFIX;参数中还有⽤户和⽤户组选项,这是 TS 进程运⾏的⾝份,默认均为 nobody,centos 可以不作修改,其他发⾏版可能需要修改,如 ./configure --with-group=nogroup)
make
make install  以管理员⾝份执⾏
⽬录结构
默认⽬录内容
/usr/local/var/log/trafficserver运⾏时创建的⽇志⽂件
/usr/local/var/trafficserver运⾏时的⼀系列⽂件
/
usr/local/etc/trafficserver配置⽂件
/usr/local/bin可执⾏⽂件
/usr/local/libexec/trafficserver插件
初步配置
_thread.autoconfig INT 1
_thread.autoconfig.scale FLOAT 2.0
_thread.limit INT 2  # 经观察是每个核创建的线程数,官⽅⽂档中未提及
hernet_interface STRING eth0 # 设置以太⽹接⼝
fig.http.server_port INT 8080  # 监听端⼝,反向代理通常为80
下载apacheLOCAL proxy.local.incoming_ip_to_bind STRING 0.0.0.0 # 绑定的 IP,可省略,默认即为 0.0.0.0
fig.http.cache.http INT 1 # 打开缓存功能
fig.cache.ram_cache.size INT 512M  # RAM 缓存⼤⼩
abled INT 1  # 打开
fig.ap_required INT 1 # 1为只反向代理,0为正向+反向代理
fig.url_remap.pristine_host_hdr INT 0
abled INT 0 # 关闭SSL
fig.filename STRING server.pem
fig.http.server_max_connections INT 2000  # 同源服务器的最⼤连接数
fig.http.keep_alive_no_activity_timeout_out INT 60 # 当⼀个事务结束后同原服务器保持连接的时间fig 配置
/data1 67108864  #指定⼀个或多个⽬录,注明缓存⼤⼩,也可直接指定raw分区,详见fig中的注释说明
服务控制
运⾏/usr/local/bin/trafficserver start
结束/usr/local/bin/trafficserver stop
重启/usr/local/bin/trafficserver restart
命令⾏⼯具、监控
/usr/local/bin/traffic_line需⽤管理员⾝份执⾏
查看帮助traffic_line -h
查看变量的值traffic_line -r变量名(变量名见官⽅管理指南附录C,含TS运⾏时统计数据)
给变量赋值traffic_line -s变量名-v值(变量名见fig)
不重启TS使配置⽣效traffic_line -x
/usr/local/bin/traffic_shell需⽤管理员⾝份执⾏,进⼊后提⽰符为“%”
查看帮助man traffic_shell(由于开发者疏忽,暂不能⽤)
show命令,如%show:cache-stats查看缓存统计,如命中情况,缓存⼤⼩;如%show:proxy-stats查看命中率
config命令,如%config:logging event disable关闭⽇志;如%config:cache clear,清除缓存,config命令作出的修改都会⽴即⽣效
/usr/local/bin/traffic_logcat⽇志查看⼯具
traffic_logcat -h获得帮助
查看⼆进制⽇志traffic_logcat⽇志⽂件名
Traffic Server系统⾃⾝的运⾏⽇志可在/var/log/message中查看(centos),⽤于排错
traffic_logstats提供了基于⽇志的统计功能
四结论
Apache Traffic Server 开源后功能在不断被开发,性能得到很⼤提升,社区也在逐渐发展,但除了 Yahoo 之外还很少有其他实践,很多功能(如集)的⽂档有待完善。Traffic Server 丰富的插件开发是其⼀⼤亮点,模块化的特点使其拥有很好的扩展性和灵活性,再加上它的⾼性能,相信 Apache Traffic Server 未来将在很多场景中替代传统的代理和缓存服务器⽽成为⼤家的⾸选。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。