首页 > 其他分享 >第十二章:低风险发布

第十二章:低风险发布

时间:2023-07-26 16:01:15浏览次数:33  
标签:风险 功能 部署 环境 第十二章 开关 发布 版本

高频发布是一种趋势
  收益与成本共存
    高频发布的收益:
      有更多的机会与真实用户互动,从而快速决定或调整自己产品前进的方向
      由于每次变更规模较小,软件系统没有剧烈的变化,从而降低部署风险
      单次部署成本降低,且趋于稳定
      出现问题易定位、易修复,且能够快速更正
降低发布风险的方法
  蓝绿部署
    指准备两套完全一致的运行环境,其中一套环境作为正式生产环境,对外提供软件服务。另一套环境作为新版本的预生产环境,部署软件的新版本,并对其进行验收测试。当确认没有问题后,将访问流量引流到这个新版本所在的环境中,作为正式的生产环境,同时保持旧版本所在环境不变。直至确定新版本没有问题后,再将旧版本所运行的环境作为下一个新版本的预生产环境,部署未来的新版本。
    缺点:
      数据库复制成本高,若用一个数据库则需对新旧两个软件版本做兼容性处理
      当切换发生在用户的一次业务操作过程当中且涉及事务处理时,数据的一致性问题
  滚动部署
    指从服务集群中选择一个或多个服务单元,停止服务后执行版本更新,再重新将其投入使用。
  金丝雀发布与灰度发布
    金丝雀发布:指通过让一小部分用户先行使用新版本,以便提前发现软件存在的问题,从而避免让更多用户收到伤害的发布方式。
    灰度发布:将发布分成不同的阶段,每个阶段的用户数量逐级增加。如果新版本在当前阶段没有发现问题,就再扩展用户数量进入下一个阶段,直至扩展到全部用户
      实现方式:
        通过开关隔离方式实现:将软件的新版本部署到生产环境中的所有节点,通过配置开关的方式,针对不同范围的用户开放新功能(比如通过网关、IP、cookie、基于某个请求参数做流量切换实现白名单)
        通过滚动部署方式实现:将软件的新版本部署到生产环境中的一部分节点上,对这些节点的访问流量就会使用这个新版本的功能,而其他节点的访问流量仍旧使用原版本的功能
  暗部署
    功能或特性在正式发布之前,将其第一个版本部署到生产环境,以便在向最终用户提供该功能之前,团队可以对其进行测试,并发现可能的错误。
    特点:用户无感知
    实现方式:
      通过开关技术来实现
      流量克隆方式实现
高频发布支撑技术
  功能比较复杂,无法在两次发布之间完成开发
    解决方法:
      拆分功能:将一个功能进行分解,分解为更小的在一个开发周期内能够完成的功能集
      先后再前:先实现服务端功能,再实现用户界面。即首先实现用户不可见的那部分功能,同时要确保不影响原有的功能
      功能开关技术
  功能开关技术
    通过开关隐藏未开发完成的功能
    用途:
      隔离:即将未完成功能的代码隔离在执行路径之外,使之对用户不产生影响
      快速止血:一旦生产环境出了问题,直接找到对应功能的开关选项,将其设置为“关闭”
    遵循原则:
      在满足业务需求的前提下,尽可能少用开关技术
      如果在“分支”和“开关”之间选择,尽可能选择开关技术
        开关技术可以小步迭代
        可以在主干上与他人代码频繁集成,尽早发现设计冲突问题
        创建分支会带来后期的分支合入以及多次测试成本
      软件团队应对开关配置项进行统一管理,方便查找和查看状态
      尽可能使用统一的开关框架和开关策略。开关策略是指开关的定义、命名,以及如何配置
  数据迁移技术
    字段尽可能只增不删:对数据库表中的原有字段不再进行修改和删除操作
    数据迁移
      为数据库结构增加一个新版本
      修改应用程序,同时向两个版本的结构中写入数据
      编写脚本程序,以后台服务的方式将原来的历史数据回填到新版本的结构中
      修改应用程序,从新旧两个版本中读取数据,并进行比较,确保一致
      当确认无误后,修改应用程序,只向新版本写入数据。可以将原来的旧版本数据保留一段时间,以防止未预料的问题出现
  抽象分支方法
    不创建真实分支的情况下,通过设计手段,将大的重构项目分解成很多个小的代码变更步骤,逐步完成重大的代码架构调整
  升级替代回滚
    尽可能以代码升级的方式代替二进制回滚
