「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

OpsDev 将至

2016 年 9 月 13 日

DevOps 在 09 年被提出之后,热度一直不减。最近几年,随着容器化、微服务等概念的兴起,DevOps 又开始了大规模实践。但是,随着基础设施的增加,软件设计从 Ops 角度出发,可以更好的规避基础设施变更带来的风险。

从苹果公司开始

开发者、用户、投资者、分析师和竞争对手都渴望在 WWDC 上学习到苹果公司维持其领导地位的方式。虽然没有令人兴奋的新产品发布,但是贯穿其中很多话题的核心是:用户体验。

和其他手机厂商的发布会不同,苹果公司专注于客户的体验,而不是其产品的功能和特性。当竞争者在吹捧他们新品拥有的高像素相机和处理器核心数量的时候,苹果公司展示 iPhone 拍摄的优美、富有灵感的照片时,没有提及设备的任何技术细节。

现在,手机已经改变了我们的生活,日常的衣食住行都可以通过手机 app 来协助完成。但是苹果公司认为智能设备还能使我们的生活更加高效。不同于目前每个 app 提供独立的功能,苹果公司希望能够将这些服务整合到一起,对于用户来说,他们只需要使用苹果的服务,而无需打开多个 app。要实现这样的愿景,产品或者服务都需要有新的设计范式。任何期望通过接入苹果服务以对外提供个性化用户体验的公司,都应该考虑 OpsDev 而不是 DevOps。

进入 OpsDev 的世界

我们假设一家电器公司制造的智能冰箱,为用户提供以下体验:

当我坐在车里时,智能冰箱通过手机发出提醒:冰箱存货不足,该去买些食品啦。此时,手机自动生成并推荐了三个采购方案。第一个超市不需要绕路,但是没有我喜欢吃的冰淇淋;第二个超市比第一个远 10 分钟,但是有所有我喜欢吃的所有食物;第三个超市更远,需要多 15 分钟的路程,但是它除了有所有需要采购的东西,还提供额外优惠券。我点击了其中一个方案,车载导航开始自动规划行车路线,并显示在汽车多媒体系统中。

在不久的将来,很多公司会致力于提供集成的个性化用户体验,因此不同的数据源和服务必须被整合到一起。智能冰箱通过传感器判断冰箱内的存货,超市服务提供其库存和优惠信息,其他还有交通信息、地理位置信息等等。这些数据源由不同的提供商提供,并且保存在不同的数据中心。这些数据的访问,需要特定的授权方式、API 和数据处理流程。个性化服务的设计者,必须明确了解每个服务的规约,因为任务信息不能及时正确的获取,都会影响到用户体验。作为零售商,不会希望用户多花了 15 分钟时间过来,结果却因为需要购买的商品缺货,或者无法使用优惠券而造成损失。

由此可见,个性化软件服务的交付影响了现有的软件设计模式。DevOps 克服了传统瀑布流所不能提供的快速交付能力,通过诸如代码审查、编码规范、持续集成等方式解决软件开发遇到的挑战,并且让开发直接参与到了产品上线流程。而 OpsDev 考虑的方面却不同。由于个性化服务依赖于底层一系列基础设施,一旦我们知道了每个独立的数据源的依赖关系和可用性,首先需要设计出将各个数据源结合在一起的组件。因此,设计者必须从运维的角度来考虑,对每个服务的依赖程度、故障修复、容错等;同时,由于每个服务相对独立由于每个服务相互独立,个性化软件服务的升级频率受其依赖的服务升级频率影响,这也需要从运维的角度考虑向下(向上)兼容。

什么是 OpsDev?

OpsDev 是在开发行为开始前,就需要了解应用程序依赖的所有组件,并进行建模。此外,对基础设施稳定性的考量、环境建模、安全审计措施都是第一要务。其次,应用程序组件上线后的部署环境需要被建模。再次,将组件部署到生产环境的流程必须尽可能自动化。通过以上步骤,设计和研发团队可以在开发和测试阶段复制应用程序、环境模型和自动化部署流程。这样设计、研发和测试团队可以清楚的知道应用程序在生产环境的约束和参数。在传统的项目模式下,大量时间浪费在完成验证的应用程序部署到生产环境之后才发现的缺陷。

