FaaSdom
收藏无服务器计算基准测试套件
概述
该工具使用 Node.js 编写,用于对以下云服务提供商的无服务器平台进行基准测试:
- Amazon Web Services 的 AWS Lambda
- Microsoft Azure 的 Azure Functions
- Google Cloud 的 Google Cloud Functions
- IBM Cloud 的 IBM Cloud Functions
支持的编程语言包括:
可用测试
- 延迟测试: 测量一个非常简单的函数的延迟。
- CPU 测试(因子): 通过迭代计算一个数的因子来基准测试 CPU 性能。
- CPU 测试(矩阵): 通过迭代乘以两个 NxN 矩阵来基准测试 CPU 性能。
- 文件系统测试: 将一个 x kB 的文本文件写入和读取 n 次到文件系统。
- 自定义测试: 实现你自己的测试,提供模板。
安装
对于 Ubuntu 18.04,可以执行以下步骤:
bash sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" sudo apt-get update sudo apt-get install docker-ce docker-compose
将你的用户添加到 docker 组(如果不想总是使用 sudo 运行)
sudo groupadd docker sudo usermod -aG docker $USER
配置
对于每个云服务提供商,你需要创建一个账户并进行一些设置:
- AWS: Amazon Web Services Setup.md
- Azure: Microsoft Azure Setup.md
- Google: Google Cloud Setup.md
- IBM: IBM Cloud Setup.md
还需要创建一些 Docker 卷并登录到云 CLI,以便在 Docker 容器中使用。
bash
创建 5 个卷,1 个用于应用数据,4 个用于每个云的密钥
docker volume create serverless-data docker volume create aws-secrets docker volume create google-secrets docker volume create ibm-secrets docker volume create azure-secrets
将所有数据复制到 Docker 卷(重要:从项目根目录运行!)
docker run -v serverless-data:/data --name helper bschitter/alpine-with-zip:0.1 docker cp . helper:/data docker rm helper
挂载卷并使用云服务提供商登录
docker run --rm -tiv aws-secrets:/root/.aws mikesir87/aws-cli:1.16.310 aws configure docker run --rm -tiv azure-secrets:/root/.azure mcr.microsoft.com/azure-cli:2.0.78 az login docker run --rm -tiv google-secrets:/root/.config/gcloud google/cloud-sdk:274.0.1-alpine gcloud init docker run --rm -tiv ibm-secrets:/root/.bluemix ibmcom/ibm-cloud-developer-tools-amd64:0.20.0 ibmcloud login
对于 IBM,还需要设置区域、API 端点、组织和空间
docker run --rm -tiv ibm-secrets:/root/.bluemix ibmcom/ibm-cloud-developer-tools-amd64:0.20.0 ibmcloud target -r <YOUR_REGION> --cf-api https://api.<YOUR_REGION>.cf.cloud.ibm.com -o <YOUR_ORGANIZATION> -s <YOUR_SPACE>
使用
启动应用程序
在 main 文件夹中启动主应用程序:
bash docker-compose up -d db grafana app
应用程序的 Web 界面将暴露在端口 3001 http://localhost:3001
Grafana 将暴露在端口 3000 http://localhost:3000
操作
可以执行以下操作:
部署/删除
用户可以部署和删除测试。存在以下参数:
- Test: 要部署的测试
- Memory: 函数实例的内存量(不适用于 Azure)
- Timeout: 函数超时(不适用于 Azure)
- Clouds: 要部署函数的云
- Languages: 要部署的运行时
- Locations: 为每个云选择区域
Deploy 按钮将启动部署过程,Cleanup All 按钮将清理所有内容。状态可以在右侧查看。
重要提示: 清理过程将删除 AWS 上的所有 API 网关和 Lambda 函数,Azure 上包含测试名称的所有资源组,Google 上配置项目的所有函数,以及 IBM 上的所有函数和网关。请谨慎使用!
运行比较测试
运行比较测试。存在以下参数:
- Test name: 用于标识测试的名称
- Function dependant paramters: 各种函数依赖参数
可以使用 Run 按钮启动测试,使用 Stop 按钮停止测试。结果将在 Grafana 中查看。
运行基准测试
为已部署的函数运行负载测试。存在以下参数:
- Requests per second: 每秒发送的请求数
- Duration: 基准测试的持续时间
- Test: 要基准测试的测试
- N: 函数依赖参数
- Test name: 用于标识测试的名称
应用程序将使用 wrk2 对已部署的函数进行基准测试。结果将在 Grafana 中查看。
计算理论定价
通过提供以下参数计算假设价格:
- Calls: 每月调用次数
- Execution Time: 函数的估计执行时间(以毫秒为单位)
- Return Size: 返回的函数体的大小(以 KB 为单位)
- Memory: 为函数选择的内存分配
Calculate / Update 按钮将进行计算,结果将显示在右侧。
根据测试计算定价
根据特定测试计算价格:
- Calls: 每月调用次数
- Test: 因子、矩阵、自定义
- Test Name: 比较测试期间给出的名称
- Runtime: 要计算的运行时
Calculate / Update 按钮将进行计算,结果将显示在右侧。
清理
停止并删除容器:
bash docker-compose down
删除所有镜像:
bash docker rmi $(docker images -q)
删除所有卷:
bash docker volume rm $(docker volume ls -q)
故障排除
IBM
- 有时删除函数时,ibmcloud CLI 会无法加载资源,因此程序无法正确删除资源。这通常发生在长时间未使用后第一次使用时。
- IBM Cloud 使用一个会过期的身份验证令牌。一段时间后,你需要重新登录并配置。请参阅 Configure 部分。
- 有时 IBM CLI 会返回错误
Unable to create API: Request accepted, but processing not completed yet.,但函数很可能会正确部署。
Azure
- Azure 的超时参数目前被忽略,因为部署机制的实现方式不容易支持它。




