OpsDev--软件设计从Ops角度出发以规避风险

简介:

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的转变。
文章转载自 开源中国社区 [http://www.oschina.net]

相关文章
|
8月前
|
机器学习/深度学习 API
有效的思考:模型思考效率评测
随着大语言模型的迅速发展,模型的推理能力得到了显著提升。特别是长推理模型(Long Reasoning Models),如OpenAI的o1、DeepSeek-R1、QwQ-32B和Kimi K1.5等,因其展现出类似人类的深度思考能力而备受关注。这些模型通过长时间推理(Inference-Time Scaling),能够在解码阶段不断思考并尝试新的思路来得到正确的答案。
351 0
|
关系型数据库 MySQL 数据安全/隐私保护
在 Docker 中部署 Mysql 并挂载配置文件
在 Docker 中部署 Mysql 并挂载配置文件
|
存储 SQL 缓存
SQL Server存储过程的优缺点
【10月更文挑战第22天】存储过程具有代码复用性高、性能优化、增强数据安全性、提高可维护性和减少网络流量等优点,但也存在调试困难、移植性差、增加数据库服务器负载和版本控制复杂等缺点。
472 1
|
XML 缓存 搜索推荐
RSS 解析:全球内容分发的利器及使用技巧
RSS(Really Simple Syndication)是一种 XML 格式,用于网站内容的聚合和分发,让用户能快速浏览和跟踪更新。RSS 文档结构包括 `<channel>` 和 `<item>` 元素,允许内容创作者分享标题、链接和描述。通过 RSS,用户可以定制新闻源,过滤不相关信息,提高效率。RSS 支持不同版本,如 RSS 0.91 和 RSS 2.0,其中 RSS 2.0 语法简单且广泛使用。RSS 提高网站流量,适用于新闻、博客、日历等频繁更新的站点。RSS 的历史始于 1997 年,至今仍无官方标准,但已成为内容共享的重要工具。
1002 0
|
缓存 网络协议 安全
秋招面试题总结:1000道常问的后端面试题(上)
秋招面试题总结:1000道常问的后端面试题
|
机器学习/深度学习 算法
机器学习算法面试题汇总(2022.2.10更新)
机器学习算法面试题汇总(2022.2.10更新)
501 0
机器学习算法面试题汇总(2022.2.10更新)
|
JavaScript 前端开发 API
Day.js轻量级 JavaScript 时间日期处理库可替代Moment.js
Day.js轻量级 JavaScript 时间日期处理库可替代Moment.js
343 0
|
新零售 机器学习/深度学习 达摩院
智能搜索推荐一体化营收增长解决方案
图数据库GDB提供智能搜索推荐一站式服务,基于达摩院的智能搜索推荐算法和知识图谱技术,助力企业快速过渡冷启动过程,面向业务场景定制化方案,以提升核心业务指标,实现业务营收增长。
885 0
智能搜索推荐一体化营收增长解决方案
|
域名解析 网络协议 安全
流量劫持与防范
流量劫持现象在国内十分猖獗,6家国内顶级互联网公司呼吁有关运营商严格打击流量劫持问题。流量劫持分为域名劫持和内容篡改两类,通过HTTPDNS产品和内容HTTPS加密可以基本解决这两类问题。
606 0
|
自动驾驶
广州首批自动驾驶路测牌照正式发放 文远知行、广汽、AutoX、Pony.ai均上榜
自动驾驶的赛道上,不仅有各大企业的群雄角逐,试点示范城市之间也在暗自较量。
1402 0