由于部署自动化在设计之初就被考虑到,应用程序可以随时被部署到开发、测试和生产环境。这种方式不仅可以通过自动化流程加快各个环节的部署速度,还可以减少因为手工部署导致的质量问题。部署程序应该可以聚合多个独立开发的模块。每个模块都可以由独立的开发团队进行开发,并且定制适合自己的持续基础、持续交付流程。发布程序需要预先知道每个模块之间的依赖关系,这样可以快速的聚合每个通过持续集成、持续交付的流程的模块,将它们整合之后部署到集成环境或者生产环境。

通过 OpsDev 方法,发布方式变得更加灵活。整个部署流程被设计的可以插入验证流程。一个典型的持续交付流程可以是:发布程序首先将待发布应用程序部署到集成环境(UAT 测试环境、预发布环境)上,然后触发发布前的自动化、手工验证、性能基线验证等一系列验证措施,整个过程通过之后,部署程序再将应用程序发布到生产环境,发布成功之后记录基线信息和本次变更的状态。

总结

对于物联网或者基于用户体验的移动 app 厂商来说,传统的软件开发流程无法适应它们的产品,因为它们都会对很多 SaaS 服务有依赖,且应用程序包含很多组件(物联网设备中的 app、移动设备中的 app、数据中心的后台服务、网页服务等)。像苹果这样鼓励开发者优先思考用户体验,并提供个性化服务的公司,可能会加速思考方式从 DevOps 向 OpsDev 的转变。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016 年 9 月 13 日 19:003382

评论

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

6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!

楼下小黑哥

Java IDEA

week6 学习总结

Geek_2e7dd7

没内鬼,来点干货!SQL优化和诊断

Kerwin

MySQL

数据加工

阡陌r

简述 CAP 原理

不在调上

week6 总结

不在调上

redis系列之——一致性hash算法

诸葛小猿

redis 一致性hash redis集群

Hello!GitHub 好用好玩值得收藏的开源项目集合~

Kerwin

开源

week6

Geek_2e7dd7

因为 Django ORM update,我今天差点「从删库到跑路」

AlwaysBeta

数据库 django 编程 程序员

关于如何判断一个list是否为空的思考

Leetao

Python Python基础知识 列表

【计算机网络】你需要知道的链路层知识

烫烫烫个喵啊

计算机网络 链路层 交换机

日记一则

progyoung

Mybatis执行流程浅析(附深度文章推荐&面试题集锦)

Kerwin

Java mybatis

有朋自远方来 不亦说乎,请多关照哈

InfoQ_353bc6b96230

当我们在谈架构时,我们谈的是什么?

Winfield

架构 企业架构 系统架构

Java8——方法引用

Java旅途

java8 方法引用

纯CSS实现自定义单选框和复选框

爱嘤嘤嘤斯坦

CSS Java 编程语言 标签

支付公司如何赚钱?支付网关如何设计?

诸葛小猿

微信 支付宝 聚合支付 第三方支付 支付网关

ServerlessDays China:无服务器的未来

WasmEdge

云计算 Serverless 容器 虚拟机 webassembly

架构师训练营 - 第六周 - 作业

韩挺

nginx在重定向时端口出错的问题

烫烫烫个喵啊

nginx

ARTS - Week 5

Khirye

ARTS 打卡计划

Elasticsearch从入门到放弃:再聊搜索

Jackey

elasticsearch

没内鬼,来点干货!volatile和synchronized

Kerwin

Java volatile synchronized

设计模式总篇:从为什么需要原则到实际落地(附知识图谱)

Kerwin

Java 设计模式

第六周作业

赵龙

架构师训练营 - 第六周 - 学习总结

韩挺

疫情年逆风翻盘

Kerwin

程序员

SpringBoot代码生成器

Kerwin

Java 开源

程序员的时间管理

Kerwin

程序员

OpsDev将至-InfoQ