Instagram最近发表了一篇关于他们的持续部署(CD)管道的文章,持续部署管道可以让他们更快的将代码推送到生产环境,并且轻松地识别糟糕的提交和始终保持发布可用。在一段时间内以迭代的方式放在一起,其背后主要包括高品质的测试套件,快速识别糟糕的提交,将每一个阶段从利益相关者或得的改进意见的可视化以及工作回滚计划。

在拥有该系统之前,Instagram制定的系统的部署过程是手动步骤和脚本一个大杂烩。首先部署在一台机器上完成第一次检查。一个基本的版本跟踪应用程序,称为Sauron,由一个用户界面和数据库已经到位用于观看前一次发布的结果。首次发布是基于Fabric的脚本,以及基于SSH协议的自动化工具。

Facebook在2013年收购Instagram,然后开始把基础组件从AWS迁移到Facebook自己的数据中心。根据迈克尔Gorven所说,Instagram拥有数千台机器,但是他们每天可以管理部署代码30 -50次。基础设施和未来增长的大规模不会影响代码的修改部署速度。

Instagram给该系统添加了更多的智能特性,让系统能够决定哪些commit可以推送到生产环境,并且还集成了Jenkins去基于测试结果分类提交是好的还是糟糕的。这些结果都被推送到了Sauron应用程序。

数据库迁移 - 包括架构和服务器 - 是大多数CD管道面临的主要挑战。解决方案通常是特定于产品和基础设施。 Instagram也是如此- 他们有自己的系统。对于数据库迁移到新的位置,其基本原理是复制单个分片(虽然它仍然活着),并重复复制,直到增量很小。然后,它使用一个特性开关关掉原来的分片,最后只剩下一个副本,并使用该特性开关启用新位置的分片。

Schema的变动是通过特性开关来完成的。

改进糟糕提交的检测和保持发布执行速度是Instagram发布工程团队的接下去关注的重点领域。

Instagram的持续部署技术的更多相关文章

  1. CI Weekly #7 | Instgram/Quora 等大公司如何做持续部署?

    终于,你们期待的 flow.ci iOS 项目持续集成 开始公测了.在这几个工作日, flow.ci 做了些许「功能优化」与「问题修复」,性能和体验都在持续优化中.比如: iOS 快速入门文档更新: ...

  2. CI Weekly #5 | 微服务架构下的持续部署与交付

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  3. 用 flow.ci 让 Hexo 持续部署

    编者按:感谢 @小小小杜 投稿,原文链接Juglans' Blog.如果你也想体验 flow.ci 的自动化持续部署,来 http://flow.ci 首页提交申请,邀请码随后会发送到邮箱:) flo ...

  4. Fastlane为iOS带来持续部署

    Fastlane是一组工具套件,旨在实现iOS应用发布流程的自动化,并且提供一个运行良好的持续部署流程,只需要运行一个简单的命令就可以触发这个流程. Fastlane是一个ruby脚本集合,其中囊括了 ...

  5. CI Weekly #11 | 微服务场景下的自动化测试与持续部署

    又一周过去了,最近我们的工程师正在搞一个"大事情" --「[flow.ci](http://flow.ci/?utm_source=bokeyuan&utm_medium= ...

  6. fir.im 持续集成技术实践

    互联网时代,人人都在追求产品的快速响应.快速迭代和快速验证.不论是创业团队还是大中型企业,都在探索属于自己的敏捷开发.持续交付之道.fir.im 团队也在全面实施敏捷,并推出新持续集成服务 - flo ...

  7. 华为软件开发云对比Jenkins-JavaWeb项目持续部署方式

    一.前言:Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成和持续部署变成可能. 本文 ...

  8. Docker环境的持续部署优化实践

    最近两周优化了我们持续部署的程序,收效显著,记录下来分享给大家 背景介绍 那年公司快速成长,频繁上线新项目,每上线一个项目,就需要新申请一批机器,初始化,部署依赖的服务环境,一个脚本行天下 那年项目发 ...

  9. JAVA项目如何通过Docker实现Jenkins持续部署

    原文地址:http://blog.51cto.com/dadonggg/1957691 本篇实操性的案例讲解——JAVA项目如何通过Docker实现持续部署(只需简单四步), 即:开发通过git pu ...

随机推荐

  1. backbone模型层浅析

    Model层有两个类: Model, Collection 1.Model 不翻文档,我们用代码说话. 首先分析下类. var myM = Backbone.Model.extend({})//构造一 ...

  2. Zebra_Form Packages: Zebra_Form Controls Generic XSS_Clean Classes: Zebra_Form_Control Class: Zebra_Form_Control

    http://stefangabos.ro/wp-content/docs/Zebra_Form/Generic/Zebra_Form_Control.html#methodset_rule

  3. win7下配置Apache本地虚拟主机

    我们有时候从网上下载下来的php源码很多都是应用在网站根目录下的,而我们又想在本地先测试一遍确定没有问题了再上传空间,但一换到子目录下的时候因为路径问题,使得许多图片.内容都无法显示. 这个时候我们就 ...

  4. phpstorm+Xdebug断点调试PHP

    运行环境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdeb ...

  5. 文件上传(js, C#)

    ajaxFileUpload http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html

  6. SQL合并多行查询到一行

    示例表 tb 数据如下 id value—————1 aa1 bb2 aaa2 bbb2 ccc 第一种 SELECT id, [val]=( SELECT [value] +',' FROM tb ...

  7. ASP.NET MVC Dropdownlist

    本文介绍如何在网页里显示DropDownList. Step 1: 在Control里面添加方法 public ActionResult ShowDropDownList() { return Vie ...

  8. mongoengine

    http://docs.mongodb.org/ecosystem/drivers/python/ http://www.cnblogs.com/holbrook/archive/2012/03/11 ...

  9. 安装courier-authlib找不到mysqlclient.so文件

    使用configure配置的时候使用 --with-authmysql指明libmysqlclient.so的存放位置即可

  10. ZPF MYSQL数据库链接层

    2015年3月31日 18:27:34 最后编辑: 2016年4月17日 00:22:00 星期日 读写分离: 根据最终的sql语句来判断是读还是写  (随后会考察并加上一致性哈希) 链式调用: 参看 ...