V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
skymei
V2EX  ›  云计算

请教下各位大佬,弹性伸缩代码部署问题

  •  
  •   skymei · 2020-08-15 16:09:06 +08:00 · 2801 次点击
    这是一个创建于 1560 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在调研阿里云的弹性伸缩服务,目前对于代码部署这块有点疑问:
    1.怎么保持所有实例的一致性
    2.在伸缩过程中部署了代码,那怎么更新所有实例
    看了下阿里云的文档,推荐是建立自启动脚本来做代码的更新工作,那怎么保证在代码更新完成之后才正式提供服务呢?有推荐放共享存储的,实例只有运行环境,那哪种共享存储合适呢?以前有共享块存储,现在阿里云官网看不到这个产品了,用 NAS 是否有读写性能问题?希望有经验的大佬指教下。

    14 条回复    2020-08-16 13:48:39 +08:00
    0bit
        1
    0bit  
       2020-08-15 16:26:04 +08:00   ❤️ 2
    推荐入一下 Kubernetes 的坑,以及尽量保证后端服务是 Stateless 的,涉及到状态的地方(数据库、缓存、队列、文件存储等)都直接用阿里云提供的服务,这样的话只要让程序运行好就行了。
    也推荐了解一下 12 factor 。
    lhx2008
        2
    lhx2008  
       2020-08-15 16:29:23 +08:00   ❤️ 1
    尽可能无状态,需要共享存储用云 NAS 或者 OSS
    opengps
        3
    opengps  
       2020-08-15 16:33:22 +08:00   ❤️ 2
    弹性伸缩主旨是:制作一台自定义镜像,然后自动克隆增加机器。

    如果你想动态更新代码,那么你得在主机内部部署一套启动自动拉取更新发布文件的脚本
    skymei
        4
    skymei  
    OP
       2020-08-15 16:44:55 +08:00
    @opengps 在模板镜像里面部署好环境和基础代码,然后定时去跑自动更新部署代码的脚本吗,对于脚本语言 PHP 这种来说,git pull 就差不多的了,像 go 这种咋办呢,编译完之前应该是不想提供服务的,这时候实例可能已经创建好,配置好负载均衡开始提供服务了。有点不清楚这个咋办
    skymei
        5
    skymei  
    OP
       2020-08-15 16:46:00 +08:00
    @lhx2008 我想的也是这样,不知道 NAS 可靠不,代码放一起,有点担心单点故障
    skymei
        6
    skymei  
    OP
       2020-08-15 16:46:42 +08:00
    @0bit 这块不太懂,目前也不敢贸然用
    opengps
        7
    opengps  
       2020-08-15 16:50:59 +08:00
    举个例子,程序源文件放在私有 oss 或者 nas 里,然后模板系统启动后干的事情是:
    1,建立空项目目录(模板机里可以提前建好,为了方便管理,建议直接用系统盘)
    2,从局域网拉取程序文件(更新程序的动作脱离弹性环境,弹性机器只知道拉取某些文件,然后启动固定路径的 exe 即可)
    3,调用启动获取到的程序
    最后判断依据:slb 的健康检查结果通过,扩容算作完成
    opengps
        8
    opengps  
       2020-08-15 16:51:59 +08:00
    当然还得有定时检测逻辑,用来检测到更新,主动杀死进程,拉取新文件替换,然后启动新程序
    skymei
        9
    skymei  
    OP
       2020-08-15 17:12:16 +08:00
    @opengps 好的,谢谢。SLB 健康检查,以前用的 AWS 可以自定义提供接口去检查,阿里云的不太熟,我去看看
    wejsve
        10
    wejsve  
       2020-08-15 19:05:14 +08:00
    你所说的这些使用微服务+K8S 即可解决
    wdlth
        11
    wdlth  
       2020-08-15 22:38:47 +08:00
    一般不会一次性更新所有实例的,大都是灰度发布,蓝绿部署。
    594duck
        12
    594duck  
       2020-08-15 22:43:26 +08:00 via iPhone
    你先看你公司有多大,什么业务的。

    弹性伸缩,伸简单缩要配合 API GW 都能缩。

    业务场景什么都不问,先叫你上 K8s,哈哈哈哈。我觉得你很快就会陷入“我到底是做什么的问题”
    lhx2008
        13
    lhx2008  
       2020-08-16 10:44:06 +08:00
    @skymei #4 NAS 这个名字阿里云没取好显得很 low,其实一般都是三副本的,你存一份其实在三个地方都存了。
    至于拉代码这个事情,肯定是用 CI 啊,CI 侧就把代码从 Git 拉出来,打包镜像,上传镜像到 Docker Hub 了,然后再发布一下(就是改一下镜像版本号)就可以了
    ReallllQCloud
        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%以上人无法正确理解和过渡到云的模式,我们正在做一些尝试,后续可以关注下新发布
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2877 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:21 · PVG 19:21 · LAX 03:21 · JFK 06:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.