一、Traffic Server是什么?

Traffic Server是一个高性能的web代理缓存,适用于ISP、大型CDN缓存应用。它通过将频繁访问的信息缓存在网络的边缘来改善网络的效率和性能。这使访问内容在地理上更接近终端用户,在更快分发的同时也减少了宽带的占用。Traffic Serveer致力于通过充分利用现有可用的宽带,来改善企业、ISP、骨干网提供商和大型企业内部网的内容分发效率。

与其它同款缓存类应用产品区别:


Apache Traffic Server技术介绍_ats

二、Traffic Server的优点

·高可用性

— 多种管理界面,可管理程度高

— 容灾设计,可消化常见硬件故障

— 快速启动,快速恢复

— 配置可定制程度高,可控制核心参数 500+条目

— Cache控制能力强

— 可定制化的日志采集汇总汇报系统

— 可定制化的数据统计系统

— 集群化管理能力

·高度可扩展性

— 模块化程度高:核心http引擎只是TS的2个引擎之一(另一个是流媒体引擎)

— 高度可编程核心插件设计,可以完成各式各样业务,如已有巨型插件:

·ESI,Edge Side Include,雅虎贡献的代码

·Metalink

·Lua remap插件,支持Lua语言的script

·Gzip插件,可以对html等文本文件进行深度压缩

— API扩展支持完善,插件开发介入门槛低

·完善的日志

— 支持binary日志,高效

— 支持squid日志格式,兼容

— 可根据源站分离存储

— 可将日志发送至日志服务器

— 内建高性能、可定制化日志聚合功能,自动生成流量/性能报告

·自带高性能日志收集功能,也有独立服务器

三、Traffic Server简介

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


Apache Traffic Server技术介绍_ats_02

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

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

HTTP 代理服务器是 HTTP 服务器的一种实现,处于客户端(一般为浏览器)与另一个 HTTP 服务器之间(通常指源服务器,Origin Server)。HTTP 代理通常分为正向代理、反向代理和透明代理,我们主要关注的是反向代理(Reverse Proxy,见下图)反向代理服务器根据明确配置的映射规则来处理用户请求。反向代理服务器通常会设置一个较大的缓存区,服务器处理请求的同时将请求的内容缓存在服务器本地,当下次用户请求同一个对象时,服务器可直接从缓存区里取出对象,而不用去源服务器去取,起到了加速的效果。另外,配置反向代理的映射规则也能实现负载均衡的功能。


Apache Traffic Server技术介绍_cache_03

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)。

2.1、组件、机制

Traffic Server(TS) 的组成

2.1.1.Traffic Server缓存

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

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

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

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

2.1.2.RAM 缓存

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

2.1.3.主机数据库

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

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

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

2.1.4.DNS 解析器

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

2.1.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 进程。


Apache Traffic Server技术介绍_ats_04

2.1.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 和其他资源。

2.2、HTTP 代理缓存相关机制

2.2.1. Traffic Server 处理请求的过程

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

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

a.如果对象在缓存中,TS 会检查对象是否新鲜(fresh)

如果新鲜,TS 从缓存里返回该对象给用户,此时称为缓存命中(cache hit)

如果不新鲜(stale),TS 会连接源服务器去验证对象是否仍然新鲜,即重新验证(revalidation),如果仍然新鲜,TS 立即将缓存中的副本返回给用户

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

将对象返回给用户

将对象放到本地缓存中

2.2.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、特定的客户端等等)

2.2.3. 缓存过期(stale),Traffic Server 去源服务器重新验证对象可能的情况

仍然 fresh,TS 重置 freshness_limit,并返回对象

对象新副本可用,TS 缓存新对象,并同时返回给用户

源服务器上的对象不再存在,TS 也不再返回该副本给用户

源服务器没有响应,TS 返回过期的对象并发出警告。

三、Traffic Server部署选项

l 作为一个WEB代理缓存

l 作为一个反向代理

l 部署在多级缓存

3.1、Traffic Server作为WEB代理缓存

作为WEB代理缓存,Traffic Server接收用户直接发往web server(源服务器)的web内容请求。如果Traffic Server包含请求的内容,它将直接提供服务。如果请求的内容不在缓存里,Traffic Server将作为一个代理:为用户从源服务器去得请求的内容,并在本地保存一份拷贝以服务于将来相同的请求。

