Apache Traffic Server 简介_freshness_limit-程序员宅基地

技术标签: ATS  apache  Apache Traffic Serve  缓存服务  

 介绍

Apache Traffic ServerATSTS)是一个高性能的、模块化的 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

 

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

        Traffic Server 在 Yahoo 内部使用了超过 4 年,主要用于 CDN 服务,CDN 用于分发特定的HTTP 内容,通常是静态的内容如图片、JavaScriptCSS下面是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 进程。
    Apache <wbr>Traffic <wbr>Server <wbr>简介

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 开源后添加了 64 位支持,也移植到了常见的 Linux 发行版、FreeBSD、OpenSolaris 和 Mac OS X,开源之前 Yahoo Traffic Server 一直运行在 32-bit Linux 上。

 

(以 Apache Traffic Server 2.1.1 unstable 为例在 32-bit Linux 环境下进行安装测试)

 

安装

 

1. 下载、解压

 

wget http://www.apache.org/dist/trafficserver/trafficserver-2.1.1-unstable.tar.bz2

wget http://www.apache.org/dist/trafficserver/trafficserver-2.1.1-unstable.tar.bz2.md5

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

插件

 

 

初步配置

 

records.config 是 key-value 格式的配置文件,负责大部分全局的选项设置,即主配置文件。

storage.config 用于指定磁盘存储。

remap.config   定义映射规则,用于请求的重写(rewrite),反向代理即在此配置。

  • records.config 中关键的配置

    CONFIG proxy.config.exec_thread.autoconfig INT 1

    CONFIG proxy.config.exec_thread.autoconfig.scale FLOAT 2.0

    CONFIG proxy.config.exec_thread.limit INT 2   # 经观察是每个核创建的线程数,官方文档中未提及

     

    CONFIG proxy.config.cluster.ethernet_interface STRING eth0 # 设置以太网接口

    CONFIG proxy.config.http.server_port INT 8080  # 监听端口,反向代理通常为80

    LOCAL proxy.local.incoming_ip_to_bind STRING 0.0.0.0 # 绑定的 IP,可省略,默认即为 0.0.0.0

     

    CONFIG proxy.config.http.cache.http INT 1 # 打开缓存功能

    CONFIG proxy.config.cache.ram_cache.size INT 512M  # RAM 缓存大小

     

    CONFIG proxy.config.reverse_proxy.enabled INT 1   # 打开

    CONFIG proxy.config.url_remap.remap_required INT 1 # 1为只反向代理,0为正向+反向代理

    CONFIG proxy.config.url_remap.pristine_host_hdr INT 0

     

    CONFIG proxy.config.ssl.enabled INT 0 # 关闭SSL

    CONFIG proxy.config.ssl.server.cert.filename STRING server.pem

     

    CONFIG proxy.config.http.server_max_connections INT 2000  # 同源服务器的最大连接数

    CONFIG proxy.config.http.keep_alive_no_activity_timeout_out INT 60 # 当一个事务结束后同原服务器保持连接的时间

     

  • remap.config  配置

 

         map http://cdn.example.com/js           http://js.example.com  # 通过 DNS 轮询可实现负载均衡

         reverse_map http://js.example.com     http://cdn.example.com/js   # reverse_map 能在源服务器 有HTTP 重定向跳转时,修改重定向请求,即重写 Location 头部内容

 

        map http://cdn.example.com/css        http://css.example.com

        reverse_map http://css.example.com  http://cdn.exampe.com/css

 

        map http://cdn.example.com/img        http://img.example.com

        reverse_map http://img.example.com  http://cdn.example.com/img

 

  •  storage.config 配置

    /data1 67108864   # 指定一个或多个目录,注明缓存大小,也可直接指定 raw 分区,详见storage.config 中的注释说明

 

更详细的配置可参考官方管理指南 http://trafficserver.apache.org/docs/v2/admin/

