Flask高并发方案性能调查

Leon
2023-11-02 / 0 评论 / 12 阅读 / 正在检测是否收录...

Flask高并发方案性能调查

方案

使用flask + gevent + multiprocess + wsgi

# coding: utf-8
# code by https://cpp.la, 2020-04-20
# flask + gevent + multiprocess + wsgi

from gevent import monkey
from gevent.pywsgi import WSGIServer
monkey.patch_all()

import datetime
import os
from multiprocessing import cpu_count, Process
from flask import Flask, jsonify


app = Flask(__name__)

@app.route("/cppla", methods=['GET'])
def function_benchmark():
    return jsonify(
        {
            "status": "ok",
            "time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M'),
            "pid": os.getpid()
        }
    ), 200

def run(MULTI_PROCESS):
    if MULTI_PROCESS == False:
        WSGIServer(('0.0.0.0', 8080), app).serve_forever()
    else:
        mulserver = WSGIServer(('0.0.0.0', 8081), app)
        mulserver.start()

        def server_forever():
            mulserver.start_accepting()
            mulserver._stop_event.wait()

        for i in range(cpu_count()):
            p = Process(target=server_forever)
            p.start()

if __name__ == "__main__":
    # 单进程 + 协程
    # run(False)
    # 多进程 + 协程
    run(True)

直接部署

from gevent import monkey
monkey.patch_all()

import datetime
import os
from flask import Flask, jsonify


app = Flask(__name__)

@app.route("/cppla", methods=['GET'])
def function_benchmark():
    return jsonify(
        {
            "status": "ok",
            "time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M'),
            "pid": os.getpid()
        }
    ), 200


def run():
    app.run(debug=True, host='0.0.0.0', port=8080)


if __name__ == "__main__":
    run()

Locust压测结果

服务器环境:

腾讯云轻量应用服务器(北京),带宽5Mbps,Ubuntu 20.04.6 LTS

CPU: 64位,物理1核(1 X 1),逻辑1核,AMD EPYC ,一级缓存32K

内存:内存:1987 Mb,交换分区:0 Mb

100000用户每秒增加100进行压测,压测数据如下。

直接部署(当前LangChain部署方式)

image.png

单进程+协程

image (1).png

多进程协程

image (2).png

测试服务器负载图表

单进程+协程: 2023/11/1 18:06:36 - 2023/11/1 18:36:25

直接部署: 2023/11/1 19:14:13 - 2023/11/1 19:39:45

多进程+协程: 2023/11/1 19:50:33 - 2023/11/1 20:18:26

CPU利用率(%)_-Avg,内存利用率(%)_-Avg.png

结论

多进程+协程 > 直接部署 > 单进程+协程

0