当前位置: 首页 > 后端技术 > Python

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

时间:2023-03-26 18:13:11 Python

介绍:每一个工具的诞生都需要一个成长的过程,ServerlessDevs也在不断成长。自从开始做serverless工具以来,经常遇到有人问这样一个问题:如何保证serverless业务部署更新的一致性。这里所谓的一致性是指:我们在本地通过工具部署项目,这时候有人通过其他渠道(比如控制台等)更新项目,然后我在本地部署项目,会不会直接覆盖?例如,用户A在本地更新业务时,由于某些特殊情况,出现在线异常“x”,用户B重新更新修复此内容,但B没有及时将此事同步给A,A已更新了一个新函数,直接覆盖了B的内容,这时候,之前的异常x又出现了。如果此时你能感知到A更新时线上资源发生了变化,那么这种事情就不会发生了。会再次发生。目前基于ServerlessDevs的阿里云函数计算组件已经支持感知线上“变化”,包括以下几种情况:通过sinit创建一个函数(选择AlibabaCloudServerless,选择HTTPFunction-Python3Example):此时,我们看一下s.yaml:项目部署上线后的表现是创建一个fc-deploy-servicecn-杭州地区的服务,http-trigger-function函数创建并部署一个不在线的资源。这个时候我们确定网上没有对应的资源,于是我们部署看一下:部署完成,顺利:打开浏览器查看返回给我们的自定义地址:至此,我们可以在本地更新功能代码:保存部署:完成后查看线上资源:整个流程,还是比较接近传统的基本流程,没有触发线上变更,也算是比较满意了理想的过程。本地部署完成,在线更新,再次本地部署。这个时候,我们更改在线资源。首先我们在控制台找到函数:修改代码并部署。部署完成后,我们刷新一下刚才的地址:可以看到已经更新了。此时,我们从本地进行部署:可以看到,系统已经感知到我们的代码变化了。这个时候我们选择yes,完成后查看网上资源:这里需要说明的是,只要是函数计算,服务、函数、触发器的变化都可以在这里感知到,无论是配置还是代码。在本地创建并部署现有的在线资源此时,我们将进行最后的实验,我们将删除本地项目并重建它。然后执行部署。由于刚刚测试的原因,我们已经有这些资源上线了,所以此时就认为是上线资源部署。此时可以看出,系统感知到这个资源并没有部署到本地,而是在线的,已经存在了,所以此时需要判断是否覆盖。综上所述,代码在其他场景下更新,我们暂时需要注意。这件事其实很重要,和代码的安全发布息息相关。这时候可以通过ServerlessDevs来完成。那么问题来了,如果我已经有项目了,想把它集成到cd进程中,又不想交互操作,应该怎么处理呢?这个时候我们提供一个--use-local参数来强制覆盖线上的配置。通过这样的指令,可以实现无交互,实现本地优先。每一个工具的诞生都需要一个成长的过程,ServerlessDevs也在不断成长。期待更多更好的功能。版权声明:本文内容由阿里云实名注册用户投稿,版权归原作者所有。阿里云开发者社区不拥有自己的版权,也不承担相应的法律责任。具体规则请参考《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如发现本社区涉嫌抄袭内容,请填写侵权投诉表进行举报,一经查实,本社区将立即删除涉嫌侵权内容。