NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Heroku 的自动化持续部署之旅

  • 2019-12-07
  • 本文字数:1623 字

    阅读完需:约 5 分钟

Heroku 的自动化持续部署之旅

Heroku 工程团队记录了他们利用 Heroku 运行时Heroku Runtime)从手动部署到自动化持续部署的过程,Heroku 运行时是他们的应用程序托管环境。他们使用 Heroku 原语和自定义部署工具实现了这一目标。


Heroku 运行时团队可以构建和运维单一(私有空间,Private Space/PS)及多租户(公共运行时,Common Runtime/CR)环境。这包括容器编排、路由和日志记录。在此之前,该团队需要遵循的部署流程是由多个手动步骤组成的,包括主要值班工程师的签字、预留足够的缓冲区以监控部署后的情况以及对多个仪表板的监控。如果还需要部署其他区域和服务,则必须等到该次部署全部稳定之后,这也会带来相应的开销。由于当时团队规模较小,并且服务和区域仅限于美国和欧盟 2 种生产环境,所以这种方法是可行的。随着团队成员数量的增加以及将 CR 重新构建成一个面向多服务的长期项目,团队必须进行自动化实践并构建一个可以自动化部署工具。


InfoQ 联系了 Heroku 的主要技术人员 Bernerd Schaefer, 以进一步了解他们所面临的挑战以及相应解决方案的细节。


之前的流程依赖于团队的规模和对预期效果的详细手动计划。Direwolf 是一个测试平台,它可以上报跨区域的状态。当团队成员增加到 30 多人时,这个过程会变得很繁琐。再加上 CR 管理架构改造(将 CR 的单体 Ruby 应用程序分割成多服务)的挑战。团队决定推行完全自动化。该应用程序在两个生产环境中运行,手动步骤会导致更高的协调成本。


团队的解决方案是使用现有的 Heroku 原语和一个名为 cedar-service-deployer 的自定义工具。每个服务都会成为管道(Pipeline)的一部分,并且共享服务作为长期项目的一部分部署在跨多个预生产(staging)和生产(prod)环境中。cedar-service-deployer tools 工具是使用 Go 编写的,它可以扫描管道以发现不同阶段之间的差异。如果扫描到任何差异,它将运行检查程序以查看是否可以将代码提交到下一个阶段。这些检查包括发布时间、足够的集成测试时间、正在运行的事件(incident)、正在触发的告警、只能从主干分支进行升级等。Schaefer 说到,添加新检查需要变更代码,因为该列表是固定的。同时,他还解释到,团队可以配置自己的告警:


团队可以配置单个服务所需要检查的服务项,特别是要监控哪些告警以确定服务的健康状况。例如,某个服务可能有一个告警是用来检查服务是否启动的,一个是用来检查其 HTTP 成功率是否超过 99%,向部署程序中添加这些服务的团队可以在 JSON 文件中配置告警,以便对部署程序服务在发布期间进行监控。


监控和告警是部署的重要组成部分,因为它们可以指出可能存在的问题。Heroku 使用 Librato 收集度量指标和告警。Schaefer 说,还有一些其他的系统也可以进行监控,但是到目前为止,部署程序所控制的所有服务都是使用的 Librato。


Schaefer 进一步阐述了他们的监控理念:


我们一直在推动的一件事情是将监控引入到我们的标准服务工具包中,以便每个服务在默认情况下都具有有用的工具。当然,随着服务投入生产并进入成熟阶段,它们可能需要一些定制的工具。但是我们的目标是,服务开发人员可以专注于他们服务所提供的功能,并成为对应功能的专家,而无需成为度量指标收集、跟踪或其他我们想知道的系统运行情况的专家。


尽管在大多数情况下,部署程序可以自动决定是否推送,但是我们仍提供了手动覆盖的规则。Schaefer 解释道:


系统总是允许运维人员使用现有的手动工具来进行发布。我们可能会在事件期间执行此操作,以便将关键的热修复程序补丁发布到受影响的环境中。在一个事件中,很少还会推送其他的变更,因为如果有某项事件正在进行中的话,我们会尽力减少其他对生产环境的变更,而且人们很少会急于将产品发布上去,但是如果需要的话,这种能力也是存在的。


