写点什么

超越持续集成——持续部署

  • 2009-03-11
  • 本文字数:1118 字

    阅读完需:约 4 分钟

特征进入产品阶段越快,它就能越早提供价值。系统响应客户反馈的速度越快,它就能越早让客户满意。 Timothy Fitz Joe Ludwig 最近发布了一些文章,描述了持续部署的实践经验,将交付周期从以星期计缩短到以分钟计。

Timothy 的第一篇文章描述了持续部署如何影响修复 bug 的成本。错误被发现的时间越迟,修复的难度越高,代价也最昂贵。如果工程师在敲下代码的时候就发现了问题,那修复的成本几 乎为零。如果编译器捕获了 bug,它对开放时间造成的影响就是以分钟计的。如果 bug 进入了产品,而且在一段时间内没有被发现,找到 bug、修复 bug 的 代价就会让人觉得难以承受。千年虫问题就是一个典型的例子。Timothy 赞同快速失败(fail fast),这样 bug 所造成的影响和代价都会降低到最小。

读者的评论基本上对持续集成的实用性全持强烈的质疑态度。Erik A. Brandstadmoen 直言不讳:“在实际应用中,我觉得 [你的] 做法还不够”。来自 ycombinator 的一位评论者说道:“唔……不。也许这种做法对单人适用,可以取代持续继承。不过要是在一个复杂的系统上,许多人同时提交,你的站点肯定玩完。”

imothy 又写了一篇文章回应质疑声,他介绍了 IMVU 是怎么持续部署系统的。 IMVU 的做法是,先用持续集成来做快速构建,测试新的变化。这里有一个关键点——要有大量的、覆盖范围广的、非常可靠的自动化测试。他们用了许多测试机,用来保证可以在 10 分钟以内运行整个测试套件。所有测试都已通过以后,部署便开始了。

代码用 rsync 备份到集群的几百个机器里面。用一个 push 脚本来得到平均负载、cpu 占用率、php 错误及崩溃等等的样本作为基线。然后在小部分机器 上建立 symlink,让代码在这些机器上运行起来。一分钟以后,push 脚本就会在集群中重新收集样本,如果数据出现大幅度衰退,那么就把代码回退到上 一个版本;如果没有的话,就把代码在整个集群上运行起来,继续监控,五分钟之后重新收集数据。然后代码就可以正式运行了。

IMVU 现在有 60 名员工,3 千万注册用户,每月收入上百万英镑,做出的成绩可相当不俗。不过从 Michael Bolton James Bach 的调查中看,这个系统也不完美。 Elisabeth Hendrickson 指出,完美并不是这个系统的目标。

Joe Ludwig Pirates of the Burning Sea 的前任架构师,他写了两篇文章,指出怎样才能在重量级的客户端代码的环境中执行持续部署。他先是描述了“Pirates”长达7 个半小时的部署过程,然后略述了怎样把它缩短到1 个小时。在第二篇文章中,他详细描述了要把一小时部署变成现实所要做出的重大技术改动。

你有没有持续部署的经验?要把你的系统变的可以持续部署,需要做出那些变动?请留下你的观点,与读者共享。

查看英文原文 Beyond Continuous Integration: Continuous Deployment

2009-03-11 20:312660
用户头像

发布了 197 篇内容, 共 63.6 次阅读, 收获喜欢 21 次。

关注

评论

发布
暂无评论
发现更多内容

如何利用 Django 进行API 开发

宇宙之一粟

django API 6月月更

centos系统下php完全离线安装

乌龟哥哥

6月月更

C#入门系列(四) -- 常量和变量

陈言必行

C# 6月月更

sap.ui.core.IAsyncContentCreation 这个标记接口在 SAP UI5 框架中的应用

汪子熙

前端开发 前端框架 Fiori SAP UI5 6月月更

在线HTML转JADE工具

入门小站

工具

【Spring 学习笔记(二)】Spring Bean 配置方式 与Spring Bean实例化

倔强的牛角

6月月更

阻塞队列实现原理

急需上岸的小谢

6月月更

Vue框架学习笔记 每天学习----五

恒山其若陋兮

6月月更

在线人民币数字金额转成美元金额大写工具

入门小站

工具

RTP与RTCP协议简述

穿过生命散发芬芳

rtp/rtcp 6月月更

IDEA 中使用 Big Data Tools 连接大数据组件

JasonLee实时计算

flink

【高并发】高并发环境下如何优化Tomcat性能?看完我懂了!

冰河

并发编程 多线程 高并发 异步编程 6月月更

leetcode 46. Permutations 全排列(中等)

okokabcd

LeetCode 搜索 数据结构与算法

实战Redis序列化性能测试(Kryo和字符串)

程序员欣宸

Java redis 序列化 6月月更

ES6集合引用类型Map与WeakMap

大熊G

JavaScript 前端 6月月更

通过知识图谱看端午节

清林情报分析师

数据分析 数据可视化 端午节 数据分析师 知识图谱

Git 如何从特定的提交中创建一个新的分支

HoneyMoose

数据库每日一题---第1天:超过经理收入的员工

知心宝贝

数据库 算法 前端 后端 6月月更

Web Service进阶(二)如何用Apache TCPMon来截获SOAP消息

No Silver Bullet

6月月更 Apache TCPMon

架构实战营 - 模块七 - 作业

michael

#架构实战营 「架构实战营」

React Native 资源更新增量包的优化实践

Shopee技术团队

前端 React Native

Flink 源码:广播流状态源码解析

JasonLee实时计算

flink 源码

linux之yum下载rpm包离线安装

入门小站

Linux

vue-cli3项目目录结构介绍

小恺

6月月更

JS原型、原型链深入理解

源字节1号

前端开发 后端开发

5款 React 实时消息提示通知(Message/Notification)组件推荐与测评

蒋川

JavaScript 低代码 React 组件 消息提示通知

日本动画发展史简述——动画及日本动画起源

头顶胖次

6月月更

【Python共建】Python 列表推导式

梦想橡皮擦

6月月更

聊聊 Sharding-Jdbc 使用原理之分库分表下的分页方案

Nick

MySQL 分库分表 中间件 ShardingJDBC 6月月更

每日一题 | LeetCode 454 四数相加Ⅱ

武师叔

哈希表 Leet Code 6月月更

Fabric.js 缩放画布 🍬

德育处主任

canvas Fabric.js 6月月更

超越持续集成——持续部署_研发效能_Chris Sims_InfoQ精选文章