如何保证 Serverless 业务部署更新的一致性?
简介: 代码在其他场景被更新,需要我们在当前得到感知,这个事情其实是非常重要的,和代码的安全发布密不可少。而此时,通过 Serverless Devs 是可以做到的。
作者|Anycodes
从我做 Serverless 工具开始,就经常会遇到有人问这样一个问题:如何保证 Serverless 业务部署更新的一致性。
所谓的一致性在这里指的是:我们通过工具在本地进行项目部署,此时再有人通过其他途径(例如控制台等),对项目进行过更新等操作,此时我再在本地进行项目部署,是不是会直接覆盖?
例如,当用户 A 在本地更新了业务,因为一些特殊情况,导致出现了一个线上异常情况 “X”,此时用户 B 重新更新,将这个内容修复了,但是 B 没有及时同步给 A 这个事情,A 又更新了新的功能,直接覆盖了 B 的内容,这个时候之前的异常 “X” 又出现了,如果此时在 A 更新的时候,可以感知到线上资源已经变动,那么这种事情就不会再次发生。
目前基于 Serverless Devs 的阿里云函数计算组件,已经支持了线上 “异动” 的感知能力,包括了以下几个情况:
- 本地新建并部署一个线上没有的资源
- 本地部署完成,线上更新,本地再次部署
- 本地新建并部署一个线上已经有的资源
实验准备
通过 s init 创建一个函数(选择 Aibaba Cloud Serverless, 选择 HTTP Function - Python3 Example ):

此时我们查看一下 s.yaml :

该项目部署到线上之后的表现就是在 cn-hangzhou 区创建一个 fc-deploy-service 服务,以及 http-trigger-function 函数。
实验过程
本地新建并部署一个线上没有的资源
此时,我们确定一下线上并没有对应资源,所以我们部署一下:
部署完成,很顺利:
打开浏览器,查看反馈给我们的自定义地址:

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

保存部署:

完成之后,再查看线上资源:

整个过程,还是比较贴近传统的基本流程,也没有触发线上异动,算是中规中矩的理想过程。
本地部署完成,线上更新,本地再次部署
此时,我们对线上资源进行变更,首先在控制台找到函数:

修改代码,并部署。

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

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

可以看到,系统已经感知到我们的代码变化,此时,我们选择yes,完成之后在查看线上资源:
此处需要额外说明的是,只要是函数计算的服务,函数,触发器发生变化,此处都可以进行感知,不管是配置还是代码。
本地新建并部署一个线上已经有的资源
此时,我们再进行最后的实验,我们将本地项目删除,重新建设。然后执行部署,由于刚刚实验过的原因,我们已经在线上存在了这些资源,所以此时算是部署一个线上的资源。

