从我做 Serverless 工具开始 就经常会遇到有人问这样一个问题 如何保证Serverless业务部署更新的一致性。
所谓的一致性在这里指的是 我们通过工具在本地进行项目部署 此时再有人通过其他途径 例如控制台等 对项目进行过更新等操作 此时我再在本地进行项目部署 是不是会直接覆盖
例如 当用户 A 在本地更新了业务 因为一些特殊情况 导致出现了一个线上异常情况“x” 此时用户 B 重新更新 将这个内容修复了 但是 B 没有及时同步给 A 这个事情 A 又更新了新的功能 直接覆盖了 B的内容 这个时候之前的异常 x 又出现了 如果此时在 A 更新的时候 可以感知到线上资源已经变动 那么这种事情就不会再次发生。
目前基于 Serverless Devs 的阿里云函数计算组件 已经支持了线上“异动”的感知能力 包括了以下几个情况
本地新建并部署一个线上没有的资源本地部署完成 线上更新 本地再次部署本地新建并部署一个线上已经有的资源实验准备通过s init创建一个函数 选择Alibaba Cloud Serverless 选择HTTP Function - Python3 Example
此时我们查看一下s.yaml
该项目部署到线上之后的表现就是在cn-hangzhou区创建一个fc-deploy-service服务 以及http-trigger-function函数
本地新建并部署一个线上没有的资源此时 我们确定一下线上并没有对应资源 所以我们部署一下
部署完成 很顺利
打开浏览器 查看反馈给我们的自定义地址
此时 我们可以在本地 更新一下这个函数代码
保存部署
完成之后 再查看线上资源
整个过程 还是比较贴近传统的基本流程 也没有触发线上异动 算是中规中矩的理想过程。
本地部署完成 线上更新 本地再次部署此时 我们对线上资源进行变更 首先在控制台找到函数
修改代码 并部署。
部署完成之后 我们刷新一下刚才的地址
可以看到已经更新。此时 我们再从本地进行部署
可以看到 系统已经感知到我们的代码变化 此时 我们选择yes 完成之后在查看线上资源
此处需要额外说明的是 只要是函数计算的服务 函数 触发器发生变化 此处都可以进行感知 不管是配置还是代码。
本地新建并部署一个线上已经有的资源此时 我们再进行最后的实验 我们将本地项目删除 重新建设。然后执行部署 由于刚刚实验过的原因 我们已经在线上存在了这些资源 所以此时算是部署一个线上的资源。
此时可以看到 系统感知到这个资源本地没部署过 线上并且已经存在 所以此时需要确定是否覆盖。
总结代码在其他场景被更新 需要我们在当前得到感知 这个事情其实是非常重要的 和代码的安全发布密不可少。而此时 通过Serverless Devs是可以做到的。
那么问题来了 如果我已经有了一个项目 我想集成到cd流程 我不想出现交互式操作 应该如何处理呢
此时我们提供一个--use-local参数 用来强行覆盖线上配置 通过这样的指令就可以实现无交互的 本地优先。
每一个工具的诞生 都要有一个成长的过程 Serverless Devs正在不断的成长。期待更多更好的功能出现。
信息化2.0时代提出开展智慧教育创新发展行动。2019年2月,中共中央、国务院印发...
【51CTO.com快译】 数据可视化工具不断发展,提供更强大的功能,同时改善可访问...
从 10.0.0 版开始,异步迭代器就出现在 Node 中了,在本文中,我们将讨论异步迭...
本文整理自直播《Hologres 数据导入/导出实践-王华峰(继儒)》 视频链接: https:/...
Docker生成新镜像版本的两种方式 There are two ways Docker can generate new m...
2021年3月24日,主题为《数据的世界,世界的数据》的星环科技2021春季新品发布会...
前提条件 请您在购买前确保已完成注册和充值。详细操作请参见 如何注册公有云管...
建站 什么 虚拟主机 够用?这要看搭建的是什么类型的网站。比如个人博客类型的网...
摘要 元旦期间 订单业务线 告知 推送系统 无法正常收发消息,作为推送系统维护者...
在Python语言中有如下3种方法: 成员方法 类方法(classmethod) 静态方法(staticm...