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

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

  •  
  •   Phishion · 134 天前 · 4988 次点击
    这是一个创建于 134 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    https://github.com/lukedever/api-scaffold
    Phishion
        20
    Phishion   134 天前
    @luke2sweet 收藏了,谢谢
    zoharSoul
        21
    zoharSoul   134 天前
    @SuperMild #15 这可就错了, java 跑满跟玩一样
    wizzer
        22
    wizzer   134 天前
    https://budwk.com

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

    那还上框架干啥,直接裸的 php 呗
    hushao
        31
    hushao   134 天前
    python 的话,tornado+sqlite 裸跑,直接 80 端口或者想加一层 nginx 也可以,记得定期重启服务。
    lesismal
        32
    lesismal   134 天前
    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   134 天前 via iPhone
    框架倒还好,只要不是 Java 那些重量级的。我以前在搬瓦工 128m 内存的小鸡上还能跑 WordPress,唯一的问题是 mysql 经常 oom 。
    rationa1cuzz
        34
    rationa1cuzz   134 天前
    python 的话 flask 学习成本很低
    fansfans
        35
    fansfans   134 天前
    建议 flask + sqlite3 文档全 demo 多 mysql 有点吃内存
    beginor
        36
    beginor   134 天前 via Android   ❤️ 2
    dotnet5 试一下, 绝对干翻楼上说的这些
    d5
        37
    d5   134 天前
    推荐使用 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   134 天前 via Android
    512 可能就数据库比较吃紧,我 1g 的树莓派跑了 flask 还跑了另外的 python 脚本 mysql syncthing docker,也能正常用
    ttyn
        39
    ttyn   134 天前
    Golang 使用 gin 大概 6M 左右
    Node.js 使用 Excpress 大概 15M 左右
    dotnetcore 大概 25M 左右
    这些都是基础框架启动时的内存,加载 Mysql 数据调用,内存大概增加 10M 的样子,如果还要加其它插件,就不好说了

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

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