V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Phishion
V2EX  ›  Web Dev

请问占用资源比较小的 Web 框架有哪些

  •  
  •   Phishion · 2021-07-16 12:12:13 +08:00 · 7489 次点击
    这是一个创建于 1231 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的服务器就 512M 内存,想跑一个非常简单的 Web 框架,当然也得有数据库和网页服务器这样的

    需求大概就跑一个极少几个人访问的 API 服务,能满足最基本的 POST GET 数据库增删改就成,学习门槛可不要太高。

    请问哪些搭配能符合这样的,最好是 Python,PHP 我也可以看看,谢谢各位!

    57 条回复    2021-07-19 20:47:08 +08:00
    christopheredwar
        1
    christopheredwar  
       2021-07-16 12:21:20 +08:00
    flask
    0ZXYDDu796nVCFxq
        2
    0ZXYDDu796nVCFxq  
       2021-07-16 12:23:44 +08:00
    API 不是很耗性能(CPU, 内存)的话,你这个量其实不需要考虑占用资源的问题
    Rache1
        3
    Rache1  
       2021-07-16 12:41:09 +08:00
    云函数不更合适吗 😃
    learningman
        4
    learningman  
       2021-07-16 12:45:33 +08:00 via Android
    500m 已经很大了,人家 64m 的都能跑
    tttttv2
        5
    tttttv2  
       2021-07-16 12:46:07 +08:00
    肯定 Node.js 呀,koa, express 简单小巧,或者复杂一点的 egg.js
    ThomasTrainset
        6
    ThomasTrainset  
       2021-07-16 12:47:17 +08:00 via iPhone
    512 已经足够了,几个人访问,跑啥都没问题
    snowfuck
        7
    snowfuck  
       2021-07-16 12:49:42 +08:00
    加点 swap 也行,不用太担心,数据库可以用 sqlite
    Phishion
        8
    Phishion  
    OP
       2021-07-16 13:13:38 +08:00
    好的,谢谢各位,我研究研究
    fkdog
        9
    fkdog  
       2021-07-16 13:30:05 +08:00
    一般量级的 web 服务压力都体现在数据库等网络 IO 上.
    web 框架资源什么的其实挺无所谓的.
    PinkRabbit
        10
    PinkRabbit  
       2021-07-16 13:53:45 +08:00   ❤️ 1
    FastAPI
    blockmin
        11
    blockmin  
       2021-07-16 14:06:08 +08:00
    fastapi 一把梭
    jslang
        12
    jslang  
       2021-07-16 14:12:49 +08:00
    fastapi 不错,又快又 restful
    abersheeran
        13
    abersheeran  
       2021-07-16 14:16:38 +08:00   ❤️ 1
    楼上推荐 asyncio 框架的可别了,asyncio orm 至今没有一个能打的。还是用 django 、flask 、bottle 这种同步框架吧。
    xdeng
        14
    xdeng  
       2021-07-16 14:35:03 +08:00
    http.HandleFunc("/", index)
    http.ListenAndServe(":80", nil)
    SuperMild
        15
    SuperMild  
       2021-07-16 14:42:40 +08:00
    我也是用 512M 的服务器,跑着大概 5 个没啥访问量的网站,都是用 Go 写的,估计再加几个都没问题。

    你只跑一个小网站的话,完全不需要考虑资源问题,任何语言任何框架都跑不满 512M 。
    CEBBCAT
        16
    CEBBCAT  
       2021-07-16 14:57:35 +08:00 via Android
    @SuperMild 借楼问一下,有没有用 MySQL 、Redis 或消息队列等等服务?这些服务也会占不少资源吧?
    SuperMild
        17
    SuperMild  
       2021-07-16 15:04:44 +08:00
    @CEBBCAT 都是不对外营业的网站,和楼主说的一样就几个人访问,没必要 Redis,数据库用 sqlite 。
    anzerwall
        18
    anzerwall  
       2021-07-16 15:05:06 +08:00   ❤️ 1
    @SuperMild java: ?
    luke2sweet
        19
    luke2sweet  
       2021-07-16 15:06:52 +08:00
    推荐我一个自己的,gin+mysql,go 打包后就 10 几 m 的二进制包,丢服务器上去就能直接运行了,如果嫌 mysql 太大可以换成 sqlite

    https://github.com/lukedever/api-scaffold
    Phishion
        20
    Phishion  
    OP
       2021-07-16 15:20:49 +08:00
    @luke2sweet 收藏了,谢谢
    zoharSoul
        21
    zoharSoul  
       2021-07-16 15:45:15 +08:00
    @SuperMild #15 这可就错了, java 跑满跟玩一样
    wizzer
        22
    wizzer  
       2021-07-16 15:54:19 +08:00
    https://budwk.com

    选择 V5-mini 单应用版本即可,源码: https://gitee.com/wizzer/NutzWk
    keepeye
        23
    keepeye  
       2021-07-16 15:58:38 +08:00
    php 可以试试 lumen,包含数据库和 orm
    python 可以用 tornado,不包含数据库,可以直接用 pymysql,反正你没几个访问量
    Bromine0x23
        24
    Bromine0x23  
       2021-07-16 16:18:01 +08:00   ❤️ 1
    labulaka521
        25
    labulaka521  
       2021-07-16 16:21:00 +08:00
    数据库记着用 sqlite
    jslang
        26
    jslang  
       2021-07-16 16:23:11 +08:00
    @jslang 最开始以为楼主要 Python 或者 PHP,现在看楼主需求,golang 的 gin 或者 echo 比较满足
    jslang
        27
    jslang  
       2021-07-16 16:24:29 +08:00
    数据库直接 Redis 也可吧,需要关系数据库的话可以 sqlite,或者其它云 mysql 啥的
    yEhwG10ZJa83067x
        28
    yEhwG10ZJa83067x  
       2021-07-16 16:26:40 +08:00
    php 的话 ci
    jin7
        29
    jin7  
       2021-07-16 16:27:30 +08:00
    go php
    also24
        30
    also24  
       2021-07-16 16:37:47 +08:00
    『能满足最基本的 POST GET 数据库增删改就成』

    那还上框架干啥,直接裸的 php 呗
    hushao
        31
    hushao  
       2021-07-16 16:46:07 +08:00
    python 的话,tornado+sqlite 裸跑,直接 80 端口或者想加一层 nginx 也可以,记得定期重启服务。
    lesismal
        32
    lesismal  
       2021-07-16 16:49:26 +08:00
    golang

    ```golang
    package main

    import (
    "context"
    "fmt"
    "io"
    "net/http"
    "os"
    "os/signal"
    "time"

    "github.com/lesismal/nbio/nbhttp"
    )

    func onEcho(w http.ResponseWriter, r *http.Request) {
    data, err := io.ReadAll(r.Body)
    if err != nil {
    return
    }
    if len(data) > 0 {
    w.Write(data)
    } else {
    w.Write([]byte(time.Now().Format("20060102 15:04:05")))
    }
    }

    func main() {
    mux := &http.ServeMux{}
    mux.HandleFunc("/echo", onEcho)

    svr := nbhttp.NewServer(nbhttp.Config{
    Network: "tcp",
    Addrs: []string{":8080"},
    MessageHandlerPoolSize: 256,
    EnableSendfile: true,
    }, mux, nil)

    err := svr.Start()
    if err != nil {
    fmt.Printf("nbio.Start failed: %v\n", err)
    return
    }

    interrupt := make(chan os.Signal, 1)
    signal.Notify(interrupt, os.Interrupt)
    <-interrupt

    ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)
    defer cancel()
    svr.Shutdown(ctx)
    }
    ```
    falcon05
        33
    falcon05  
       2021-07-16 16:56:44 +08:00 via iPhone
    框架倒还好,只要不是 Java 那些重量级的。我以前在搬瓦工 128m 内存的小鸡上还能跑 WordPress,唯一的问题是 mysql 经常 oom 。
    rationa1cuzz
        34
    rationa1cuzz  
       2021-07-16 17:23:50 +08:00
    python 的话 flask 学习成本很低
    fansfans
        35
    fansfans  
       2021-07-16 18:09:12 +08:00
    建议 flask + sqlite3 文档全 demo 多 mysql 有点吃内存
    beginor
        36
    beginor  
       2021-07-16 20:44:44 +08:00 via Android   ❤️ 2
    dotnet5 试一下, 绝对干翻楼上说的这些
    d5
        37
    d5  
       2021-07-16 21:20:15 +08:00
    推荐使用 fastapi 大佬打包的 docker 镜像,镜像大概 90M,配合 Gtihub Action 做 ci/cd 。性能也不错。

    https://github.com/tiangolo/meinheld-gunicorn-flask-docker/tree/master/docker-images

    测试站点:
    https://surface.wiki/
    yeqizhang
        38
    yeqizhang  
       2021-07-16 21:26:47 +08:00 via Android
    512 可能就数据库比较吃紧,我 1g 的树莓派跑了 flask 还跑了另外的 python 脚本 mysql syncthing docker,也能正常用
    ttyn
        39
    ttyn  
       2021-07-16 22:07:49 +08:00
    Golang 使用 gin 大概 6M 左右
    Node.js 使用 Excpress 大概 15M 左右
    dotnetcore 大概 25M 左右
    这些都是基础框架启动时的内存,加载 Mysql 数据调用,内存大概增加 10M 的样子,如果还要加其它插件,就不好说了

    Golang 是真的小,使用 Alpine 构建镜像也只有 20M 左右
    seakingii
        40
    seakingii  
       2021-07-16 22:19:41 +08:00
    占用资源少,首先 是 C ,C ++ ,RUST,其次是 GOLANG
    seakingii
        41
    seakingii  
       2021-07-16 22:23:51 +08:00   ❤️ 1
    我自己会选择 .NET 5 ,它本身就是自带框架,数据库用文件型的 LiteDB,简单好用
    wuwukai007
        42
    wuwukai007  
       2021-07-16 22:58:57 +08:00
    服务器预装 python,flask 10 行起服务
    misaka19000
        43
    misaka19000  
       2021-07-17 01:33:38 +08:00
    Flask + uWsgi + SQLite 最简单的方案
    treizeor
        44
    treizeor  
       2021-07-17 09:49:34 +08:00
    可以跑个 frp 映射本地的服务出去
    narmgalaxy
        45
    narmgalaxy  
       2021-07-17 14:51:14 +08:00
    建议使用 vercle,不用服务器.
    yizmaoaa
        46
    yizmaoaa  
       2021-07-17 15:02:54 +08:00
    如果用 Java 的话可以用 Vert.x,然后用 Graalvm 打包
    fox0001
        47
    fox0001  
       2021-07-17 16:12:16 +08:00 via Android
    512MB 已经非常充裕了。直接考虑 MariaDB + Python3 。至于是 Python3 的哪个 Web 框架,都不是问题。我的 VPS,256MB 内存,照样跑 Blog 、私人 web 服务等
    encro
        48
    encro  
       2021-07-17 16:43:52 +08:00
    @abersheeran

    fastapi,django 都异步支持好好的,咋就不能打了。看着 django 由 50ms 以上变 5ms 内不爽么?
    encro
        49
    encro  
       2021-07-17 16:45:30 +08:00
    不用框架,直接用 headless cms ?
    cyd
        50
    cyd  
       2021-07-18 15:48:17 +08:00
    ? 512m 很大了。我直接跑了 java spring boot + mariaDB + nginx 。还有那个不可描述的东西。
    记得开 swap 就行。我搞了 1G 。
    beyondex
        51
    beyondex  
       2021-07-18 19:45:14 +08:00 via Android
    .NET Core 5
    threeEggs123
        52
    threeEggs123  
       2021-07-18 22:46:24 +08:00 via Android
    aws lambada,然后在上面写 python,按量付费,外面套一个 api gateway 。很便宜,每个月还有免费的额度。
    cloverzrg2
        53
    cloverzrg2  
       2021-07-19 10:16:19 +08:00
    go 的 gin+sqlite3 (几个人访问没啥问题,而且可以随时切到 mysql ),内存占用不会超过 10M 。你说的网页服务器,可以不要,除非你知道你想干啥(多站点路由配置、ssl 证书等需求)
    HUNYXV
        54
    HUNYXV  
       2021-07-19 10:53:25 +08:00
    mengdodo
        55
    mengdodo  
       2021-07-19 11:54:48 +08:00
    @ttyn 感觉 gorilla/mux 就好了,build 后再压缩下更小
    NCE
        56
    NCE  
       2021-07-19 19:42:18 +08:00
    512MB 就老老实实用 php 把,nginx+mysql+slim 之类的轻框架都没什么压力
    aru
        57
    aru  
       2021-07-19 20:47:08 +08:00
    php 很合适的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1198 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:39 · PVG 02:39 · LAX 10:39 · JFK 13:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.