fastapi项目部署与golang性能粗略对比(娱乐模式)

目录

  • 概述
  • 结论
  • 代码
    • golang
    • python代码
  • 部署说明
    • python部署
  • 后记

概述

这是一个粗略的fastapi和gin的性能对比。
测试的时候基本上不涉及数据库访问,单纯考虑的是语言和框架自身的性能。
先上代码(项目地址:https://github.com/Chise1/fastapi_vs_gin.git)。
tips:这个项目随便写的,是在学习golang的时候看到的,拿过来改吧改吧就做个比较。

结论

gin和fastapi的性能差并没有想象中的那么大,在考虑到数据库的影响的时候,这点性能差是完全可以接受的。
在开发商省掉的时间完全可以弥补服务器上需要的额外费用。
使用wrk测试的:

在我自己的笔记本上的结果: python:

root@cs:~/wrk# ./wrk -t80 -c200 -d30s --latency http://127.0.0.1:8000/getOne
Running 30s test @ http://127.0.0.1:8000/getOne
  80 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    65.75ms   30.52ms 324.83ms   73.11%
    Req/Sec    30.68     12.01    90.00     80.93%
  Latency Distribution
     50%   60.80ms
     75%   82.29ms
     90%  103.94ms
     99%  160.36ms
  73394 requests in 30.10s, 8.99MB read
Requests/sec:   2437.98
Transfer/sec:    305.83KB

golang:

root@cs:~/wrk# ./wrk -t80 -c200 -d30s --latency http://127.0.0.1:8080/getOne
Running 30s test @ http://127.0.0.1:8080/getOne
  80 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    46.67ms   48.89ms 550.70ms   86.42%
    Req/Sec    50.43     29.29   250.00     64.74%
  Latency Distribution
     50%   36.64ms
     75%   69.47ms
     90%  108.03ms
     99%  211.33ms
  119883 requests in 30.10s, 13.72MB read
Requests/sec:   3982.66
Transfer/sec:    466.72KB

代码

golang

package main

import (
	"github.com/gin-gonic/gin"
)

func GetProduct(ctx *gin.Context) {
	ctx.Writer.Write([]byte("true"))

}
func main() {
	r:=gin.Default()
	r.GET("/getOne",GetProduct)
	r.Run()
}
//压测工具 wrk

python代码

from fastapi import FastAPI

app = FastAPI()

@app.get("/getOne")
def get_product():
    return True

部署说明

python采用了guvicorn进行部署,因为golang自动会利用多核,所以这块就不考虑了。
具体部署

python部署

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8
LABEL maintainer="Chise "
RUN pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/
ENV POETRY_VIRTUALENVS_CREATE=false
RUN pip3 install poetry
COPY pyproject.toml poetry.lock /app/
RUN poetry install --no-root --no-dev
COPY . /app

docker-compose

version: '3'
services:
  wrkt:
    build: .
    environment:
      MODULE_NAME: main.py
      VARIABLE_NAME: "app"
      APP_MODULE: main:app
      PORT: 8000
    ports:
      - '8000:8000'
    image: wrkt
    command: "/start.sh"

后记

对golang的部署还不熟,希望有大佬可以指正我的问题。

你可能感兴趣的:(fastapi,golang)