V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Strive0630
V2EX  ›  Python

打算重构一个项目使用 Django,大佬们给点建议

  •  
  •   Strive0630 · 2021-01-27 10:25:09 +08:00 · 5822 次点击
    这是一个创建于 1394 天前的主题,其中的信息可能已经有所发展或是发生改变。

    哈喽~ 大佬们 我想把公司管理后台项目重构一下,重新写,使用的技术展的话,就是 python(3.x) + django(xxx) + rest framework + mysql + redis + mongodb + celery + nginx + docker + k8s 现在比较纠结的就是很多项目版本的问题,django 跟 python 或者很多数据库都使用什么版本比较稳定,而且版本还不会太老。希望大佬们踊跃留言,谢谢啦~ ,或者有更好的后端服务架构,用 python 写的,都可以推荐一下。谢谢大家了~

    57 条回复    2021-02-02 10:03:51 +08:00
    qW7bo2FbzbC0
        1
    qW7bo2FbzbC0  
       2021-01-27 10:29:01 +08:00
    啊这,我之前就用的这一套,发现还是单独来做方便点
    GoLand
        2
    GoLand  
       2021-01-27 10:33:00 +08:00
    Python3 现在主流版本应该是 3.6/3.7,没理由不尝试一下 fastapi https://github.com/tiangolo/fastapi/
    37Y37
        3
    37Y37  
       2021-01-27 10:55:50 +08:00
    可以,就这个就行了
    ytymf
        4
    ytymf  
       2021-01-27 10:58:11 +08:00   ❤️ 4
    多大系统啊,活儿整这么全。。。
    xuqiccr
        5
    xuqiccr  
       2021-01-27 10:58:48 +08:00
    我现在版本是 python3.6.3,Django2.1.4,感觉还行
    baleeny
        6
    baleeny  
       2021-01-27 11:05:21 +08:00
    @ytymf hhh
    xulolololololo
        7
    xulolololololo  
       2021-01-27 11:48:35 +08:00
    这年代了,别用 django 了,尝试下 sanic,fastapi 异步走起
    TabGre
        8
    TabGre  
       2021-01-27 11:50:50 +08:00 via iPhone
    年底了,需要整点活啦? 🐶
    fansfans
        9
    fansfans  
       2021-01-27 11:54:20 +08:00
    @xulolololololo django 现在也支持异步了呀 而且各种插件支持也好 文档也全
    u823tg
        10
    u823tg  
       2021-01-27 12:33:02 +08:00
    要不你在等几个月,等 django3.2 出来
    evil0harry
        11
    evil0harry  
       2021-01-27 13:00:30 +08:00
    @u823tg hi
    kaka6
        12
    kaka6  
       2021-01-27 13:33:51 +08:00
    flask 不香吗
    2379920898
        13
    2379920898  
       2021-01-27 13:37:55 +08:00   ❤️ 1
    GO 啊。性能提升一万倍
    aegon466
        14
    aegon466  
       2021-01-27 13:43:42 +08:00
    公司人不少啊
    SjwNo1
        15
    SjwNo1  
       2021-01-27 14:00:09 +08:00
    后台都上 k8s 了。。
    tmackan
        16
    tmackan  
       2021-01-27 14:47:54 +08:00
    @kaka6 hhh django 而且 djang rest framework 个人感觉是重了点
    jmyz0455
        17
    jmyz0455  
       2021-01-27 14:51:34 +08:00
    @2379920898 go 提升这么大吗?
    changeTheGame
        18
    changeTheGame  
       2021-01-27 14:55:50 +08:00
    只会 java,springboot 一把梭。羡慕会 python 的,感觉 python 代码又少又优雅(框架全、python api 设计好)
    Strive0630
        19
    Strive0630  
    OP
       2021-01-27 15:14:45 +08:00
    @hjahgdthab750 想要一个稳定的版本
    Strive0630
        20
    Strive0630  
    OP
       2021-01-27 15:15:02 +08:00
    @GoLand fastapi 目前来说确实很主流, 但是还是要有很多的学习成本
    windfarer
        21
    windfarer  
       2021-01-27 15:15:09 +08:00
    我就知道底下有人要推荐 go...一个公司管理后台用得着一万倍性能吗?难道不是应该哪个开发起来方便用哪个么
    Strive0630
        22
    Strive0630  
    OP
       2021-01-27 15:15:28 +08:00
    @ytymf 其实系统可能也不是很大。 这样的配置应该够用了吧
    Strive0630
        23
    Strive0630  
    OP
       2021-01-27 15:16:05 +08:00
    @u823tg 哈哈哈哈,django 在哪个版本可以支持异步啊, 而且 django 所依赖其它环境也需要兼容啊
    Strive0630
        24
    Strive0630  
    OP
       2021-01-27 15:16:25 +08:00
    @kaka6 我个人觉得 flask 可能真的没有 django 香
    Strive0630
        25
    Strive0630  
    OP
       2021-01-27 15:16:38 +08:00
    @aegon466 嗯? 怎么看出来的公司规模大小呢
    Strive0630
        26
    Strive0630  
    OP
       2021-01-27 15:16:56 +08:00
    @SjwNo1 部署的话,想尝试用集群的方式来做
    Strive0630
        27
    Strive0630  
    OP
       2021-01-27 15:17:36 +08:00
    @jmyz0455 go 提升确实很大, 但是产品不是面向 TO C 的可能在性能体验上会好很多吧
    Strive0630
        28
    Strive0630  
    OP
       2021-01-27 15:18:22 +08:00
    @windfarer 是的,我也是这么想的~ 但是现在比较纠结就是 使用的版本,想使用新的,但是还想兼容每个版本都很稳定
    u823tg
        29
    u823tg  
       2021-01-27 15:22:17 +08:00
    @Strive0630 #23 现在 3.1 就支持,但是 3.2 是长期支持版本过两月就发布。
    lixuda
        30
    lixuda  
       2021-01-27 15:25:48 +08:00
    @Strive0630 3.0 以上
    qW7bo2FbzbC0
        31
    qW7bo2FbzbC0  
       2021-01-27 15:27:16 +08:00
    @changeTheGame #18 楼主说的这一套下来稳定性和维护性甚至比不上 springboot 一把梭的方便,有时候没必要强扭到一个服务上
    wuwukai007
        32
    wuwukai007  
       2021-01-27 15:29:43 +08:00 via Android
    说真的,管理系统 php,java 哪个不比 go 强,有人推荐 go 我是没想到的😂
    zeuss
        33
    zeuss  
       2021-01-27 15:38:41 +08:00   ❤️ 1
    Tornado 转 springboot 了。。。
    longaiwp
        34
    longaiwp  
       2021-01-27 15:50:11 +08:00   ❤️ 1
    我是没想到那么重的东西有人用 py 的,可能这就是爱吧。我情愿 jawa 一把梭。
    echo1937
        35
    echo1937  
       2021-01-27 15:54:10 +08:00
    以前写 Django 的时候,很羡慕 SpringBoot 这种一揽子开箱即用,甚至各种组件的版本搭配都定义好了。

    搭车提问,到了 Java 平台,celery 一般用啥代替?

    @longaiwp #34
    ErwinCheung
        36
    ErwinCheung  
       2021-01-27 15:59:15 +08:00
    @echo1937 我也想学习一下
    wangyzj
        37
    wangyzj  
       2021-01-27 16:15:23 +08:00
    虽然没用过 fastapi
    但正在用 django 的我觉得 django 虽然大而全
    但太重了
    很多东西封装到完全不知道咋回事
    蒙着写
    jzmws
        38
    jzmws  
       2021-01-27 16:17:44 +08:00
    能用就不要动
    freakxx
        39
    freakxx  
       2021-01-27 16:34:52 +08:00
    直接用最新的就好,py3.7 或者 3.8
    django 版本用 3.x 也问题不大,

    用 drf 这套,主要好处是不考虑性能情况下,涂起代码还是特别舒服的
    freakxx
        40
    freakxx  
       2021-01-27 16:36:17 +08:00
    实话说,管理后台用 drf 写还是很舒服的,直接上 orm,

    用 drf + django filter

    代码随便涂
    aegon466
        41
    aegon466  
       2021-01-27 16:41:25 +08:00
    @Strive0630 上 k8s 了所以用的人不少吧 如果公司只有小几万人 没必要用这么臃肿 后期维护麻烦 不过你是想借此学习的话就当我没说过
    SmartKeyerror
        42
    SmartKeyerror  
       2021-01-27 17:10:29 +08:00
    用 Go 来写管理后台这种并发量低、业务逻辑复杂的应用只怕是失了智,能不能不要动不动就推荐 Go 。
    Celery 这东西还是有一些坑的,可以尝试用下 RQ 。k8s 的话如果是公司有统一的集群和完整的 CI/CD 套件,也就是一个 Chart 编写的问题。如果没有的话,还是 Docker 直接跑吧......
    LeeReamond
        43
    LeeReamond  
       2021-01-27 19:15:03 +08:00   ❤️ 1
    @2379920898
    @jmyz0455
    @windfarer

    然而事实是 go 并不能快一万倍。

    https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune&l=zijmrj-1r

    根据 techempower 的测试,对于 1202 年的异步 python,框架转发能力方面,go 的最大模型领先五倍性能,中位数在 2-3 倍。所以 2-3 倍的执行效率(大概率冗余)是你从 python 生态切换到 go 生态的理由?
    woostundy
        44
    woostundy  
       2021-01-27 19:23:49 +08:00
    @echo1937 #35 kafka
    echo1937
        45
    echo1937  
       2021-01-27 20:05:46 +08:00
    @woostundy #44

    celery,任务队列,kafka,消息队列,两者有一些区别,功能覆盖也不一样,
    https://zhuanlan.zhihu.com/p/272855534
    inframe
        46
    inframe  
       2021-01-27 22:53:04 +08:00
    生态上还是有点差距的,python 你要啥啥都有,慢一点又没事,反正企业内部站点日均 10000 不到的访问量
    写起来爽就完事
    windfarer
        47
    windfarer  
       2021-01-27 23:17:00 +08:00 via Android
    @LeeReamond 说的就是啊,Web 应用都是 io 为主,不同语言速度差别没那么明显的
    LeeReamond
        48
    LeeReamond  
       2021-01-28 00:19:11 +08:00 via Android
    @windfarer 仅是就事论事,讨论了一下目前的异步框架速度,扩大到全体语言和全体框架并不恰当,实际上前几年 djg2 的时代,使用同步模型+默认中间件设置的话确实是慢得很,go 快不上一万倍,但一千倍还是有可能的
    windfarer
        49
    windfarer  
       2021-01-28 00:28:29 +08:00 via Android
    @LeeReamond 说实话 asyncio 我一直没找到能够优雅使用的方式,到现在还是用 gevent 一把梭
    LeeReamond
        50
    LeeReamond  
       2021-01-28 01:13:40 +08:00
    @windfarer 跟技术栈有关,我开始学习异步已经是 3.5 版本以后的事,因为当时已有原生异步所以从一开始就否决了猴子补丁的方案。现在问我的话我觉得 asyncio 很优雅,并且完全不能理解 gevent 的使用方式
    abersheeran
        51
    abersheeran  
       2021-01-28 09:54:46 +08:00   ❤️ 1
    无脑推 aiohttp/sanic/fastapi 这类异步框架的我笑了。Celery 对 asyncio 的支持心里没点数?劝人上这个,你负责给他踩 Celery + asyncio 的坑?这种整体技术栈,Django+Celery+gevent 是最简单、高效的方式。
    wzwwzw
        52
    wzwwzw  
       2021-01-28 14:36:57 +08:00
    Asyncio 现在的库和库的质量都非常一般。还是 Django + Celery + Gevent 一把梭。
    zcl0621
        53
    zcl0621  
       2021-01-28 15:47:02 +08:00
    你还差个 mongo rest framework ...
    qile1
        54
    qile1  
       2021-01-29 16:16:45 +08:00 via Android
    @LeeReamond 之前看论坛说 fastapi 并不是很快,推荐 bottle,您知道这两个哪个合适做微信公众号吗?
    LeeReamond
        55
    LeeReamond  
       2021-01-29 20:43:11 +08:00
    @qile1 据我所知运营微信公众号不需要自建服务器?而且据我所知 bottle 是同步库,同步模型与异步模型在速度方面是有数量级差距的,这么比较并不公平。
    maSHma
        56
    maSHma  
       2021-02-02 09:20:07 +08:00
    巧了,刚整上一个,使用 celery+redis,如果还用 flower 监测任务的话,有一些版本适配的坑,需要的话可以交流下
    encro
        57
    encro  
       2021-02-02 10:03:51 +08:00
    个人觉得还是 django_q 比 celery 容易上手一些。
    @maSHma


    适合做公众号,当然是微擎

    @qile1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3087 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:50 · PVG 21:50 · LAX 05:50 · JFK 08:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.