![]() | 1 ytmsdy 343 天前 使用用 docker-compose 跑就行了,然后在服务器上写 README 就行了 |
2 neotheone2333 343 天前 1. docker(compose) 2. pip+requirements.txt 3. http(碰到性能问题最近准备迁移到 grpc) 刚从运维手动启停服务( nohup )的模式切过来,目前跑了两个月了没啥问题。就是 Python 镜像有点大,华为云的小水管每次上传要花点时间 |
![]() | 3 mickerwx OP |
4 xiaogu2014 343 天前 1. 一般来说 docker 和 k8s 都会上。docker 负责打包 image 。不需要 care 环境依赖啥的。k8s 主要做服务部署编排。。 2. poetry 比较多。 3. 一般来说是 rpc.服务间通信 以及针对你现在的问题: 服务太多管理与更新麻烦-> 如果每个服务环境都相互独立就不不会麻烦了。 使用 conda 进行环境管理-> 这个是在每个 docker image 里面建立不同的环境。所以不需要考虑环境切换的问题。 多个服务使用 http 进行通信,耗时有点长-> 体感上耗时长的话,可能并不是 rpc 能解决的问题。考虑下服务之间数据传输的合理性以及考虑下其他方式? |
![]() | 5 vZexc0m 343 天前 1.更新麻烦 ->可以选择 Jenkins 之类的做 CI/CD 2.环境管理->docker 、podman 3.http 进行通信内网还好把 django 用 gunicorn 部署 fastapi 用 uvicorn 。用容器就不用关心什么环境问题了 |
![]() | 6 mickerwx OP |
![]() | 7 mickerwx OP @xiaogu2014 @vZexc0m @neotheone2333 @ytmsdy 还有个问题 你们有需要解决并发请求的吗 原本他们解决并发是同一套代码部署多个服务 使用 nginx 做负载均衡 后来我加了 celery ,把这些业务代码放 celery 跑 |
8 xiaogu2014 343 天前 看起来你们需一个架构师来把服务微服务化+建立一套完整的 cicd 流程。 这个是一劳永逸的事情。之后别人只需要提交 pr. 等 review.合并。然后一键部署就好了。 |
9 xiaogu2014 343 天前 `还有个问题 你们有需要解决并发请求的吗 原本他们解决并发是同一套代码部署多个服务` 这不就是 k8s 帮你干的事情吗。。服务自动扩容/横向/纵向扩容。。 |
![]() | 10 mickerwx OP @xiaogu2014 唉 别提了 招架构师是不可能的了 除非我自己来搞 但是这种吃力不讨好的活儿 老板看不到 实属没必要 |
11 mirrornighth 343 天前 10 多台机器 docker swarm 就够了 |
12 mirrornighth 343 天前 1.docker swarm 或 k8s (一般 10 多台 swarm 就沟通) |
![]() | 13 defunct9 343 天前 天天搞这些,k8s 是正解。 |
14 Hstar 343 天前 开发环境用什么做包管理都行, pip/poetry/pipenv, 最后一定要导出一个 requirement.txt, 生产环境只用 pip+requirement.txt 极简. 因为在生产环境再装一个其他东西没必要且还会引入包依赖问题. |
![]() | 15 vZexc0m 343 天前 @mickerwx #6 CI/CD 不复杂,可以研究下 一劳永逸的事情。自动就部署了。 并发请求是啥意思?同一台机器上一个项目跑多个实例没多大意义。如果之前只是单线程部署的话,部署的时候启用多个工作线程就行了,django 还可以结合 gevent.具体看文档。 |
![]() | 16 mickerwx OP @mirrornighth 我去瞅瞅这俩 看看能不能用起来 |
![]() | 18 mayi203 343 天前 我个人项目,一直是 docker-compose |
![]() | 19 adoal 343 天前 我建议是先用 systemd unit (首选,除非还要跑在 EoL 很多年的老发行版上)或者 supervisord / s6 / runit 之类的服务管理工具,把服务启停管起来再说,至少不要设备意外重启了后接到电话时哼哧哼哧远程登进去 nohup 。并且在这个过程中逐步梳理项目,学习一下 FSH 之类的基础知识和运维安全知识,养成服务器管理操作的好习惯。 上容器当然也是一种可行的选择。不过把乱七八糟的东西装进容器,只是给屎浇一层巧克力壳,掩盖乱七八糟。 |
20 neotheone2333 343 天前 @mickerwx 我们的并发是两套处理,普通 http 请求不必说,定时任务和异步 http 接口做法是: 1. io 密集型的走 fastapi 的 BackgroundTask ,写法用 httpx 之类的库全部改成 async 2. cpu 密集型的走的 celery worker 如果还处理不过来就得加机器了 |
![]() | 21 mickerwx OP @adoal 感谢建议 之前用过一段时间的 supervisord 奈何项目多 服务多管理起来确实不方便 主要也没有一个合格的项目经理和技术经理 代码随便提交 从来没有 review 领导今天说部署一个这个版本就要部署 明天要哪个版本就要部署那个 |
![]() | 22 skyrim61 343 天前 使用 alpine 构建一个 django5 的 docker 镜像, 使用 docker-compose 来管理项目的启动,停止和重启. 使用上, 只要修改 docker-compose 中的环境变量即可, 然后就一键启动. 省事省心 |
![]() | 24 skyrim61 343 天前 . /root/venv/bin/activate cd /xx/xx/${PROJECT_NAME} && gunicorn -b 127.0.0.1:8000 -w 2 --threads 4 --reload ${PROJECT_NAME}.wsgi & nginx -g 'daemon off;' 容器启动脚本 |
![]() | 25 mickerwx OP @adoal 问题是现在解决不了这个 我只是个小兵 没有任何话语权 只能在不给自己找麻烦的情况下 把手头工作尽量干好 问这些问题 之前在上一家公司 是有专业运维来搞这些的 来这边 后端要写 部署要管 运维要管 唉 |
29 julyclyde 343 天前 1 首先 nohup 、supervisorD 、pm2.5 肯定是不对的。正确的做法是 systemd 或者容器。如果多实例应该容器+k8s 2 如用容器,尽量小一点,venv 就挺好吧 |
![]() | 31 Hopetree 342 天前 一个项目一个 docker-compose ,容器里面使用 supervisor 管理进程,完美 |
32 flmn 342 天前 docker swarm |
![]() | 33 ytmsdy 342 天前 @mickerwx 这个就涉及到程序底层逻辑的问题了。 一般是先估计,有些定时任务,或者耗时比较长,实时性不高的计算就全部丢到队列里面去处理。 并发什么的按照你说的服务器规模,基本上不用太需要考虑。 把耗时长的请求给单独,异步返回就行了。 |
34 ccc1924 339 天前 我这儿老服务用的是 supervisor ,新服务用的是 docker-compose 目前暂时没有动态扩容的需求,所以 docker compose 够用了 建议做好容器化,以后上 k8s/kamal 都方便不少 celery 和 nginx 负载均衡上没有很大的区别,如果是长时间跑的后台任务,使用 celery 会更合适 |
![]() | 37 tisswb 322 天前 我这边运维大概 10 多个服务,都是在 ubuntu 上运行, 1.supervisor 2.项目内包管理 pip ,python 版本管理 pyenv 3.http 慢就 grpc |