读程序员的README笔记11_软件交付(下)

这篇具有很好参考价值的文章主要介绍了读程序员的README笔记11_软件交付(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

读程序员的README笔记11_软件交付(下)文章来源地址https://www.toymoban.com/news/detail-760012.html

1. 部署环节

1.1. 部署软件是指将软件包送到它们需要运行的地方的行为

1.2. 移动应用的部署与核反应堆的部署不同,但同样的基本原则都适用

1.3. 自动部署

1.3.1. 使用脚本而不是手动步骤来部署软件

1.3.2. 自动部署的可预测性更高,因为脚本的行为是可以重复的,并且有版本控制

1.3.3. 当事情出错时,运维人员能够推理出部署行为

1.3.4. 脚本比人更不容易犯错,而且它们消除了在部署过程中去手动调整系统、登录计算机或复制软件包的诱惑

1.3.5. 高度发展的自动化催生了持续交付

1.3.5.1. 通过持续交付,人力被完全从部署环节中移除

1.3.5.2. 打包、测试、发布、部署,甚至展开环节都是自动化的

1.3.6. 建议用现成的工具来自动化你的部署操作

1.3.6.1. Puppet、Salt、Ansible和Terraform等现成的解决方案可以与现有的工具集成,并且它们是专门为了自动化部署而设计的

1.3.7. 只需尽力通过自动化周围的一切来缩小阻断任务的边界

1.4. 部署的原子性

1.4.1. 安装脚本通常涉及多个步骤,不要假设每一步都能成功执行

1.4.2. 应使部署要么全部完成要么什么都没做(即原子性)

1.4.3. 使部署原子化的最简单方法之一是在与旧版本不同的位置上安装软件,不要覆盖任何东西

1.4.4. 在新的位置安装软件包还有一个好处,那就是回滚将变得更加容易

1.4.4.1. 只需再次指向旧的版本

1.4.5. 同一软件的不同版本可以在同一台计算机上同时运行

1.5. 独立地部署应用

1.5.1. 顺序部署

1.5.1.1. 一个应用程序的部署需要先升级另一个应用程序

1.5.1.2. 这是在有许多应用程序或服务相互通信的软件中常见的问题

1.5.1.3. 顺序部署的需求会减慢部署速度,因为应用程序必须相互等待

1.5.2. 务必避免顺序部署的需求

1.5.3. 构建可独立部署的应用程序

1.5.3.1. 不依赖顺序部署的软件必须向后和向前兼容

1.5.3.2. 通信协议必须继续允许较新和较旧的版本相互操作

2. 展开环节

2.1. 一旦新的代码被部署了,你就可以解开它(也就是展开)

2.2. 一下子把所有东西都换成新的代码是有风险的

2.2.1. 再多的测试都不会消除潜在的错误,而且一次性向所有的用户展开代码会同时对每个人造成损害

2.3. 特性开关、金丝雀部署和蓝绿部署都只面向一部分用户展开代码,并在出现问题时提供缓解机制

2.4. 系统监控

2.4.1. 增加或减少的决定仍然是由人们参考日志和系统指标而做出的

2.4.2. 当代码被提交时,你的工作还没有完成

2.4.3. 当代码被展开时,它仍然没有完成

2.5. 特性开关

2.5.1. feature flag

2.5.2. 特性切换或代码分割

2.5.3. 允许开发人员控制新代码何时发布给用户

2.5.4. 可以是“开”和“关”的布尔型的值、允许列表、基于百分比的斜坡,甚至是小型函数

2.5.5. 基于百分比的斜坡允许开发者为更大范围的用户慢慢打开该特性,通常从公司拥有的测试账户开始,然后在进行基于百分比的增量发布之前,先向单个用户倾斜

2.5.6. 函数根据输入的数动态地确定开关,通常在用户请求时就传入

2.5.7. 如果可能的话,隔离与特性开关相关联的数据,在所有的开关状态下测试你的代码,并编写脚本来清理回滚的特性数据

2.5.8. 请确保清理那些已经被完全淘汰或不再使用的旧特性开关

2.5.9. 清理特性开关就像重构一样,应该渐进地、适时地进行清理

2.5.10. 大多数的特性开关是由人类控制的

2.5.11. 特性开关有时被用于A/B测试,这是一种测试用户对新特性反应的技术

2.5.11.1. 如果以具有统计意义的方式对用户进行分组,用特性开关进行A/B测试是可行的

2.5.11.2. 除非开关分发系统为你创建水桶测试用到的桶,并由数据科学家运行你的实验,否则不要尝试用特性开关进行A/B测试

2.6. 熔断器

2.6.1. 是二进制的(开/关)、永久性的,而且是自动化的

2.6.2. 熔断器是一种特殊的特性开关,由运维事件(如延迟的峰值或异常)控制

2.6.3. 熔断器用来防止性能下降

2.6.3.1. 如果超过了延迟的阈值,某些特性可以被自动禁用或限制速率

2.6.3.2. 如果日志显示出异常行为——程序异常或日志详细程度的飙升,也可以触发熔断

2.6.3.3. 熔断器还可以防止永久性损坏

2.7. 并行的服务版本梯队

2.7.1. 将新版本的网络服务与旧版本一起部署是具有可行性的

2.7.2. 平行部署可以让你缓慢地升级,以降低风险,并在出错时快速回滚

2.7.3. 两个版本的应用程序都必须能很好地相互配合

2.7.4. 所有模式都必须贯彻向后和向前兼容

2.7.5. 金丝雀部署和蓝绿部署是两种非常常见的并行部署策略

2.7.6. 金丝雀部署用于处理高流量并会部署到大量实例的服务

2.7.6.1. 一个新的应用程序版本被首先部署到一组受限的计算机上,全部用户中的一个小的子集会被路由到这个金丝雀版本

2.7.7. 蓝绿部署指的是运行两个不同版本的应用程序:一个是主动的,一个是被动的

2.7.7.1. 新版本被部署到被动环境中,当它准备好时,流量被切换到新版本,它就变成了主动的,而以前的版本则变成了被动的

2.7.7.2. 与金丝雀部署不同的是,流量的切换是原子化的,蓝色和绿色环境尽可能地保持一致

2.7.7.3. 在云环境中,一旦版本被认为是稳定的,被动环境通常会被销毁

2.7.7.4. 当流量不容易被划出子集或者无法并行运行不同的版本时,蓝绿部署就派上了用场

2.7.7.5. 与金丝雀部署不同的是,每个环境必须能够处理100%的用户流量

2.8. 摸黑启动

2.8.1. 摸黑启动(有时被称为影子流量)将新的代码暴露在真实的流量中,而不使其对终端用户可见,即使代码是坏的,也没有用户受到影响

2.8.2. 摸黑启动的软件其实仍然启用了,代码也被调用了,只是结果被丢掉了

2.8.3. 摸黑启动可帮助开发者和运维人员在生产环境中了解他们的软件,对用户的影响最小

2.8.4. 每当你发布特别复杂的变化时,就可以利用摸黑启动的优势

2.8.5. 这种模式对于验证系统的迁移特别有效

2.8.6. 在摸黑启动模式下,应用程序的代理位于实时流量和应用程序之间

2.8.7. 某个系统在暗中读取模式下运行时,可能使用与生产系统相同的数据存储

2.8.8. 由于同一请求有两次操作,一次在生产系统,一次在影子系统,你应该注意避免与重复相关的错误

到了这里,关于读程序员的README笔记11_软件交付(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 读程序员的README笔记06_测试(上)

    4.2.3.1. 消除外部依赖性可以使单元测试快速而集中 4.5.3.1. 压力测试可暴露系统的负载能力究竟有多大,以及在过度负载下会发生什么状况 4.6.3.1. ISO认证审核委员会要求提供需求和相应的测试文件证据 5.2.1.1. 管理测试的setup和teardown 5.2.1.2. 管理测试执行和编排 5.2.1.2.1. 可

    2024年02月05日
    浏览(26)
  • 读程序员的README笔记07_测试(下)

    2.5.2.1. 首先应该关注代码中的高风险的区域 2.5.2.2. 那些低风险或被废弃的代码并不值得测试 3.2.1.1. 如果网络出现问题,那么测试也会失败 3.5.2.1. 使用常数种子的随机数生成器的测试将总是通过或总是失败 3.7.3.1. 注入式时间戳将让你使用模拟来精确控制测试中的时间流逝

    2024年02月05日
    浏览(28)
  • 读程序员的README笔记08_依赖管理

    2.6.1.1. 版本不应该被重复使用 2.6.1.2. 永远不要在现有版本下重新发布更改的代码 2.6.2.1. 版本应该帮助人们和工具对版本的优先顺序进行推断 2.6.3.1. 版本信息区分了预先发布的代码和已发布的代码,将构建流水号与构件相关联,并设置了稳定性和兼容性的合理预期 6.2.5.1

    2024年02月05日
    浏览(30)
  • 读程序员的README笔记04_防御式编程

    1.2.1.1. 切记让你的代码安全而有弹性 1.2.1.2. 编写拥有良好防御性的代码是一种对那些运行你的代码的人(包括你自己!)富有同情心的表现 1.2.1.3. 防御性的代码较少发生故障,就算它发生故障,也更有可能恢复 1.2.1.4. 安全的代码利用编译时的校验来避免运行时的故障,使

    2024年02月05日
    浏览(30)
  • 读程序员的README笔记01_学习如何学习

    6.3.2.1. 错误是不可避免的。成为一名软件工程师的路途艰辛,我们有时会失败 6.5.4.1. 代码从不说谎。注释有时却会。 6.5.4.1.1. Code never lies. Comments sometimes do 6.5.4.1.2. 去读源代码,因为它并不总是与设计文档相吻合 6.5.4.1.3. 不要只读你自己的代码库,还要去阅读高质量的开

    2024年02月05日
    浏览(28)
  • 读程序员的README笔记05_日志、监控与配置

    6.1.1.1. 测量的是某个事件发生的次数 6.1.1.2. 通过使用计数器获得缓存命中数和请求总数,你就可以计算出缓存命中率 6.1.2.1. 一个基于时间点的测量值 6.1.2.2. 既可以上升又可以下降 6.1.3.1. 根据事件的大小幅度分成不同的范围 6.1.3.2. 每一个范围都会有一个计数器,每当某

    2024年02月05日
    浏览(29)
  • 读程序员的README笔记14_技术设计流程(下)

    1.4.2.1. 该项目将需要至少一个月的工程时间 1.4.2.2. 变更将对软件的扩展和维护产生长期的影响 1.4.2.3. 变更将显著影响其他团队 1.5.2.1. 设计文档是一种工具,可以帮助你思考、获得反馈、让你的团队了解情况、培养新的工程师,并推动项目规划 1.5.5.1. 阅读大量的设计文档

    2024年02月04日
    浏览(26)
  • 读程序员的README笔记13_技术设计流程(上)

    3.4.1.1. 外界干扰是深度工作的“杀手” 3.4.1.2. 避免所有的交流方式 3.4.1.2.1. 关闭聊天 3.4.1.2.2. 关闭电子邮件 3.4.1.2.3. 禁用电话通知 3.4.1.2.4. 换个地方坐 3.4.2.1. 有形产出是一份设计文档 4.2.3.1. 如果有一个以上的问题,询问哪些问题是最优先的 4.3.7.1. 注意与外人交流时不

    2024年02月04日
    浏览(43)
  • 读程序员的README笔记18_职业生涯规划

    3.1.5.1. 他们的工作职责之一是管理他们的团队,而管理的一部分就是对你投入时间 3.1.5.2. 对管理者而言,反复取消一对一面谈可以是一个有价值的信号 3.3.2.1. 每个目标都附有3到5个关键结果,它们是标志着目标达成的具体指标 3.3.2.2. 不要把关键结果变成待办事项清单 3.

    2024年02月04日
    浏览(29)
  • 读程序员的README笔记17_构建可演进的架构(下)

    1.3.3.1. 开发人员可以只专注于和自己相关的字段,因为它们会继承其他字段的默认值 1.3.3.2. 默认值可使大型API在感觉上很小巧 1.4.1.1. OpenAPI通常用于RESTful服务 1.4.1.2. non-REST服务则使用Protocol Buffers、Thrift或类似的接口定义语言(interface definition language,IDL) 1.4.1.3. 接口定义工

    2024年02月04日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包