服务控制

  • 运行  /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     (变量名见 records.config
  • 不重启 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 未来将在很多场景中替代传统的代理和缓存服务器而成为大家的首选。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq942477618/article/details/53410134

智能推荐

Android音视频技术1--Android SurfaceView使用_surfaceview 首帧渲染回调-程序员宅基地

文章浏览阅读283次。开篇提到视频数据源渲染提到过SurfaceView,SurfaceView是Android提供的渲染图形类。一.SurfaceView简介Android平台图形渲染类。 主要由于游戏场景,适合频发绘制刷新的View。 Surfaceview可用于工作线程刷新View。 普通View为被动刷新,主动刷新则选择SurfaceView。二.SurfaceView与View的区别Sur..._surfaceview 首帧渲染回调

SpringMVC_@ControllerAdvice_springmvc controlleradvice-程序员宅基地

文章浏览阅读133次。SpringMVC_@ControllerAdvice一.全局异常处理二.全局数据绑定三.全局数据预处理新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表F..._springmvc controlleradvice

[LQR简要快速入门]+[一级倒立摆的LQR控制]-程序员宅基地

文章浏览阅读8k次,点赞34次,收藏127次。[LQR简要快速入门]+[一级倒立摆的LQR控制]1. 什么是LQR2. 公式含义3. 倒立摆的建模3.1 线性化3.2 状态空间建立4. LQR算法实现5. MATLAB代码仿真6. 优缺点1. 什么是LQRLQR是一种最优控制算法,简要讲即为寻求一种算法,使得在满足系统稳定性能的同时,系统在达到稳定的过程中消耗的能量也最少(具有实际意义)。利用最优控制理论的知识可以知道,既然要达到两个指标(1. 性能;2. 能量)的最优,可以很容易列出积分形式的最优指标:J=∫0∞(xTQx+uTRu)dt(1_lqr

anaconda: import numpy报错:ImportError: DLL load failed: 找不到指定的模块_anaconda import numpy 模块错误-程序员宅基地

文章浏览阅读795次。anaconda: import numpy报错:ImportError: DLL load failed: 找不到指定的模块在使用vscode 和anaconda时,在vscode中 import numpy,出现了以上报错可以查看是否未添加anaconda的环境变量具体参考如下文章,如何配置环境变量https://blog.csdn.net/Buster001/article/details/90025712..._anaconda import numpy 模块错误

c钩子库Minhook的使用_minihook使用 vs-程序员宅基地

文章浏览阅读5.4k次。简述最近在学习钩子库,逛了一下gay hub,发现了一个项目minhook,纯钩子库,甚合我意,就研究了一下,写了2个例子。后续打算研究一下这个钩子库的源代码,了解一下具体怎么实现的。例子例子就不贴到这上面了,给出github地址:minhook钩子库的使用示例例子vs2008编译通过,使用的dll,lib文件都是从minhook项目编译而来。minhook项目github地址..._minihook使用 vs

python 发布包_如何将自己的Python包发布到PyPI-程序员宅基地

文章浏览阅读150次。以前写过一篇类似的文章: 如何打包自己的项目并且发布到pypi上,不过由于PyPI进行了一些更新,因此旧方法不大适用了。趁端午有时间,想把haipproxy的客户端发布到PyPI,以改进用户体验,因此这次又尝试了如何将Python包发布到新版本的PyPI上。编写setup.py以haipproxy为例,它的setup.py如下from os import path as os_pathfrom s..._如何将python包推送到pipy

随便推点

RCE远程命令执行漏洞挖掘思路_rce漏洞挖掘-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏19次。RCE漏洞存在的地方包括:在url参数上,文件下载处,在查看图片,查看文件等地方在文件删除上,SSRF可能存在的地方,变量参数提交的地方等_rce漏洞挖掘

[数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念_ods层-程序员宅基地

文章浏览阅读10w+次,点赞118次,收藏518次。ODS是什么?ODS 全称是 Operational Data Store,操作数据存储.“面向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。但是,这一层面的数据却不等同于原始数据。在源数据装入这一层时,要进行诸如去噪(例如有一条数据中人的年龄是 300 岁,这种属于异常数据,就需要提前做一些处理)、去重(例如在个人资料表中,同一 ID 却有两条重复_ods层

Lucene介绍与使用-程序员宅基地

文章浏览阅读9.1w次,点赞237次,收藏928次。1、了解搜索技术1.1 什么是搜索简单的说,搜索就是搜寻、查找,在IT行业中就是指用户输入关键字,通过相应的算法,查询并返回用户所需要的信息。1.2 普通的数据库搜索类似:select * from 表名 where 字段名 like ‘%关键字%’例如:select * from article where content like ’%here%’结果: where here..._lucene

一个简单的协议定制_parseline-程序员宅基地

文章浏览阅读262次,点赞8次,收藏4次。socket、序列化和反序列化、自定义协议、一般服务器设计原则和各种场景_parseline

【RT-Thread】学习日记之系统节拍Tick_rt_tick_get-程序员宅基地

文章浏览阅读715次。RT-Thread 学习日记之系统节拍Tick_rt_tick_get

MySQL数据库——高级查询语句_mysql高级查询语句-程序员宅基地

文章浏览阅读5k次,点赞17次,收藏94次。数据库是用来存储数据,更新,查询数据的工具,而查询数据是一个数据库最为核心的功能,数据库是用来承载信息,而信息是用来分析和查看的。例:SELECT A.Store_Name Store, SUM(A.Sales) “Total Sales” FROM fxk003 A GROUP BY A.Store_Name;例:SELECT Store_Name, SUM(Sales) FROM fxk003 GROUP BY Store_Name HAVING SUM(Sales) > 1500;_mysql高级查询语句

推荐文章

热门文章

相关标签