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