惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
MyScale Blog
MyScale Blog
Cyberwarzone
Cyberwarzone
Schneier on Security
Schneier on Security
I
Intezer
Cisco Talos Blog
Cisco Talos Blog
Cloudbric
Cloudbric
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
NISL@THU
NISL@THU
博客园 - Franky
F
Fortinet All Blogs
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
T
Troy Hunt's Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Project Zero
Project Zero
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
美团技术团队
D
Docker
PCI Perspectives
PCI Perspectives
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
L
LINUX DO - 最新话题
Recent Announcements
Recent Announcements
Hacker News: Ask HN
Hacker News: Ask HN
人人都是产品经理
人人都是产品经理
月光博客
月光博客
D
DataBreaches.Net
The Hacker News
The Hacker News
爱范儿
爱范儿
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
SecWiki News
SecWiki News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
A
About on SuperTechFans
Latest news
Latest news
GbyAI
GbyAI
T
Tor Project blog
L
LINUX DO - 热门话题
Security Latest
Security Latest
博客园 - 聂微东
Y
Y Combinator Blog
AI
AI
M
MIT News - Artificial intelligence

顾宇的博客

用 AI 重启生活 初始化 MacOS 关于我 再次见面,期待相遇 演讲和分享 如何通过政策红利获利?——海南发展(SZ.002163)交易复盘 2025年的总结 2024年的总结 2023年的总结 2022年的总结 《敏捷测试价值观、方法与实践》序 【翻译】函数式编程中的领域驱动设计 【翻译】通过跟踪技术债来改进你的开发实践 【翻译】不要把测试用例自动化 【翻译】持续部署 vs 持续交付 【翻译】测试替身 【翻译】做多少测试才足够 【翻译】蓝绿部署的起源 【翻译】作为演进式架构的微服务架构 【翻译】gRPC 的动机和设计原则 【翻译】分布式计算谬误 【翻译】微服务和分布式对象第一法则 采用 Multipass 管理本机虚拟 K8S 集群 博客主题升级到 Congo 2.0 【翻译】Terraform 最佳实践:模块组合 【翻译】Kubernetes 部署语言(Kubernetes Deployment Language) 通过 Vagrant 一键初始化 K8S 集群 2021年的总结 通过 Github Actions 部署 Mkdocs 文档 博客迁移到了新的 Hugo 主题 2020年的总结 2019年的总结 千人规模组织级 DevOps 演进的 9 个实践技巧 从技术雷达看 DevOps 的十年——容器技术与微服务 DevOps 模式 - 引入 DevOps 顾问 DevOps 模式 - 索引 DevOps 模式 - 定义你的DevOps 从技术雷达看 DevOps 的十年——基础设施即代码与云计算 DevOps 模式 - 采用模式语言讨论 DevOps 从星巴克店面运营学习 DevOps 从技术雷达看 DevOps 的十年——DevOps与持续交付 【翻译】微服务安全:所有应该被问到的问题 云原生下的 DevSecOps 实践 【翻译】软件定义交付宣言 微服务演进中的经验和反思 迟到的 2018 年终总结 成功微服务实施的组织演进 从第19期技术雷达看 DevOps 的发展趋势 成功微服务实施的技术演进 我们如何衡量微服务的成功? 关于四周四 AWS 架构工作坊的设计和实践 讨论微服务之前,你知道微服务的 4 个定义吗? 公有云(AWS)上的生产环境架构优化案例和迁移套路总结 公有云(AWS)上的生产环境性能分析案例 一怒之下,我又写了一个开源流量测试工具 采用 DevOps 故事落地 DevOps 测试驱动开发 Nginx 配置 云原生 DevOps 翻译-混沌工程的原则 Serverless 风格的微服务的持续交付 从最新一期技术雷达看 DevOps 的发展 关于 DevOps ,咱们聊的可能不是一回事 Serverless 风格的微服务的架构案例 提升微服务实施效率的 7 个步骤 微服务实施常被忽视的 5 个难点 你的 CI 在挖矿吗? DevOps前世今生 - 4. DevOps 的文化 DevOps发展的九个趋势 不要让你的持续集成服务器成为安全隐患 DevOps 前世今生 - 3. DevOps 的目标和核心 DevOps 前世今生 - 2. DevOps 矛盾从何而来 DevOps 前世今生 - 1. DevOps 编年史
【翻译】持续部署
顾宇 · 2022-04-13 · via 顾宇的博客
  1. 顾宇的博客/
  2. Blogs/
  3. 【翻译】持续部署/

