生产环境部署疑问

132 天前
 fzdoudou
crud javaer 一枚,平常只会写 CRUD 业务代码,菜鸟一枚,虚心请求各位大佬。从来没有去研究过生产环境部署的流程,现在有个小项目想要部署到阿里云去,有很多疑问。目前已经买了一台阿里云服务器 2C4G 5M 固定带宽 80G 云盘。
项目背景
1 、Java 后端服务一个,B 端管理后台一个,C 端一个
2 、使用到了 jdk17,redis,rabbitmq,mysql 这些基础的中间件,项目构建使用 maven,nginx 做反向代理
3 、前期只是验证业务流程,跑起来后可能需要扩容服务器做集群
4 、有让 ChatGPT 给我梳理流程,前面讲的挺好的,但是我疑问越多发现它会有点不记得我之前的背景,经常做一些结果不一样的输出
疑问
1 、最大的疑问就是对使用 docker 还是直接在宿主机部署一直纠结不定,归根到底还是我从来没有用过 docker ,一直看别人说 docker 部署非常方便,所以就想试试看。但是我在试用服务器边学习 docker 边部署,感觉也没有想象的那么方便。所以想问下对于我这种情况以及未来的发展方向是否需要用 docker
2 、是否一开始就要上 RDS 云数据库,如果上了以后它跟 docker 是怎么连接的,mysql 部署在宿主机会有丢失数据的风险吗
3 、如果使用了 docker ,我的代码在本地改完如何最快的部署上去,现在不考虑用 Jenkins ,一个人精力现在还不够
4 、这样一台服务器能支撑的起多大的业务量,如果一天有几十万请求,是否撑得住
2955 次点击
所在节点    Docker
26 条回复
hwdq0012
132 天前
等你 docker compose up -d 一下拉起一个服务,你就爽到了,我觉得你职业的后期阶段会是 devops ,kubernetes 肯定是必由之路,那么 docker 学一学是很有必要的, 等你 docker compose up -d 一下拉起 n 个服务组成的一个可用应用,如 gitlab ,kafka 之类的, 你就不会想直接在主要上部署了
docker 的 volumne 可以定义为 ntfs , 大部分存储都支持 ntfs ,
你可以在做一个开发 docker, ssh 上去开发 ,生产的 docker 可以从开发的 docker 直接 commit 成为镜像,但建议最好写 docker 脚本, 理解一下 docker 的缓存机制, 每次增量 push 增量 pull 是最佳方案。

滚动更新,弹性扩容我也很想学,我没实践经验, 开多个负载均衡的 docker ,然后用 keeplive 让它们选举一个 ip 绑定到虚拟 ip 上, 实际的实例挂掉了其他的实例会再重新选举,绑定到虚拟 ip ,虚拟 ip 向外提供

无状态的这样搞应该没什么问题, 有状态的可能要在负载均衡上做粘性会话之类的东西
iloveayu
132 天前
1. 你都想后续扩容做集群了,建议直接 Docker 做部署,你可能需要详细设计一下哪些组件进容器。
2. RDS 和你连普通 MySQL 没区别,改 Java 的配置就可以了,直接装 MySQL 到 VM 里也是可以的,阿里云定期快照或者镜像,或者想办法单独备份数据库到 OSS 啥的。
3. 不用 Jenkins 就自己本地写脚本,打包代码时直接带上 docker build 步骤,然后每次 save image ,传输到你的服务器上去 run 。
4. 5M 固定带宽是瓶颈。
fzdoudou
132 天前
@hwdq0012 #1 没错,后期肯定是 devops ,我考虑用 docker 的时候也是这么想,因为这个项目只有我一个人负责,前端后端运维全套都要做,前端可以用 cursor ,运维方面是一点经验都没有。想到用 docker 就是想到大家都在说 docker 可以一键拉起整个项目,现在纠结的那些点可能还是在于对 docker 太不熟悉了。
fzdoudou
132 天前
还有一个疑问是 docker 性能会比直接在宿主机部署有下降吗
fzdoudou
132 天前
@iloveayu #2 哪些组件进容器这个也是我最大的问题,我并不知道哪些适合进容器,哪些不适合进容器,如果有些不进容器,那么他们之间的通信会不会有什么问题,我在测试服务器上是把所有中间件和 nginx 代理前端都部署在了容器,Java 服务部署在了宿主机,结果前端一直访问不到后端服务,让 ChatGPT 教了两天都没解决
jianghuan2
132 天前
@fzdoudou #4 可忽略不计
runinhard
132 天前
docker 玩到最后就是 k8s 干脆直接跳过 docker compose 算了
jianghuan2
132 天前
@runinhard #7 个人感觉还是要学,因为在没有 k8s 环境下,最优选择就是 docker-compose
jianghuan2
132 天前
@fzdoudou #5 什么叫部署在容器?正确操作方式是:一个组件一个镜像(再启动容器),再把端口映射出来。中间件、前端 nginx 、后端 java 皆是镜像(容器)
ala2008
132 天前
经验就是,docker 比 jar 和 war 包吃多很多资源 你这个服务器配置有点低
wangwaner
132 天前
docker 国内镜像被 ban 了之后学习曲线陡然就上去了,直接卡在拉镜像这步了
fzdoudou
132 天前
@ala2008 #10 前期只是验证业务流程是否跑的通,跑的通以后会升级,大概要多大的配置才能跑的起来
fzdoudou
132 天前
@wangwaner #11 为什么国内会 ban docker 呢,不是很理解
fzdoudou
132 天前
@ala2008 #10 另外吃资源指的是 cpu 还是内存呢
defunct9
132 天前
2C 4G ,还要跑这么多东西,用个鬼的 Docker 。直接部署。
zepc007
132 天前
@runinhard k8s 后面还有 helm-chart😅
ala2008
132 天前
@fzdoudou #12 内存,基本一个 java 服务就要 1g 以上
sagaxu
132 天前
1. Java 项目没必要用 Docker ,除了 JRE 并没有其它依赖,JRE 安装很方便,没必要用 Docker ,资源隔离用 systemd 就能做了。

2. RDS 当然要上,起码 1 主 1 从,省去自己折腾备份和监控的麻烦。

3. 做个 ssh 密钥登陆,写个 Makefile ,命令行一键部署。

4. 一天几十万请求量并不大,一般瓶颈在 DB 和网络,不在业务负载机。
lucasj
132 天前
1. 生产环境,别乱搞,用自己最熟悉的方案。想用 Docker 先自己用熟了再上生产环境。
2. RDS 云数据库,有钱就上啊,反正上了比没上好。没钱也可以定期自己备份。
3. 最快部署?你当前最熟练的方式。
4. 先撑,撑不住再说。
julyclyde
132 天前
“容器是一个界限”
你要深刻理解这句话
不仅仅是静态的(文件系统 image )同时也有动态的(运行时 namespace 、cgroups )

把应用程序向容器环境改造的过程,其实是梳理应用程序边界的过程

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1128044

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX