介绍
电子商务搜索基准是第一个具有个性化推荐的电子商务搜索系统的端到端应用基准。帮助人们深入了解电商搜索工作负载的特点,为行业搜索系统提供更好的设计选择。以及提供电子商务在线搜索服务的软件系统。因此,这些系统中的任何一个都可以用来建立这个基准的可行性。
基准的特点:
- 使用真实世界的数据集提供数据生成器并生成各种规模的合成数据。
- 提供一个由淘宝真实世界用户日志驱动的工作负载生成器。
- 提供模拟淘宝搜索系统的电子商务搜索模型eSearchEngineModel。
- 评估单个组件的整体性能和性能。
电子商务搜索基准建立在 docker 镜像之上。如上图所示,benchmark由7个docker镜像组成:
- aliesearch-search-planner
- aliesearch-查询-规划器
- aliesearch-tf-serving
- aliesearch-ha3
- aliesearch-ranking-service
- aliesearch-jmeter-image
- aliesearch-基准-cli
其中,图片 1~5 构成电子商务搜索模型eSearchEngineModel,aliesearch-benchmark-cli
是Data Generator,aliesearch-jmeter-image
将Workload Generator生成的工作负载驱动到电子商务搜索模型eSearchEngineModel。
准备
依赖
需要以下构建工具:
- 毕业 4.x
- 行家 3.x
- 码头工人 17.09+
- jdk8
注意:确保您可以在不
sudo
运行的情况下使用 docker
sudo usermod -aG docker $USER
建造
build.sh
在eSearchEngineModel
目录中运行以构建和发布图像等。
- 编译和构建 docker 镜像
./build.sh build
将 docker 镜像发布到指定的远程 docker 重新定位。如果只在本地运行,可以跳过这一步。
./build.sh push ${repo_name}
运行基准
笔记:
必须需要正确的 java 最大内存大小值,否则 docker 图像将无法工作。您可以通过运行将其设置为临时
sudo sysctl -w vm.max_map_count=262144
或者您可以通过直接
/etc/sysctl.conf
在主机上编辑文件来将其设置为永久,添加如下一行:
vm.max_map_count = 262144
然后运行
sysctl -p
独立运行示例
appctl.sh
将此目录复制到您的工作目录;- 通过运行拉取所有镜像:(如果您只在本地运行,请跳过此步骤。)
sudo ./appctl.sh pull
通过运行以下命令启动所有图像并自动导入默认数据:
sudo ./appctl.sh start
通过在任何 docker 中运行以下命令来检查所有图像是否已准备好工作:
sudo docker exec -it aliesearch-jmeter-image bash curl -H 'Content-Type:application/json;charset=UTF-8' -d' {"uid":"798", "page":0, "query":"68"}' ${search_planner_ip}:8080/search
通过 jmeter 运行示例实验:
- 运行以下命令登录到“jmeter-image”:
sudo docker exec -it aliesearch-jmeter-image bash
- 运行通过运行来启动压力测试过程:
cd apache-jmeter-5.1.1 ./bin/jmeter -n -t search_stress.jmx -l result -e -o report
在 k8s 上运行示例
还提供了依赖k8s的分布式部署,更符合线上环境。基准测试可以在 k8s 集群上运行,如下所示:
- 复制
k8s.yml
到 k8s 主节点上的工作目录。 k8s.yml
用你自己的 repo替换 docker images repo 配置- 通过运行以下命令拉取所有图像并自动导入默认数据:
sudo kubectl create -f k8s.yml
- 通过运行以下命令检查 Pod 状态以确保所有 Pod 正常启动:
sudo kubectl get pod
- 通过 jmeter 运行示例实验:
- 登录到 jmeter pod
sudo kubectl exec -it aliesearch-jmeter-image bash
- 运行开始压力测试过程
cd apache-jmeter-5.1.1 ./bin/jmeter -n -t search_stress.jmx -l result -e -o report
以自定义模式运行
该基准测试附带了一个电子商务数据生成器和工作负载生成器,它们由生产数据和实际用户查询驱动。使用自定义数据规模和工作负载模式运行实验有 4 个步骤。
1. 安装基准
按照中的1~3步启动benchmark的所有图片 Running Example in standalone
2. 数据生成
benchmark-cli
通过运行登录到图像:
须藤docker exec -ti aliesearch-benchmark-cli bash
生成商品和用户数据,通过运行将它们加载到相应的搜索组件中:
vim入口点.sh
sh entrypoint.sh ${scale_factor}
其中,${scale_factor}设置决定数据集大小的比例因子(1 比例因子等于 10K 商品和 6K 用户,10 比例因子等于 100K 商品和 60K 用户,以此类推)
3. 工作负载生成
切换到目录workload_generator
,并为一天的指定开始时间 (-t)、工作负载的持续时间 (-d)、要生成的工作负载因子 (-f) 和用户规模 (-u) 生成工作负载,通过运行:
python3workload_generator.py -t 21 -d 1800 -f 0.1 -u 100000
workload_u100000_h21_d1800_f0.1.csv
目录下会生成一个文件workload_generator
,驱动到被测系统模型中(例如eSearchEngineModel)。
4.通过jmeter运行实验
首先,将生成的工作负载文件复制query_workload.csv
到jmeter docker中的jmeter路径( apache-jmeter-5.1.1/bin/jmeter
)。然后,通过运行以下命令登录到“jmeter-image”:
须藤docker exec -ti aliesearch-jmeter-image bash
并切换到 jmeter bin 目录,通过运行以下命令启动压力测试过程:
cd apache-jmeter-5.1.1
./bin/jmeter -n -t search_stress.jmx -l 结果 -e -o 报告
批量运行Benchmark
- 将目录更改为 ./run-scripts;
- 拉取或构建所有镜像
- 使用默认数据集启动所有图像
- 独立运行 Benchmark,运行:
./deploy_standalone.sh start
- 要在集群中运行 Benchmark,请运行:
./deploy_cluster.sh 启动
with specified ip address for each docker in the `multi_iplist_env.sh` file
通过运行以下命令检查所有图像是否已准备好工作:
curl -H 'Content-Type:application/json;charset=UTF-8' -d' {"uid":"798", "page":0, "query":"68"}' ${search_planner_ip}:8080/search
通过在指定的情况下运行以下脚本来批量运行实验:
./run_batch_cluster.sh
分析收集到的结果./run-scripts/jmeter_result
:
./run-scripts/jmeter_result
通过运行以下命令更改目录并预处理结果日志:
./result_stat.sh
- 结果包括 QPS、响应时间、响应时间的延迟细分、系统指标等。
在基于 arm64v8 的平台上运行 Benchmark
build.sh
在eSearchEngineModel
基于 arm64v8 的平台上运行时,in目录支持为基于 arm64v8 的平台构建映像。并且所有的实验都可以按照上面描述的步骤在基于 arm64v8 的平台上运行。