【发布时间】:2021-09-30 07:53:26
【问题描述】:
容器 1 中的 API 1 --> 容器 2 中的 API 2
我在一个 docker 容器中有一个简单的 FastAPI REST API (API 1) 调用另一个 docker 容器中的另一个简单的 FastAPI REST API (API 2)。调用是通过 requests 包进行的。
当我对 API 2 (ab -n 10000 -c 500 http://[url of API 2]) 执行 Apache Benchmark 测试时,每秒的 (RPS) 请求约为 4600。但是,当我执行API 1 上的相同 apache 基准测试(ab -n 10000 -c 500 http://[API 1 的 URL]),尽管 API 1 只是对 API2 的简单 requests.post 调用,但 RPS 下降到 1350 左右,没有任何处理逻辑。我不明白为什么嵌套调用会如此大幅度地降低 RPS
容器 0 中的 API 0 --> 容器 1 中的 API 1 --> 容器 2 中的 API 2
为了进一步证实我的观察,我在另一个 docker 容器中创建了另一个 FastAPI REST API 0,其中包含对 API 1 的简单 request.post 调用。apache 基准测试(ab -n 10000 -c 500 http://[ API 0]) 的 url 进一步减慢到 RPS 530
我可以知道原因吗?我认为对 FastAPI REST API 的 http 请求调用不应该在一系列嵌套调用中增加那么多开销
在我的微服务分布式应用程序中,我有多个微服务托管在不同的容器中,因此来自客户端浏览器的某些请求处理可能会导致微服务之间的嵌套调用(例如,客户端浏览器调用 A、A 调用 B、B 调用 C)
【问题讨论】:
-
附加信息——每个容器(Alpine)中的 FastAPI REST API 由运行 uvicorn.workers.UvicornWorker 工作人员的 Gunicorn 提供支持。我在不同的 docker 容器中托管 REST API 的原因是为了模仿 K8s 中的 pod。最终我想在 K8s 上运行它
标签: docker python-requests nested benchmarking fastapi