部署程序的无状态特性意味着它的工作方式可以尝试在管道中任意两个阶段之间进行升级,而不是绑定到单个“发布”版本上。这使得多个提交点可以同时出现在部署管道的不同阶段。


原文链接:


Heroku’s Journey to Automated Continuous Deployment


2019-12-07 08:003893

评论

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

CutLER:一种用于无监督目标检测和实例分割的方法

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜

vivo 容器集群监控系统优化之道

vivo互联网技术

可观测性 Prometheus 云原生监控 Victoriametrics

高级插图和绘图 VectorStyler for Mac激活包

mac大玩家j

Mac Mac 软件 绘图工具 绘画软件

搜文本搜位置搜图片,1小时玩转Elasticsearch

阿里云大数据AI技术

WPS Office AI实战总结,智能化办公时代已来

MavenTalker

Microsoft 365 Copilot WPSAI

敏捷采购:如何在采购中应用敏捷方法

ShineScrum捷行

敏捷 敏捷采购

软件测试 | web跟踪元素属性

测吧(北京)科技有限公司

测试

[BitSail] Connector开发详解系列三:SourceReader

字节跳动数据平台

大数据 数据治理 数据研发 企业号 8 月 PK 榜

直播平台开发协议分析篇(一):会话初始化协议SIP

山东布谷科技

软件开发 SIP 源码搭建 直播平台开发 会话初始化协议

零信任体系化能力建设(2):设备风险与安全监控

权说安全

Beyond Compare 4 for Mac(文件对比工具) 4.4.6(27483)中文版

mac

Beyond Compare 4 苹果mac Windows软件下载 文件比较对比工具

21. 面向对象及特性

茶桁

Python 面向对象

百度王海峰披露飞桨生态最新成果 开发者数量已达800万

飞桨PaddlePaddle

人工智能 百度飞桨 WAVE SUMMIT

软件测试 | 查看隐藏表单域

测吧(北京)科技有限公司

测试

从0开始学Java——抛出和声明异常的代码实现

java易二三

Java 程序员 计算机 科技

Spring Cloud OpenFeign - 远程调用

java易二三

Java spring 程序员 计算机 科技

软件测试 | 使用以URL方式编码的数据

测吧(北京)科技有限公司

测试

LVS专访阿里云席明贤,从视频云2.0到“数能生智”的超长畅谈

阿里云视频云

云计算 阿里云 视频云

零代码搭建一个微信小程序

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 8 月 PK 榜

文心一言最新重磅发布!

飞桨PaddlePaddle

人工智能 百度飞桨 文心大模型 WAVE SUMMIT

软件测试 | 使用TamperData观察实时的响应头

测吧(北京)科技有限公司

测试

分布式可视化 DAG 任务调度系统 Taier 的整体流程分析

袋鼠云数栈

大数据 开源 Taier

7个小技巧让你运行C4D不卡!

Finovy Cloud

学习 #技术干货# 建模 技巧分享 4CD

Seamless Roaming with IPQ6010 and IPQ6018: Elevating Industrial-Grade WiFi6 Solutions

wallyslilly

IPQ6010 ipq6018 IPQ6000

mac端好用的Java开发分析 JProfiler 13 激活中文版附密钥

胖墩儿不胖y

Mac Mac 软件 Java开发分析工具 Java分析

软件测试 | 使用WebScarab观察实时的POST数据

测吧(北京)科技有限公司

测试

软件测试 | 修改特定的元素属性

测吧(北京)科技有限公司

数跨新阶,原生新纪 | 2023 数字化转型发展大会蓄力启航

信通院IOMM数字化转型团队

数字化转型 大会 IOMM 数字化转型峰会

软件测试 | 计算散列值

测吧(北京)科技有限公司

测试

【直播合集】HDC.Together 2023 精彩回顾!收藏勿错过~

HarmonyOS开发者

HarmonyOS

Heroku 的自动化持续部署之旅_软件工程_Hrishikesh Barua_InfoQ精选文章