Traffic Server提供直接代理缓存功能,这需要配置用户的客户端软件将请求直接发送给Traffic Server。

3.2、Traffic Server作为反向代理

作为反向代理,Traffic Server需要配置为用户直接连接的源服务器(典型的用法是将源服务器的主机名解析到Traffic Server)。反向代理的功能也被称为服务器加速。

3.3、Traffic Server部署在多级缓存

Traffic Server可以灵活地参与多级缓存,当Internet请求不能在一个缓存中得到满足的时候,将被路由到其他区域的缓存,从而利用附近缓存的内容。在一个多及代理中,Traffic Server可以作为其他Traffic Server系统或者和其相似的缓存产品的父节点或者子节点。


Apache Traffic Server技术介绍_traffic server_05

四、Traffic Server的特点

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

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

速度:可支持裸盘设备,绕过文件系统,每秒钟可以处理数以万计的请求。

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

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

五、Traffic Server企业级功能与特性介绍

·性能强劲 ·灵活的map机制

·多CPU,多线程支持 ·强大的cluster支持

·支持raw设备/分区 ·全方位管理界面

·启动重启以秒记 ·全方位监控接口

·64位系统支持 ·丰富的扩展接口

·内存footprint低 ·IO性能优化

·支持多CPU多核心新硬件架构 ·支持非阻塞IO

·支持多线程运行 ·支持直接使用裸盘

·支持一线程处理多个http连接 ·支持PUSH

·支持自动刷新、正则刷新 ·可以强制cache

·使用类似squid的coss存储 ·可以删除、批量删除、正则删除

·支持对存储系统进行partition,以区别存放不同的内容

·支持对不同域名/协议进行匹配partition

·支持异步IO和fastIO,IO效率高

·硬盘采用RRD模式,写入(重写)压力小

六、测试、监控、管理方案

6.1、测试方案


Apache Traffic Server技术介绍_缓存_06Apache Traffic Server技术介绍_缓存_07

n A机作为traffic server节点,B机为源服务器;

n 向B机上传一个文件;

n 将域名解析至A机并进行访问该文件;

n 成功后查看A机是否有缓存文件存在;

6.2、监控、管理方案

6.2.1. Traffic Server自带命令行监控工具

实时查看状态工具:

/usr/local/ats/bin/traffic_shell


Apache Traffic Server技术介绍_cache_08

查看log工具:

/usr/local/ats/bin/traffic_logstats

/usr/local/ats/bin/traffic_logcat

在线服务管理工具:

/usr/local/ats/bin/traffic_line

6.2.2. Traffic Server自带页面管理工具

缓存查询:

http://{url}/cache/


Apache Traffic Server技术介绍_ats_09


Apache Traffic Server技术介绍_traffic server_10

状态查询:

http://{url}/stat/


Apache Traffic Server技术介绍_缓存_11

网络和http查询:

http://{url}/net/


Apache Traffic Server技术介绍_ats_12

Cache内部信息:

http://{url}/cache-internal/volumes

由于信息较多,只截取部分视图:


Apache Traffic Server技术介绍_缓存_13

6.2.3. tsar工具

Tsar是淘宝的一个用来收集服务器系统和应用信息的采集报告工具


Apache Traffic Server技术介绍_traffic server_14


Apache Traffic Server技术介绍_缓存_15


Apache Traffic Server技术介绍_traffic server_16

6.2.4. zabbix监控系统

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

对于Traffic Server监控可方便接入考拉FM当前使用的zabbix监控系统。

通过脚本对Traffic Server相应信息进行自动化统计及数据整理,并加入zabbix监控系统,制作监控模板,并设置相应报警阀值进行触发器报警等。

对部分统计数据进行zabbix统计、画图,可以实时了解各系统性能、稳定性、成本情况等。

七、其它

Traffic Server 官方网站:trafficserver.apache.org

Traffic Server 下载:trafficserver.apache.org

Traffic Server 手册:trafficserver.readthedocs.org


Apache Traffic Server技术介绍_traffic server_17