Apache Traffic Server服务搭建
一、简介
Apache Traffic Server(ATS或TS)是一个高性能的、模块化的HTTP代理和缓存服务器,与 Nginx 和 Squid 类似。它通过将频繁访问的信息缓存在网络的边缘来改善网络的效率和性能,使得访问内容在地里上更接近终端用户,在更快分发的同事也减少带宽的占用。 Apache TrafficServer 现在是一个开源项目,开发语言为C++。
二、功能
Apache Traffic Server是个快速、可伸缩、可扩展、兼容于HTTP/1.1缓存代理的服务器,它具有如下特色:
缓存:改进响应时间的同时降低了服务器负载与对带宽的需求,这是通过缓存并且重用经常请求的网页、图片和Web Service调用实现的。
代理:很容易添加持续连接、过滤器或异步内容请求,还可以通过添加代理层实现负载平衡。
速度:在现代的SMP硬件上具有很好的可伸缩性,每秒钟可以处理数以万计的请求。
可扩展性:API考虑到了自定义插件,可以修改头与内容,还可以实现新的协议处理器。
可靠性:能够完美处理TB级别的数据,包括正向与反向代理。
三、ATS部署选项
- 作为一个反向代理
- 作为一个web代理缓存
- 部署在多级缓存
ATS作为反向代理
作为反向代理,ATS需要配置为用户直接连接的源服务器(典型的用法是将源服务器的主机名解析到ATS),反向代理的功能也被叫做服务器加速。
ATS作为web代理缓存
作为web代理缓存,ATS接收用户直接发往源站的web内容请求。如果ATS包含请求的内容,它将直接提供服务。如果请求的内容不再缓存里,ATS将作为一个代理;为用户从源站服务器获取请求的内容,并在本地保存一份拷贝以服务于将来相同的请求。
ATS作为多级缓存
ATS可以灵活地参与多级缓存,当internet请求不能在一个缓存中得到满足的时候,将被路由到其他区域的缓存,从而利用附近缓存的内容。在一个多级代理中,ATS可以作为其他ATS系统或者其他相似的缓存产品的父节点或者子节点。
四、ATS安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #官网 https://trafficserver.apache.org/ 安装环境 yum install 'liblz*' -y yum install net-tools -y yum install gcc gcc-c++ glibc-devel -y yum install autoconf automake pkgconfig libtool -y yum install perl-ExtUtils-MakeMaker perl-URI.noarch -y yum install openssl-devel tcl-devel expat-devel -y yum install pcre pcre-devel zlib-devel xz-devel -y yum install libcap libcap-devel flex hwloc hwloc-devel -y yum install lua-devel curl curl-devel sqlite-devel bzip 2 -y 1 .安装pcre [root@web_ 01 pcre -8.36 ]# wget http://ftp.exim.llorien.org/pcre/pcre -8.36 .tar.gz [root@web_ 01 pcre -8.36 ]# tar xf pcre -8.36 .tar.gz [root@web_ 01 pcre -8.36 ]# cd pcre -8.36 [root@web_ 01 pcre -8.36 ]# ./configure --prefix=/usr/ local /trafficserver/pcre [root@web_ 01 pcre -8.36 ]# make && make instal 2 .安装trafficserver [root@web_ 01 ~]# cd /usr/ local /src/ [root@web_ 01 src]# wget https://mirrors.aliyun.com/apache/trafficserver/trafficserver -5.3 . 2 .tar.bz 2 [root@web_ 01 pcre -8.36 ]# tar xf trafficserver -5.3 . 2 .tar.bz 2 [root@web_ 01 pcre -8.36 ]# cd trafficserver -5.3 . 2 [root@web_ 01 trafficserver -5.3 . 2 ]# ./configure --prefix=/usr/ local /trafficserver --with-pcre=/usr/ local /trafficserver/pcre --enable-example-plugins --enable-experimental-plugins [root@web_ 01 trafficserver -5.3 . 2 ]# make && make install 注:--enable-example-plugins --enable-experimental-plugins 这两条指令是为了安装ATS官方集成的插件 [root@web_ 01 trafficserver -5.3 . 2 ]# cd /usr/ local /trafficserver/bin/ [root@web_ 01 bin]# ./trafficserver start Starting Apache Traffic Server: [ Ok |
五、Traffic Server进程管理
1 2 3 4 | [root@localhost ~]# ps aux|grep traffic root 7469 0.0 0.0 129628 7248 ? Ssl 04: 57 0: 02 /usr/ local /tcacheserver/bin/traffic_cop 176 7472 0.0 0.0 501692 19660 ? Sl 04: 57 0: 30 /usr/ local /tcacheserver/bin/traffic_manager 176 7482 19.8 20.8 15253324 10279168 ? Sl 04: 57 118: 31 /usr/ local /tcacheserver/bin/traffic_server |
我们可以看到ATS服务启动了三个进程(traffic_cop、traffic_manager、traffic_server)来服务ats请求,管理,控制、监控系统的健康情况,如下图1所述:
- traffic_server 进程是ATS的事务处理引擎。负责接收和处理协议请求以及从本地缓存或源服务器提供资源。
- traffic_manager进程是用来命令和控制ATS的工具,负责启动、监控以及重新配置端口、统计接口、集群管理以及VIP故障转移。
如果traffic_manager进程检测到traffic_server进程失败,它不仅会立即重启该进程,而且会为所有转入的请求维护一个连接队列。在traffic_server重新启动前的几秒内传入的所有连接将被保存在一个队列,并以FIFO的方式处理,这个连接队列接收任何server故障重启时的连接。
- traffic_top进程监控traffic_server和traffic_manager进程的健康状况。
traffic_top进程通过抓取合成web页面的心跳请求方式周期性地(每分钟若干次)查询traffic_server和traffic_manager进程。如果失败事件发生(如果在超过时间间隔内没有收到请求或者收到错误的请求)traffic_top重启traffic_server和traffic_manager。
简单配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #修改records.config文件 # 25 行 CONFIG proxy.config.http.server_ports STRING 80 # 29 行 CONFIG proxy.config.http.insert_response_via_str INT 2 #添加 CONFIG proxy.config.log.custom_logs_enabled INT 1 #添加 CONFIG proxy.config.log.xml_config_file STRING logs_xml.config #添加 CONFIG proxy.config.diags.show_location INT 1 #修改remap.config文件添加如下: regex_map http://(.*) http://$ 1 #修改logs_xml.config文件添加如下: <LogFormat> <Name = "ats_access_log" /> <Format = "%<cqtd>/%<cqtt> %<cqhm> \"%<cquuc>\" %<pssc> %<ttms> %<cqhl> %<psql> %<crc> \"%<chi>\" %<pqsn> \"%<{Referer}cqh>\" \"%<psct>\" \"%<{User-agent}cqh>\" %<csssc> %<pqsi>"/> </LogFormat> <LogObject> <Format = "ats_access_log" /> <Filename = "access" /> <Protocols = "http" /> <RollingEnabled = "3" /> <RollingIntervalSec = "7200" /> <RollingSizeMb = "2048" /> </LogObject> #修改storage.config文件 var/trafficserver 4 G #重启服务 [root@controller bin]# pwd /usr/ local /trafficserver/bin [root@controller bin]# ./trafficserver restart #测试 [root@controller bin]# curl -vx 127.0 . 0.1: 80 -o /dev/null 'http://news.sohu.com/' * About to connect() to proxy 127.0 . 0.1 port 80 (# 0 ) * Trying 127.0 . 0.1 ... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 * Connected to 127.0 . 0.1 ( 127.0 . 0.1 ) port 80 (# 0 ) > GET http://news.sohu.com/ HTTP/ 1.1 > User-Agent: curl/ 7.29 . 0 > Host: news.sohu.com > Accept: */* > Proxy-Connection: Keep-Alive > < HTTP/ 1.1 200 OK < Content-Type: text/html;charset=UTF -8 < Content-Length: 170289 < Server: ATS/ 5.3 . 2 < Date: Fri, 01 Dec 2017 03: 26: 44 GMT < Cache-Control: max-age= 120 < X-From-Sohu: X-SRC-Cached < FSS-Cache: EXPIRED from 9206494.16415464 . 10543436 < Accept-Ranges: bytes < FSS-Proxy: Powered by 3308164.4618894 . 4645016 < Age: 0 < Proxy-Connection: keep-alive < Via: http/ 1.1 controller (ApacheTrafficServer/ 5.3 . 2 [cSsSfU]) < { [data not shown] 100 166 k 100 166 k 0 0 152 k 0 0: 00: 01 0: 00: 01 --:--:-- 152 k * Connection # 0 to host 127.0 . 0.1 left intact |
查看运行情况:
1 | [root@controller bin]# ./traffic_top |
如对您有帮助,支持下呗!
微信

支付宝

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类