当前位置:主页 > 查看内容

如何保证 Serverless 业务部署更新的一致性?

发布时间:2021-07-19 00:00| 位朋友查看

简介:从我做 Serverless 工具开始 就经常会遇到有人问这样一个问题 如何保证Serverless业务部署更新的一致性。 所谓的一致性在这里指的是 我们通过工具在本地进行项目部署 此时再有人通过其他途径 例如控制台等 对项目进行过更新等操作 此时我再在本地进行项目部……

从我做 Serverless 工具开始 就经常会遇到有人问这样一个问题 如何保证Serverless业务部署更新的一致性。


所谓的一致性在这里指的是 我们通过工具在本地进行项目部署 此时再有人通过其他途径 例如控制台等 对项目进行过更新等操作 此时我再在本地进行项目部署 是不是会直接覆盖

例如 当用户 A 在本地更新了业务 因为一些特殊情况 导致出现了一个线上异常情况“x” 此时用户 B 重新更新 将这个内容修复了 但是 B 没有及时同步给 A 这个事情 A 又更新了新的功能 直接覆盖了 B的内容 这个时候之前的异常 x 又出现了 如果此时在 A 更新的时候 可以感知到线上资源已经变动 那么这种事情就不会再次发生。

目前基于 Serverless Devs 的阿里云函数计算组件 已经支持了线上“异动”的感知能力 包括了以下几个情况

本地新建并部署一个线上没有的资源本地部署完成 线上更新 本地再次部署本地新建并部署一个线上已经有的资源实验准备


通过s init创建一个函数 选择Alibaba Cloud Serverless 选择HTTP Function - Python3 Example

1.png

此时我们查看一下s.yaml

2.png

该项目部署到线上之后的表现就是在cn-hangzhou区创建一个fc-deploy-service服务 以及http-trigger-function函数

本地新建并部署一个线上没有的资源


此时 我们确定一下线上并没有对应资源 所以我们部署一下

3.png

部署完成 很顺利

4.png

打开浏览器 查看反馈给我们的自定义地址

5.png

此时 我们可以在本地 更新一下这个函数代码

6.png

保存部署

7.png

完成之后 再查看线上资源

8.png

整个过程 还是比较贴近传统的基本流程 也没有触发线上异动 算是中规中矩的理想过程。

本地部署完成 线上更新 本地再次部署

此时 我们对线上资源进行变更 首先在控制台找到函数

9.png

修改代码 并部署。

10.png

部署完成之后 我们刷新一下刚才的地址

11.png

可以看到已经更新。此时 我们再从本地进行部署

12.png

可以看到 系统已经感知到我们的代码变化 此时 我们选择yes 完成之后在查看线上资源

13.png

此处需要额外说明的是 只要是函数计算的服务 函数 触发器发生变化 此处都可以进行感知 不管是配置还是代码。

本地新建并部署一个线上已经有的资源


此时 我们再进行最后的实验 我们将本地项目删除 重新建设。然后执行部署 由于刚刚实验过的原因 我们已经在线上存在了这些资源 所以此时算是部署一个线上的资源。

14.png

此时可以看到 系统感知到这个资源本地没部署过 线上并且已经存在 所以此时需要确定是否覆盖。

总结


代码在其他场景被更新 需要我们在当前得到感知 这个事情其实是非常重要的 和代码的安全发布密不可少。而此时 通过Serverless Devs是可以做到的。

那么问题来了 如果我已经有了一个项目 我想集成到cd流程 我不想出现交互式操作 应该如何处理呢

此时我们提供一个--use-local参数 用来强行覆盖线上配置 通过这样的指令就可以实现无交互的 本地优先。

每一个工具的诞生 都要有一个成长的过程 Serverless Devs正在不断的成长。期待更多更好的功能出现。


本文转自网络,原文链接:https://developer.aliyun.com/article/785431
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