Apache Traffic Server 研究实践

lingye

贡献于2012-05-29

字数:0 关键词: 缓存服务器 Apache

2012/03/08 09:45 1/12 Apache Traffic Server研究实践 另野 - http://127.0.0.1/wiki/ Apache Traffic Server研究实践 ATS宣传PPT Traffic Server 是什么 Apache Traffic Server是个快速、可伸缩、可扩展、兼容于HTTP/1.1缓存代理的服务器。 Traffic Server 最初是 Inktomi 公司的商业产品,该公司在 2003 年被 Yahoo 收购,之后 Traffic Server 一直在 Yahoo 内部使用长达 4 年,直到 2009 年 8 月 Yahoo 向 Apache 软件基金会(ASF )贡献了源代码,并于 2010 年 4 月成为了 ASF 的顶级项目(Top-Level Project)。 Traffic Server 的开发团队曾经由 Chuck Neerdaels 领导,他也是 Harvest 项目的早期创始人之一, Harvest 项目后来发展为十分流行的 Squid 项目;Leif Hedstrom 直接管理着现在的 Traffic Server 开发团队。目前 Chuck Neerdaels 和 Leif Hedstrom都已加盟知名 CDN 服务提供商 Akamai。 Traffic Server 的特点 缓存:改进响应时间的同时降低了服务器负载与对带宽的需求,这是通过缓存并且重用经常请求的网页、 图片和Web Service调用实现的。 代理:很容易添加持续连接、过滤器或异步内容请求,还可以通过添加代理层实现负载平衡。 速度:在现代的SMP硬件上具有很好的可伸缩性,每秒钟可以处理数以万计的请求。 可扩展性:API考虑到了自定义插件,可以修改头与内容,还可以实现新的协议处理器。 可靠性:能够完美处理TB级别的数据,包括正向与反向代理。 Apache Traffic Server v.3.0.0基准测试的结果是每秒钟可以处理200,000多个请求,相对于v 2.0来说提升了277%。 它可以用在各种大规模的产品部署环境中,Yahoo!使用Apache Traffic Server处理400TB 的数据量,同时每天还使用它处理多达300亿的数据对象,包括Yahoo!主页、体育、邮件及财经站点。 Apache Traffic Server v3.0.0的开发者与贡献者多达30人,其新特性与改进如下所示: 完全的64位支持1. Last update: 2012/03/08 09:43 wiki:ats http://127.0.0.1/wiki/doku.php?id=wiki:ats http://127.0.0.1/wiki/ Printed on 2012/03/08 09:45 支持客户端的IPv62. WCCP(Web缓存通信协议)3. 支持集群4. 改进了主要的插件API,简化了API的使用并且增加了新特性5. 支持多种平台,包括OSX、Solaris与FreeBSD(当然了,一直都在支持Linux)6. 改进了RAM缓存算法,改进了性能与内存使用7. 现在可以对每个事务进行配置(或是每个映射规则)8. 改进了统计与管理API9. 多个线程,还有一个专门的DNS线程10. 构建环境更加灵活11. 修复了众多Bug,改善了稳定性与功能12. 相比于v2.0,v3.0整体的吞吐量提升了2到3倍13. 响应延迟比v2.0 降低了5倍 14. 基准:对于RAM缓存外的小对象来说,高端服务器每秒可以处理220,000个请求15. 基准:对于未被缓存的小对象来说,同样的服务器每秒可以代理100,000个请求16. 以上所有基准都是在局域网中测试的,同时使用了持续连接。 Traffic Server 的作用 Traffic Server 是一个高性能的 web 代理缓存,它通过将频繁访问的信息缓存在网络的边缘来改善网络的效率和性能。这使访问内容在地理 上更接近终端用户,在更快分发的同时也减少了带宽的占用。 Traffic Server 致力于通过充分利用现有可用的带宽,来改善企业、ISP 、骨干网提供商和大型企业内部网的内容分发效率。 Traffic Server 可以加速Internet 访问,增强web 站点性能,同时也提供前所未有的网络托管能力。 Traffic Server 在Yahoo的传说 超过 4 年的使用中,缓存中没有出现已知的数据损坏(data corruption)1. 作为反向代理,服务器方便部署和管理,并且大部分配置的更改可直接在线上服务器完成,而不用2. 重启服务 在高并发情况下扩展良好,支持 HTTP/1.1 协议特性,如 SSL、Keep-Alive3. 在世界范围内部署了超过 100 台服务器4. 在实际CDN中,每秒处理超过 350,000 次请求,达到 30 Gbps5. ,最大容量至少十倍于普通使用,以应对高峰时的大量请求 在实际 CDN 中,每台服务器有 20,000 到 30,000 的 keep-alive6. 并发连接,其中有 1,000 到 2,000 的连接是一直很活跃的 实验环境中,单台服务器每秒处理 105,000 次请求,请求的对象是被缓存住的小文件7. 实验环境中,请求大文件时,单台服务器达到 3.6 Gbps(4x GigE NIC bonded)8. 2012/03/08 09:45 3/12 Apache Traffic Server研究实践 另野 - http://127.0.0.1/wiki/ Traffic Server 部署选项 作为一个web 代理缓存 1. 作为一个反向代理 2. 部署在多级缓存3. Traffic Server DNS解析 配置文件: splitdns.config Traffic Server 包含一个快速的、异步的DNS 解析器来简化主机名和IP地址的转换。Traffic Server 最初实现的DNS 解析器就是直接发送 DNS 命令数据包而不是依赖传统的慢速解析库。由于许多DNS 查询可以并行发送,同时在内存的高速DNS 缓存中维持着热点绑定(DNS,IP),使DNS 流量减少。 如果要使用/etc/hosts文件解析,可以参考dnsmasq部署小型的本地DNS搭配使用。 /etc/hosts 122.227.58.178 free3server.xxx splitdns.config dest_domain=xxx named="127.0.0.1" records.config CONFIG proxy.config.dns.splitDNS.enabled INT 1 remap.config map http://free3.53kf.com/ http://free3server.xxx map http://www32.53kf.com/ http://www32server.xxx Traffic Server 缓存 配置文件: cache.config records.config Traffic Server 缓存由高速对象数据库Object store组成。对象数据库通过 URL和相关的头部来索引对象。 使用先进的对象管理,Object store Last update: 2012/03/08 09:43 wiki:ats http://127.0.0.1/wiki/doku.php?id=wiki:ats http://127.0.0.1/wiki/ Printed on 2012/03/08 09:45 可以缓存同一个对象(可能是不同的语言或编码类型)的替换版本 。它同样可以高效地存储非常小和非常大的对象,从而使浪费的空间最小化。当缓存被占满后,Traffic Server通过删除过期的数据来保证经常被请求的对象有效并容易获取。 Traffic Server被设计为容忍缓存磁盘的任何失效 。如果磁盘完全失效,Traffic Server 会标记整个磁盘为被占用同时继续使用余下的磁盘。如果缓存的所有磁盘都失效了,Traffic Server 会自动切换为单纯代理模式。可以对缓存进行分区,来为专门的协议和源服务器存储数据预存一定数量 的磁盘空间。 Traffic Server 维护着一个包含热点对象的微型RAM 缓存 。这个RAM 缓存在尽可能快地服务大部分热点对象的同时也减少了磁盘负载,特别是在一些流量的高峰。可以根据 需要来配置RAM 缓存的大小; Traffic Server 进程 Traffic Server 包括三个一起工作的进程来服务 Traffic Server 的请求,管理/ 控制/ 监控系统的健康状况。 图1 说明了三个进程的关系,三个进程将会在下面描述。 traffic_server 进程是 Traffic Server● 的事务处理引擎。它负责接收连接、处理协议请求以及从本地缓存或源服务器提供资源。 traffic_manager 进程是用来命令和控制 Traffic Server 的工具,负责启动、监控以及重新配置● traffic_server 进程。traffic_manager 进程同时负责代理自动配置端口、统计接口、集群管理以及VIP 故障转移。 如果traffic_manager 进程检测到 traffic_server 进程失败,它不仅会立即重启该进程,而且会为所有传入的请求维护一个连接队列。 在traffic_server 重新启动前的几秒内传入的所有连接将被保存在一个队列,并以FIFO 的方式处理。这个连接队列接收任何server 故障重启时的连接。 traffic_cop 进程监控traffic_server 和traffic_manager 进程的健康状况。● traffic_cop 进程通过抓取合成 web 页面的心跳请求方式周期性地(每分钟若干次)查询 traffic_server 和traffic_manager 进程。 如果失败事件发生(如果在超时时间间隔内没有收到请求或者收到错误的请求),traffic_cop 重启 traffic_server 和traffic_manager 进程。 2012/03/08 09:45 5/12 Apache Traffic Server研究实践 另野 - http://127.0.0.1/wiki/ Traffic Server 管理工具 Traffic Server 提供如下的管理选项 Traffic Line 命令行接口是一个基于文本的接口,通过它不但可以监控Traffic Server● 的性能和网络流量,而且可以配置 Traffic Server 系统。通过Traffic Line 可以执行单条命令或者是一系列命令组成的 shell 脚本。 Traffic Shell 命令行接口是一个附加的命令行工具,通过它同样可以执行单个监控命令以及配置● Traffic Server 系统。 各种各样的配置文件可以通过一个简单的文件编辑器以及信号处理接口来配置Traffic Server● 。任何通过Traffic Line 或者Traffic Shell 的更改都会自动地同步到配置文件。 Traffic Server 安全选项 Traffic Server 提供了许多选项来确保 Traffic Server 系统和网络上的其他计算机进行安全的通信。安全选项如下: 控制客户端对Traffic Server 代理缓存的访问。 ● 通过配置Traffic Server 使用多个DNS 服务器来匹配站点的安全配置。比如,Traffic Server● 可以使用不同的 DNS 服务器来解析防火墙内部或外部的主机名。这使得在保持内部网络配置安全的情况下,同时可以继 续透明地访问Internet 外部网络。 配置Traffic Server 在用户访问 Traffic Server 缓存内容之前对其做身份验证。 ● 在反向代理模式中,客户端和Traffic Server ,以及 Traffic Server 和源服务器之间使用SSL● 终止选项来进行安全连接。 通过SSL 控制访问。 ● Traffic Server 安装配置 yum install -y libcap-devel expat-devel tcl-devel pcre-devel gcc-c++ lzma ./configure --prefix=/opt/ats --enable-static --enable-tproxy=force --enable-posix-cap make && make install Last update: 2012/03/08 09:43 wiki:ats http://127.0.0.1/wiki/doku.php?id=wiki:ats http://127.0.0.1/wiki/ Printed on 2012/03/08 09:45 Traffic Server 文件详解 records.config 最主要的配置文件,包括全局配置,socket安装和主要特性和功能的开启关闭,你可以通过 traffic_line动态生态。 # 定义代理服务器主机名 proxy.config.proxy_name -v 53KF-ATS-1 # 定义代理侦听端口 proxy.config.http.server_port -v 80 # 定义多少个配置拷贝件 proxy.config.admin.number_config_bak -v 0 # 禁止最大缓存文档的检查 proxy.config.cache.max_doc_size -v 0 # 设置默认启用重用 proxy.config.http.cache.when_to_revalidate -v 4 # 不需要Expires,Cache-Control:max-age proxy.config.http.cache.required_headers -v 0 # 开启反向代理 proxy.config.reverse_proxy.enabled -v 1 # 开启remap功能 proxy.config.url_remap.remap_required -v 1 # 指定无目标机的URL的定向 proxy.config.header.parse.no_host_url_redirect -v http://example.com # 参数默认是1,即remap规则只是起到制定ip地址的转换作用。 # 如果设置为0,则可以进行url的转换。 # 灵活运用这个参数和remap的配合,将可以很好的解决所有的需求。 2012/03/08 09:45 7/12 Apache Traffic Server研究实践 另野 - http://127.0.0.1/wiki/ proxy.config.url_remap.pristine_host_hdr -v 1 # 线程池调整 proxy.config.exec_thread.autoconfig INT 1 proxy.config.exec_thread.autoconfig.scale FLOAT 2.0 proxy.config.exec_thread.limit INT 5 proxy.config.accept_threads INT 1 proxy.config.cache.threads_per_disk INT 8 proxy.config.task_threads INT 2 # 网络参数调整 ################################### # HTTP connection timeouts (secs) # ################################### # out: proxy -> origin server connection # in : ua -> proxy connection proxy.config.http.keep_alive_no_activity_timeout_in INT 115 proxy.config.http.keep_alive_no_activity_timeout_out INT 120 proxy.config.http.transaction_no_activity_timeout_in INT 30 proxy.config.http.transaction_no_activity_timeout_out INT 30 proxy.config.http.transaction_active_timeout_in INT 900 proxy.config.http.transaction_active_timeout_out INT 0 proxy.config.http.accept_no_activity_timeout INT 120 proxy.config.http.background_fill_active_timeout INT 60 proxy.config.http.background_fill_completed_threshold FLOAT 0.500000 ################################## # origin server connect attempts # ################################## proxy.config.http.connect_attempts_max_retries INT 6 proxy.config.http.connect_attempts_max_retries_dead_server INT 3 proxy.config.http.connect_attempts_rr_retries INT 3 proxy.config.http.connect_attempts_timeout INT 30 proxy.config.http.post_connect_attempts_timeout INT 1800 proxy.config.http.down_server.cache_time INT 300 proxy.config.http.down_server.abort_threshold INT 10 remap.config 代理服务器与源服务器之间的一一映射关系 # 映射内部访问地址到cache本身,用于监控代理服务器的负载 map http://internal.proxy.server.com http://{cache} @action=allow @src_ip=127.0.0.1 map http://www.ogre.com/_stat_page_cache-internal/ http://{cache-internal}/ map http://www.ogre.com/_stat_page_cache/ http://{cache}/ @src_ip=192.168.201.17 @action=allow map http://www.ogre.com/_stat_page_stat/ http://{stat}/ map http://www.ogre.com/_stat_page_test/ http://{test}/ @src_ip=192.168.201.17 @action=allow map http://www.ogre.com/_stat_page_hostdb/ http://{hostdb}/ map http://www.ogre.com/_stat_page_net/ http://{net}/ map http://www.ogre.com/_stat_page_http/ http://{http}/ # 反向代理 2012/03/08 09:45 9/12 Apache Traffic Server研究实践 另野 - http://127.0.0.1/wiki/ map http://your.proxy.server.com http://daemonkeeper.net # 模拟URL rewrite regex_map http://([a-z\-0-9\.]+) http://daemonkeeper.com?request= class="code bash" 如果要启用监控服务器,添加 CONFIG proxy.config.http_ui_enabled INT 3 CONFIG proxy.config.http.enable_http_info INT 1 0 - Don't enable anything in the stats pages(default) 1 - Enable only the cache inspector 2 - Enable only the various stats pages (see more below) 3 - Enable both cache inspector and stats pages 到records.config map http://localhost/cache-internal/ http://{cache-internal} map http://localhost/cache/ http://{cache} map http://localhost/stat/ http://{stat} map http://localhost/test/ http://{test} map http://localhost/hostdb/ http://{hostdb} map http://localhost/net/ http://{net} map http://localhost/http/ http://{http} 到remap.config cache.config 缓存文件可以不作修改,除非在特定场合,做一些必要的处理和调整,如强制缓存/不缓存某些指定 domain或者URLS storage.config 指定数据存储的位置, ATS支持文件类型的缓存块,也可以裸设备作为缓存块 Last update: 2012/03/08 09:43 wiki:ats http://127.0.0.1/wiki/doku.php?id=wiki:ats http://127.0.0.1/wiki/ Printed on 2012/03/08 09:45 Traffic Server 父子缓存 子TS服务器 remap.config: -> map regex_map http://[a-z0-9].+.rhinux.cn:8080/ http://myownhost.myonwdomain parent.config: -> dest_domain=myownhost.myonwdomain parent="172.16.27.87:80" 如果父TS挂了需要切换到original服务器,把original 服务器也加在parent.config中的列表中 父TS服务器 remap.config: -> http://myownhost.myonwdomain/ http://172.16.27.55 Traffic Server 定制脚本 # modify by geminis config() { . /etc/53kf.cfg ATS_ETC="/opt/ats/etc/trafficserver" SED="sed -r -i" $SED "/proxy_name /s:.*:CONFIG proxy.config.proxy_name STRING $(hostname):g" $ATS_ETC/records.config $SED "/alarm_email /s:.*:CONFIG proxy.config.alarm_email STRING it_53kf@163.com:g" $ATS_ETC/records.config $SED "/http.server_port /s:.*:CONFIG proxy.config.http.server_port INT 80:g" $ATS_ETC/records.config $SED "/cache.when_to_revalidate /s:.*:CONFIG proxy.config.http.cache.when_to_revalidate INT 4:g" $ATS_ETC/records.config $SED "/cache.required_headers /s:.*:CONFIG proxy.config.http.cache.required_headers INT 1:g" $ATS_ETC/records.config $SED "/http.enable_http_stats /s:.*:CONFIG proxy.config.http.enable_http_stats INT 0:g" $ATS_ETC/records.config $SED "/http.slow.log.threshold /s:.*:CONFIG proxy.config.http.slow.log.threshold INT 0:g" $ATS_ETC/records.config $SED "/reverse_proxy.enabled /s:.*:CONFIG proxy.config.reverse_proxy.enabled INT 1:g" $ATS_ETC/records.config $SED "/url_remap.pristine_host_hdr /s:.*:CONFIG proxy.config.url_remap.pristine_host_hdr INT 1:g" $ATS_ETC/records.config $SED "/exec_thread.limit /s:.*:CONFIG proxy.config.exec_thread.limit INT 8:g" $ATS_ETC/records.config if [ ! -z "$PROXY_HOST" ];then sed -r -i '/ProxyList/d' $ATS_ETC/remap.config for LINE in $PROXY_HOST;do echo "$LINE" |grep -q ^# [ $? = 0 ] && continue DOMAIN=`echo "$LINE"|awk -F@ '{print class="code bash"}'` Last update: 2012/03/08 09:43 wiki:ats http://127.0.0.1/wiki/doku.php?id=wiki:ats http://127.0.0.1/wiki/ Printed on 2012/03/08 09:45 HOST=`echo "$DOMAIN"|awk -F. '{print class="code bash"}'` REAL=`echo "$DOMAIN"|sed -r "s/$HOST/$HOST.r/g"` STRING=$STRING"map http://$DOMAIN http://$REAL\t\t# ProxyList\n" done echo -en $STRING >> $ATS_ETC/remap.config fi } From: http://127.0.0.1/wiki/ - 另野 Permanent link: http://127.0.0.1/wiki/doku.php?id=wiki:ats Last update: 2012/03/08 09:43

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 9 人已下载

下载文档

相关文档