影响发布频率的因素
  增量发布带来的收益和可能性
  每次发布或部署的操作执行成本有多高
  出现问题的概率与由这些问题带来的成本有多少
  维护同一软件的众多不同版本带来的成本
  高频发布模式对工程师的技能要求
  支撑这种高频发布所需要的基础工具设施与流程完善性
  组织对这种高频发布的态度和文化取向

标签:风险,功能,部署,环境,第十二章,开关,发布,版本
From: https://www.cnblogs.com/wxf1314/p/17582691.html

相关文章

  • WhaleScheduler 2.4.5 版本重磅发布!WhaleGPT 赋能企业私有化模型训练
    重点一览:随着现代数据技术体系的发展,数据驱动已经成为企业管理不可或缺的一部分,数据遍布在企业内部的每一个角落。每个企业积累的海量的大数据,但真正发挥效能的数据微乎其微,形成了大量的“沉睡”数据。而企业内部的数据用户,从数据分析师到市场营销人员再到销售人员,每个员工现在都......
  • 《Science》发布:125个最前沿的科学问题
    《Science》公布:新版全世界最前沿的125个科学问题―高校科技―中国教育和科研计算机网CERNET(www.edu.cn)《Science》创刊125周年:公布了125个最具挑战性的科学问题(1)-社区报道-最新消息-美国华裔教授专家网ScholarsUpdate.com(hi2net.com)《Science》发布:125个最前......
  • 2023年发布的25个开源大型语言模型总结
    大型语言模型(llm)是一种人工智能(AI),在大量文本和代码数据集上进行训练。它们可以用于各种任务,包括生成文本、翻译语言和编写不同类型的创意内容。今年开始,人们对开源LLM越来越感兴趣。这些模型是在开源许可下发布的,这意味着任何人都可以使用、修改和分发它们。这使得研究人员、......
  • Njs 0.8.0发布
    导读Njs0.8.0发布,分为nginx模块和核心进行介绍。nginx模块更改:删除了0.7.10版本中引入的FetchAPI中对禁止的头信息的特殊处理。更改:删除了http模块中自0.5.0以来废弃的r.requestBody()和r.responseBody()。更改:在http模块中过滤时,在r.internalRedirect()中抛出一......
  • 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v9.0版已发布
    关于MobileIMSDKMobileIMSDK是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、标准Java平台,服务端基于Netty编写。工程开源地址是:1)Gitee码云地址:https://gitee.com/jackjiang/Mobi......
  • vs c#判断程序是否调试模式,开发模式,发布模式,Debug模式,Release模式
    转发自:https://blog.csdn.net/qq_37664403/article/details/1187471951.Debug模式,Release模式#ifDEBUGConsole.WriteLine(“Debug模式”);#elseConsole.WriteLine(“Release模式”);#endif此方法适合习惯好的程序员,但是对我来说不怎么习惯使用,因为调试个代码,和不在调试情况下运......
  • RDIFramework.NET CS敏捷开发框架 V6.0发布(支持.NET6+、Framework双引擎可选,全网唯一
    全新RDIFramework.NETV6.0CS敏捷开发框架发布,全网唯一支持.NET6+,Framework双引擎,降低开发成本,提高产品质量,提升用户体验与开发团队稳定性,做软件就选RDIFramework.NET敏捷开发框架。1、RDIFramework.NETCS敏捷开发框架介绍RDIFramework.NETC/S敏捷开发框架,是我司重磅推出......
  • 【MySQL线上修改大表结构有哪些风险】
    (文章目录)1.背景在实际应用中,我们经常会遇到需要修改大表结构的情况,比如增加或删除字段、修改字段类型、添加或删除索引等。但是,这些修改操作都是要对线上数据库进行的,如果处理不当,就容易导致数据丢失、性能下降、系统崩溃等问题,给业务带来不可挽回的损失。因此,本文总结了MySQL......
  • 自定义gradle插件并且发布到本地仓库
    转载请标明出处,维权必究:http://77blogs.com/?p=189一、在工程上新建一个Module。二、删除其余不必要的文件,最终目录结构如下:注意:由于我用的是kotlin语言,所以用的是java目录,java语言也是用java目录,如果用的是groovy语言,那么就用groovy目录。src/main/resources/META-INF/gra......
  • C# .NET core Avalonia 11.0版本,发布linux记录
    .netcore7.0+centos7.0cetnos目前运行在hyperV虚拟机里 虚拟机部署的注意事项1需要配置网络环境,  确保在同一局域网下如果sftp无法连接ctrl+shift+f2切换到命令行,开启22端口iptables-IINPUT-ptcp--dport22-jACCEPT同时虚拟机网络也要正确配置.......