FastAPI + Vuejsで230 msで1000リクエストを出す


私はboilerplate project FastAPIとVueと私は好奇心旺盛な初期の静的ファイル(単一のページアプリケーションのために必要な)を提供するハンドルを扱うことができます.
我々がサーブしているベルdist フォルダを実行した後npm run build 寸法~600kb ). FastapiのためのDockerイメージは、Sebasti - N N RAM Three Rzからとられました.
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates

app = FastAPI()

# Mounting default Vue files after running npm run build 
app.mount("/dist", StaticFiles(directory="dist/"), name="dist")
app.mount("/css", StaticFiles(directory="dist/css"), name="css")
app.mount("/img", StaticFiles(directory="dist/img"), name="img")
app.mount("/js", StaticFiles(directory="dist/js"), name="js")

templates = Jinja2Templates(directory="dist")

@app.get("/", response_class=HTMLResponse)
async def root(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})
以下に使用したgunicornコマンドを示します.
gunicorn main:app --workers=8 -b "0.0.0.0:3000" --worker-class=uvicorn.workers.UvicornWorker --log-level info
負荷テストをしましたbaton 負荷試験のためのGolang CLIツール
フラッグ-c 同時リクエスト数とフラグの数を表す-r はリクエストの数です.
1000リクエストで包囲を始めましょう
>> baton -u http://localhost:3000 -c 10 -r 1000
====================== Results ======================
Total requests:                                  1000
Time taken to complete requests:         236.375341ms
Requests per second:                             4231
===================== Breakdown =====================
Number of connection errors:                        0
Number of 1xx responses:                            0
Number of 2xx responses:                         1000
Number of 3xx responses:                            0
Number of 4xx responses:                            0
Number of 5xx responses:                            0
=====================================================
ルックスかなり良い:1000の要求は約230 msで終了しました.
10 Kリクエストを試してみましょう.
baton -u http://localhost:3000 -c 10 -r 10000
====================== Results ======================
Total requests:                                 10000
Time taken to complete requests:         2.526745739s
Requests per second:                             3958
===================== Breakdown =====================
Number of connection errors:                        0
Number of 1xx responses:                            0
Number of 2xx responses:                        10000
Number of 3xx responses:                            0
Number of 4xx responses:                            0
Number of 5xx responses:                            0
=====================================================
10.000の要求は約2.6 sで終了!
もちろん、実際の生活ではこれは起こりません.ネットワークの速度、サーバー上の追加処理などが干渉する要因がたくさんあります.また、私はこの設定からNGinxを省略します.これは生産において必須のもので、そうでなければDOS攻撃を危険にさらします.
ロードテストは、インテルi 5、8 GBのRAM、SSDとラップトップで実行されました.