最近在调研阿里云的弹性伸缩服务,目前对于代码部署这块有点疑问:
1.怎么保持所有实例的一致性
2.在伸缩过程中部署了代码,那怎么更新所有实例
看了下阿里云的文档,推荐是建立自启动脚本来做代码的更新工作,那怎么保证在代码更新完成之后才正式提供服务呢?有推荐放共享存储的,实例只有运行环境,那哪种共享存储合适呢?以前有共享块存储,现在阿里云官网看不到这个产品了,用 NAS 是否有读写性能问题?希望有经验的大佬指教下。
1
0bit 2020-08-15 16:26:04 +08:00 2
推荐入一下 Kubernetes 的坑,以及尽量保证后端服务是 Stateless 的,涉及到状态的地方(数据库、缓存、队列、文件存储等)都直接用阿里云提供的服务,这样的话只要让程序运行好就行了。
也推荐了解一下 12 factor 。 |
2
lhx2008 2020-08-15 16:29:23 +08:00 1
尽可能无状态,需要共享存储用云 NAS 或者 OSS
|
3
opengps 2020-08-15 16:33:22 +08:00 2
弹性伸缩主旨是:制作一台自定义镜像,然后自动克隆增加机器。
如果你想动态更新代码,那么你得在主机内部部署一套启动自动拉取更新发布文件的脚本 |
4
skymei OP @opengps 在模板镜像里面部署好环境和基础代码,然后定时去跑自动更新部署代码的脚本吗,对于脚本语言 PHP 这种来说,git pull 就差不多的了,像 go 这种咋办呢,编译完之前应该是不想提供服务的,这时候实例可能已经创建好,配置好负载均衡开始提供服务了。有点不清楚这个咋办
|
7
opengps 2020-08-15 16:50:59 +08:00
举个例子,程序源文件放在私有 oss 或者 nas 里,然后模板系统启动后干的事情是:
1,建立空项目目录(模板机里可以提前建好,为了方便管理,建议直接用系统盘) 2,从局域网拉取程序文件(更新程序的动作脱离弹性环境,弹性机器只知道拉取某些文件,然后启动固定路径的 exe 即可) 3,调用启动获取到的程序 最后判断依据:slb 的健康检查结果通过,扩容算作完成 |
8
opengps 2020-08-15 16:51:59 +08:00
当然还得有定时检测逻辑,用来检测到更新,主动杀死进程,拉取新文件替换,然后启动新程序
|
10
wejsve 2020-08-15 19:05:14 +08:00
你所说的这些使用微服务+K8S 即可解决
|
11
wdlth 2020-08-15 22:38:47 +08:00
一般不会一次性更新所有实例的,大都是灰度发布,蓝绿部署。
|
12
594duck 2020-08-15 22:43:26 +08:00 via iPhone
你先看你公司有多大,什么业务的。
弹性伸缩,伸简单缩要配合 API GW 都能缩。 业务场景什么都不问,先叫你上 K8s,哈哈哈哈。我觉得你很快就会陷入“我到底是做什么的问题” |
13
lhx2008 2020-08-16 10:44:06 +08:00
@skymei #4 NAS 这个名字阿里云没取好显得很 low,其实一般都是三副本的,你存一份其实在三个地方都存了。
至于拉代码这个事情,肯定是用 CI 啊,CI 侧就把代码从 Git 拉出来,打包镜像,上传镜像到 Docker Hub 了,然后再发布一下(就是改一下镜像版本号)就可以了 |
14
ReallllQCloud 2020-08-16 13:48:39 +08:00
指出一个 V2EX 几乎所有初次接触弹性伸缩的人都出现的问题
--- 混淆了 「固定机器 CD 模式」和「 云 AS CD 模式」 『固定机器模式』:默认认为机器不变,增减都是人工处理,环境是机器初始化时人肉装好,CD 主要指的是通过配置工具(比如 ansible )将「代码包」 push 到「现网机器」,然后替换旧的代码,重启服务这个过程 「云 AS CD 模式」:天然要接受「机器是变的 变的 变的」,环境是通过「 AS 启动配置」配置的镜像 ID+实例启动脚本定义,CD 主要指的是将「代码包 => 镜像制作机器 /服务」,然后通过「制作新的镜像」,这时候最大区别来了,不是 push 「代码包到现网机器」,而是将集群(也就是 AS 伸缩组)内实例通过重装 /重建的方式全部更换为「新镜像』 --- 90%的人理解的 CD 都是「固定机器模式」,所以楼主先理解了上面 2 个区别,再来谈如何用 AS 这个服务 --- 你提到的用 NAS 存储「代码包」,本质上是用「 NAS 」代替「镜像」来存储代码包,手段和目的差不多,当然面临的问就是你意识到的如何保证流程的顺序性以及容错机制 --- 回答一下问题,1.更新代码是更新启动配置,也就是更新镜像,镜像+启动脚本一致实例就一致了 2.重建 /重装镜像 PS:回答 from QCloud 员工,从我们的实践云的模式是绝对优于固定机器模式,但目前 90%以上人无法正确理解和过渡到云的模式,我们正在做一些尝试,后续可以关注下新发布 |