原文: http://timothyfitz.com/2009/02/08/continuous-deployment/

Alex 已经重构了一些网站后端的代码。当提交这个小任务的代码后,Alex 继续开发下一个特性。

当代码部署到生产环境两周以后,这段代码让整个网站宕机。自动化测试没有测试到一个字符导致的拼写错误,连锁故障让人想起了 Twitter 刚刚发布的时候。人们花了8个小时隔离问题,修复了这个错误的字符,并部署到生产环境,终于回复正常。

Alex 诅咒运气,指责人类的无懈可击,以及软件工程不可避免的成本,然后继续下一个任务。

这个故事每天都在我所知道的创业公司发生。这很糟糕。Alex 有一个她不知道的问题。她的软件开发实践是不可持续的。像这样“愚蠢的失误”会随着产品增长的越来越复杂、团队越来越大而变得更加频繁。Alex 需要切换到一个可以规模化的解决方案。

在我的到这个解决方案前,让我先告诉你一些常见的解决方案。当这些解决方案产生了真实的问题后,它们就不是能解决 Alex 境遇的解决方案。

更多的手动测试:这个明显不可能随着复杂性的提升而规模化。这么做也无法逐字的捕获每个问题,因为你的测试沙箱或者测试集群永远无法做到和生产环境一模一样。

更多前置的计划:前置计划就像烹饪菜谱中的条目。它无法准确的告诉你多少是多,多少是少。但是我将要告诉你要刚刚好——不要太多也不要太少,因为那些无疑会毁掉了食物或这产品。过度计划的自然趋势是专注于非现实问题。 现在你会犯更多愚蠢的错误,但它们将是针对那些无关紧要的需求设计的。

多的自动化测试:自动化测试很棒,更多的自动化测试更好。但无论多少自动化测试都无法确保在人类的天性下某个功能完全正常,因为没有任何自动化测试会像用户那样残酷、随机、恶意、无知或激进。

代码审查和结对编程是优秀的实践:这些实践将提升代码质量,防止缺陷并培养你的程序员。虽然这些实践可以在很大程度上减少缺陷,但最终他们受到以下事实的限制:虽然两个人比一个人好,但他们仍然是人。 这些实践只能捕获到你的组织作为一个整体已经有能力能够发现的故障。

降低发布频率:虽然这么做可以降低宕机时间(软件中断并回滚),但开发和返工时间会更大,失误仍然会继续出现。其自然的趋势会导致发布更加不频繁,直到你完全不发布。然后你会被强迫做一次完全的重写,这依然是末日。

那么 Alex 应该怎么办呢? 持续部署!让每一次代码提交应当立即部署到生产环境。让我们重新看看 Alex 的故事,假设她已经可以使用理想的持续部署实践。Alex 提交代码。几分钟后她集群健康状态异常。故障很容易追溯到并会滚 Alex 的变更。Alex 花了最少的时间调试,找到它的拼写错误很容易。她的变更仍然导致了级联的故障,但是宕机时间已经最小了。

这是经典的快速失败模式在软件发布过程中的一个实现。你和引入故障变更越近,你就能获得更多的数据修复这个故障。在代码中快速失败意味着在输入无效的时候抛出一个异常而不是等待它在以后未知的地方出错。在一个软件发布的过程中快速失败意味着尽快发布未部署的代码,而不是等待一周后出现发布故障。

持续部署是简单的:只需要越来越频繁的发布你的代码。也许从今天开始替代每周或者每月的发布频率,但是随着时间的推移,你会达到理想的目标并且在过程中持续获得收益。

2009年2月8日

Timothy Fitz

(完)