som*_*141 6 python rest concurrency gevent gunicorn
可以说我有两个概念上不同的REST API,它们是通过Flask或Falcon之类的框架在Python中开发的,我需要通过Gunicorn在具有4GB RAM和2个vCPU的服务器上进行部署。
对该API的请求几乎不涉及任何IO,而是受CPU限制。但是,这些运算非常快并且需要很少的存储空间,例如简单的数学运算。
对该API的请求涉及一系列HTTP请求,例如,对另一个API的请求或通过GET请求获取页面。因此,大部分“工作”都涉及等待其他请求解决。
我的问题是:最佳的Gunicorn工作程序配置(工作程序编号和类)是什么,以便从上述服务器上部署的这些API中获得最佳性能(最好是在并发和每秒请求方面)?
反身我会选择一些gevent级的工人,但是我一直在寻找文档来验证上述决定,但无济于事。
任何输入将不胜感激:)
基本上,您需要两件事:并行性和异步。
Gunicorn处理请求的方式是允许每个工作人员处理一个请求。因此,在应用程序前面没有“缓冲区”来处理溢出,并且也没有解决可能的“打雷”问题的解决方案(请参阅此处)。
您将需要运行2个不同的gunicorn实例,每个实例都运行API之一。
理想情况下,应该对每个API的可能负载进行大致估算,因为在这种情况下,并行性非常有限(实际上2个vcore并不多),因此,CPU将成为每个工作人员的瓶颈。
给定gunicorn文档建议(内核数为2 * nr + 1),我将尝试从这里开始,并假设它可能会使服务器超载:
#for API1
workers = 4
worker_class = sync
threads = 2
#for API2
workers = 10
worker_class = gevent
Run Code Online (Sandbox Code Playgroud)
您将不得不根据服务器负载,IO流量和内存可用性来扭曲和调整这些值。您应该使用旨在模拟对两个API同时发出的一系列请求的脚本来测试负载响应(您可以为此使用grequests)。
| 归档时间: |
|
| 查看次数: |
2394 次 |
| 最近记录: |