此时可以看到,系统感知到这个资源本地没部署过,线上并且已经存在,所以此时需要确定是否覆盖。
总结
代码在其他场景被更新,需要我们在当前得到感知,这个事情其实是非常重要的,和代码的安全发布密不可少。而此时,通过 Serverless Devs 是可以做到的。
那么问题来了,如果我已经有了一个项目,我想集成到cd流程,我不想出现交互式操作,应该如何处理呢?
此时我们提供一个 --ues-local 参数,用来强行覆盖线上配置,通过这样的指令就可以实现无交互的,本地优先。
每一个工具的诞生,都要有一个成长的过程,Serverless Devs 正在不断的成长。期待更多更好的功能出现。
本文为阿里云原创内容,未经允许不得转载。
如何保证 Serverless 业务部署更新的一致性?的更多相关文章
- 利用WSUS部署更新程序
WSUS概述 为了让用户的windows系统与其他microsoft产品能够更安全,更稳定,因此microsoft会不定期在网站上推出最新的更新程序供用户下载与安装,而用户可以通过以下方式来取得这些程 ...
- 你的SpringBoot应用真的部署更新成功了吗
前提 当我们在生产环境部署了SpringBoot应用的时候,虽然可以通过Jenkins的构建状态和Linux的ps命令去感知应用是否在新的一次发布中部署和启动成功,但是这种监控手段是运维层面的.那么, ...
- 从Kubernetes到“云原生全家桶”,网易如何让业务部署提效280%?
近日,网易云轻舟微服务团队接受了CNCF的采访,分享了网易云在云原生领域尤其是Kubernetes方面的实践经验.以下为案例全文:公司:网易地点:中国杭州行业:互联网技术 挑战它的游戏业务是世界上最大 ...
- 基于serverless快速部署前端项目到腾讯云
腾讯云 COS 组件,可以快速部署静态网站页面到对象存储 COS 中,并生成域名供访问. 安装 首先要安装 serverless 组件 npm install -g serverless 在项目的根目 ...
- 分享一例测试环境下nginx+tomcat的视频业务部署记录
需求说明:在测试环境下(192.168.1.28)部署一套公司某业务环境,其中:该业务前台访问地址: http://testhehe.wangshibo.com该业务后台访问地址: http://te ...
- 在同一个方法里,有redis,数据库和api,如何保证方法的事务性或者最终一致性?
https://segmentfault.com/q/1010000017519179/a-1020000017547192
- 2020-04-11:A系统联机同步调用B系统(A和B不是同一公司系统,不能用分布式事务),如何保证系统间数据准实时一致性(设计思路即可)?提醒:需要考虑调用超时、并发、幂等、反交易先到等问题
福哥答案2020-04-12: 可参考微信支付和支付宝支付.
- CQRS\ES架构介绍
大家好,我叫汤雪华.我平时工作使用Java,业余时间喜欢用C#做点开源项目,如ENode, EQueue.我个人对DDD领域驱动设计.CQRS架构.事件溯源(Event Sourcing,简称ES). ...
- EMQX Cloud Serverless 正式上线:三秒部署、按量计费的 MQTT Serverless 云服务
近日,全球领先的开源物联网数据基础设施软件供应商 EMQ 正式发布了 MQTT Serverless 云服务 -- EMQX Cloud Serverless 的 Beta 版本,开创性地采用弹性多租 ...
- 单页面应用(SPA)重新部署后,正在浏览的页面如何更新缓存?
当单页面的系统在重新部署更新时,此时正在浏览网页,并且已经在网页内的用户,始终会使用老的js与css文件,一直在使用已经缓存了的静态资源. 所有的缓存问题焦点都在index.html上,只要index ...
随机推荐
- dubbo 泛化调用场景下,如何调用下游的泛型对象入参
dubbo泛化调用时,除了java原生的collection,map泛型对象,业务自定义的泛型对象是不支持泛化调用的,无法正确的填充下游数据对象.两种解法: 泛化调用的时候把泛型具体类型的全限定类路径 ...
- JAVA 相关
1. google guava cache 2. presto 3. loadingcache 4. aspect
- 【leetcode 1799 N次操作后的最大分数和】状态压缩
回溯会超时,状态压缩 class Solution { public int maxScore(int[] nums) { int len = nums.length; int size = 1 &l ...
- 02.Android之IPC机制问题
目录介绍 2.0.0.1 什么是Binder?为什么要使用Binder?Binder中是如何进行线程管理的?总结binder讲的是什么? 2.0.0.2 Android中进程和线程的关系?什么是IPC ...
- 说说如何在Vue项目中应用TypeScript?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.前言 与link类似 在VUE项目中应用typescript,我们需要引入一个库vue-property-decorator, 其是基 ...
- FreeRTOS教程10 低功耗
1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...
- 使用graphviz图形化展示路径(决策树用到此库)
问题:当出现错误 graphviz.backend.execute.ExecutableNotFound: failed to execute WindowsPath('dot'), make sur ...
- Java程序连接KingbaseES 异常
错误信息: --KStudio客户端工具错误信息 The conncetion attempt failed.Reason:connect time out --Java应用程序控制台日志 Cause ...
- archlinux 格式化分区并创建文件系统后,分区的文件系统没有改变
这就需要格式化分区并创建文件系统后 再执行partprobe应该就可以看到分区的文件系统改变了 partprobe partprobe命令用于通知操作系统重新读取分区表,以便识别新创建的分区或者删除的 ...
- #排列组合#美团2018年CodeM大赛-决赛 A-Exam
题目 分析 因为第一名所在的学校一定会发喜报, 所以只有一个学校发喜报说明其它学校都没有发喜报 钦定第一名所在的学校为1,总方案要乘\(n\),那么两个1之间不可能出现两个相同的学校的学生 那么可以分 ...