【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

持续部署:说起来容易做起来难

  • 2011-05-15
  • 本文字数:1177 字

    阅读完需:约 4 分钟

持续部署通常被看做是一种敏捷或精益技术,这项技术要求把编写好的所有应用程序代码直接部署到产品线上。这看上去好处很多,节省了开发各个环节的时间,还减少了缺陷修复和新功能投放到市场的时间。然而,真能像说的那么容易吗?

Jim Bird 指出,人们在谈到持续部署时,说得最多的是一些琐碎的修改,例如小的调整、表面改动或小缺陷的修复。任何大于这些的修改都需要遵循相应细致、严谨的方法。

Jim 认为,

数据库模式(Schema)不能一直在变。较大的功能不能、也不应该一直改变,即使是在进行摸黑启动(dark launching)。以 Etsy 的做法为例(Etsy 是典型的应用持续部署的公司),它不会持续部署一些较大的公共模块。和任何聪明的公司一样,他们会与运维、客服及产品管理部门一起花时间做规划、设计、原型、测试、评审,并最终部署。

Jo Liss 提出,持续部署的真正挑战是回滚修改的代价。Jo 认为,限制持续集成的频率的因素更多是技术上的,但对于回滚修改成本巨大的持续部署而言,它的限制则完全不同。

但是一旦部署到生产环境,就会影响用户和实际数据,回滚将很昂贵,因为你可能必须: - 将数据库回滚到之前的模式和规范。

  • 考虑当前正在使用你站点的用户所受的影响,以及如何在他们的眼皮子底下修改应用程序(可能会导致链接中断,Ajax 请求失败)。
  • 如果出了问题(回滚不是你想进行就能进行的),你甚至可能不得不发邮件知会所有受影响的用户,或者处理各种支持请求。

同样地,Eric Ries 认为持续部署的最大挑战是必须时刻准备交付。

一方面,这是对客户响应的终极目标。另一方面,这简直是不可能完成的任务。阶段性交付给我们编织了一张(有些虚幻的)安全网。和其他人(测试团队)分担测试责任也让人神清气爽。

那么,一个团队如何确保他们认识到持续部署的价值呢?

Eric建议如下:

  • 不要强推功能,而是根据客户反馈信号做部署
  • 分批小规模修改代码
  • 相对于单元测试,更倾向于尽可能多的进行功能测试
  • 在系统和应用程序层都实现警告(alerts)和监控功能
  • 只容忍意外错误发生一次,并立即修复

Jo 认为大家应该减少提交代码到服务器的次数。他指出,正常的部署延迟是在完成代码后的 5 小时到 2 天之间。

那么如果你能静下心来,而不是向诱惑屈服,刚愎自用地立即部署,那么你可能可以避免大部分令人追悔莫及的修改,这些错误的修改大概占总数的 5%,但真的一定是你不希望提交到产品服务器的。而你等待的这些时间,可能只是错过了为数不多的早期的用户反馈。

这一切并不是说持续部署不可能实现。很多公司,比如 Etsy Heyo IMVU Atlassian 都在做持续部署,而且很可能做得很不错。

Jim 总结了一下,

从持续部署确实可以学到很多,像如何使交付及部署更流畅、更简单,如何降低风险,把工作分解得更小块,然后再把它们串联起来,设定节点监控、度量。但它不是或起码不应该是“开发者的圣杯”。

查看英文原文: Continuous Deployment: Easier Said Than Done

2011-05-15 09:082706
用户头像

发布了 114 篇内容, 共 31.4 次阅读, 收获喜欢 2 次。

关注

评论

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

Sprint产品待办列表的优先级要怎么排?

敏捷开发

项目管理 敏捷开发

详解webpack构建优化

Geek_02d948

webpack

源码级深度理解 Java SPI

vivo互联网技术

Java Spring Boot dubbo spi

U-App移动统计算力升级!支持跨应用、多事件的打包计算

【C语言】continue 关键字

謓泽

理解Nodejs中的进程间通信

coder2028

node.js

可观测实践|如何利用 Prometheus 精细化观测云产品

阿里巴巴云原生

阿里云 云原生 Prometheus

细说nodejs的path模块

coder2028

node.js

用 nodejs 搭建脚手架

coder2028

node.js

一个更快的YOLOv5问世,附送全面中文解析教程

OneFlow

人工智能 深度学习 训练数据

解决前端恶意代码侵入的一些思考

FinFish

小程序 安全 安全架构 小程序容器 前端安全

低代码平台适用于大中型企业吗?

力软低代码开发平台

K8s 有损发布问题探究

阿里巴巴云原生

阿里云 Kubernetes 云原生

细说Js中的this

hellocoder2029

JavaScript

细说JavaScript闭包

hellocoder2029

JavaScript

Web3开发者指南,比较好用的 NFT API 服务推荐!

NFT Research

区块链 数据分析 NFT

Webpack中的高级特性

Geek_02d948

webpack

从软件工程角度看测试

老张

软件工程 质量保障

阿里云张建锋:核心云产品全面 Serverless 化

阿里巴巴云原生

阿里云 Serverless 云原生

Koordinator 1.0 正式发布:业界首个生产可用、面向规模场景的开源混部系统

阿里巴巴云原生

阿里云 云原生 Koordinator

AntDB数据库与DSG强强联手,助力通信行业核心系统国产化

亚信AntDB数据库

aisware antdb AntDB数据库

手写vue-router核心原理

hellocoder2029

JavaScript

阿里P8面试官总结的《2022java技术总结》,解决90%以上的技术面

程序知音

Java 程序员 后端技术 Java面试题 Java面试八股文

分层架构最容易范的最昂贵错误

风铃架构日知录

分层架构 #java 服务层 封装业务逻辑

什么是代理服务器?它有哪些分类?

wljslmz

服务器 网络技术 11月月更 代理服务器

Wallys Routerboard DR40x9 IPQ4019 IPQ4029 ,802.11AC 2x2 2.4G&5G Support HTTPS Support all the modules of Quectel

Cindy-wallys

从oracle到mysql模型转换的自动化实现

鲸品堂

语言 & 开发

Webpack中的plugin插件机制

Geek_02d948

webpack

Wallys|industrial wifi6 router/ Qualcomm IPQ8072A 4T4R support QCN9074/QCN6024 MOUDLE OPENWRT 802.11AX 10GE port 10G SFP

Cindy-wallys

ABCNet:端到端的可训练框架的原理应用及优势对比

合合技术团队

人工智能 模型 端口 图片识别 文本识别

分布式任务批处理技术选型与实践

苏格拉格拉

分布式 批处理 分布式任务 数据分片 任务调度

持续部署:说起来容易做起来难_研发效能_Vikas Hazrati_InfoQ精选文章