【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。 点击这里开始你的技术升级之旅吧
本文分享至飞腾开发者平台《基于飞腾腾云S2500的ATS部署及调优指南(反向代理篇)》
1 软件介绍
ATS全称为Apache Traffic Server,是一种高性能、模块化的HTTP缓存代理服务器。HTTP代理通常分为正向代理、反向代理和透明代理。本文主要介绍HTTP反向代理,反向代理是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内网服务器上得到的结果返回给Internet上请求连接的客户端。如下图,Traffic Server充当代理服务器,Origin Server是内网中的源服务器,整个内网对外表现为一个服务器。
(引用自https://baike.baidu.com/item/Apache Traffic Server/4075996?fr=aladdin)
2 环境要求
2.1 硬件要求
用途 | 型号 |
---|---|
代理服务器 | 飞腾腾云S2500处理器服务器 |
源服务器 | 飞腾腾云S2500处理器服务器 |
2.2 软件要求
软件名 | 对应版本 |
---|---|
trafficserver | 7.1.9 |
httpd | 2.4.49 |
LuaJIT | 2.1 |
apr | 1.7.0 |
apr-util | 1.6.1 |
pcre | 8.45 |
3 平台部署
下面将详细介绍源服务器httpd及代理服务器ATS的搭建步骤,并对平台进行验证。
3.1 部署httpd
部署httpd的步骤主要包括:
第一步,获取源码;第二步,编译安装apr;第三步,编译安装apr-util;第四步,编译安装pcre;第五步,编译安装httpd;第六步,配置httpd端口。
3.2 移植ATS
移植ATS的步骤主要包括:
第一步,获取ATS源码;
第二步,替换LuaJIT;
第三步,修复非法访问;由于7.1.9版本的ATS在aarch64上运行时存在内存地址非法访问的BUG,故而需要修改文件/home/trafficserver-7.1.9/lib/ts/ink_queue.h中的代码;
第四步,安装依赖;
第五步,编译与安装;
第六步,配置端口
第七步,配置映射;
第八步,运行验证。其中,在进行验证时,先启动apache服务;然后,启动ATS服务;最后,浏览器访问ATS代理服务器IP或域名,若成功打开网页则表示部署成功。
4 ATS调优
4.1 调优目的
通过调整ATS配置文件来有效地提高ATS应用性能。
4.2 调优方法
4.2.1 物理绑核
1. 使用numactl控制ATS使用的CPU及内存,防止ATS的manager进程跨NUMA。
numactl --cpunodebind=0,1 --membind=0,1 trafficserver start
2. 使用cgroup限制ATS线程使用的资源,防止ATS的server线程跨NUMA。
#!/bin/bash
PID=\$(pidof traffic_server)
ATS_CGROUP_CPU_DIR=/sys/fs/cgroup/cpuset/trafficserver
if [ ! -d \$ATS_CGROUP_CPU_DIR ]; then
mkdir \$ATS_CGROUP_CPU_DIR
fi
cd \$ATS_CGROUP_CPU_DIR
echo "0-15" \> cpuset.cpus
echo "0" \> cpuset.mems
echo \$PID \> cgroup.procs |
4.2.2 配置ATS线程
选项 | 说明 |
---|---|
CONFIG proxy.config.exec_thread.autoconfig INT 0 | 配置固定线程数量,不使用自动增加线程功能,配合cgroup可以有效防止线程跨片。 |
CONFIG proxy.config.exec_thread.limit INT 16 | 每个核启动16个线程。 |
CONFIG proxy.config.accept_threads INT 16 | 对数据接收使用专门的线程处理。 |
CONFIG proxy.config.task_threads INT 32 | 处理http请求的线程数量。 |
4.2.3 配置ATS缓存
文件storage.config决定了ATS磁盘缓存的组成结构,文件内容格式为:
pathname size [ volume=number ] [ id=string ]
例如:/root/ats-cache0 100G,表示ATS磁盘缓存有100G,且保存在分区/root/ats-cache0中。文件中可以指定多个分区及大小,它们共同组成ATS磁盘缓存。除了磁盘缓存,ATS还可以通过records.config文件中的proxy.config.cache.ram_cache.size选项来配置内存缓存:
CONFIG proxy.config.cache.ram_cache.size INT 10G
4.2.4 缓存预热
ATS重启或首次启动时,缓存默认为空仓状态,需要使用工具将期望被缓存的文件进行遍历访问,使缓存中包含所有期望被缓存的文件,即达到预热充分状态。预热状态可通过traffic_top工具中的Disk Used和Ram Used大小来判断,如果它们的大小不再变化则认为是充分预热。
4.3 调优示例
示例环境为一台飞腾腾云S2500处理器服务器,ATS和httpd同时部署在飞腾腾云S2500处理器服务器上,但占用端口不同,其中apache(httpd)服务器中共有两百万个数据供客户请求。使用思博伦测试仪模拟http请求,对被测服务器进行web cache性能测试,调优过程如下:
1) 默认配置下,充分预热后测出TPS为27192;
2) 将ATS线程上限增加至32个,即CONFIG proxy.config.task_threads INT
32,充分预热后测出TPS为46315;
3) 在2的基础上,固定内存缓存10G,即CONFIG proxy.config.cache.ram_cache.size INT
10G,充分预热后测出TPS为47397; 3)
4) 在3的基础上,关闭RAM历史命中检测(不管之前是否有命中都会将新数据写到RAM中),即CONFIG
proxy.config.cache.ram_cache.use_seen_filter 0,充分预热后测出TPS为53649;
5) 在4的基础上,对ATS服务进行绑核0-63,充分预热后测出TPS为60178;
6) 在5的基础上,关闭httpd的日志,充分预热后测出TPS为62210。
下表是优化前后的web cache性能测试结果:
目标项 | 优化前 | 优化后 |
---|---|---|
TPS | 27192 | 62210 |
上图是web cache性能测试结果柱形图,可以看出经过调优后的web cache性能提升显著。
5 常见问题
1. apr-util编译报错
如果报错内容如下图所示:
则通过安装expat-devel包可以解决。
推荐阅读
欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料
如开发者在使用飞腾产品有任何问题可通过在线工单联系我们
版权所有。飞腾信息技术有限公司 2023。保留所有权利。
未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。
商标声明
Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。
本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。