23、运维数据反馈助力软件开发

运维数据反馈助力软件开发

1 反馈流程

1.1 部署

反馈流程始于软件部署,部署方式多样,涵盖自动化的持续交付/部署流程,以及需更复杂(常为手动)流程才能推出的软件单元发布。前者在公司自身组织边界内(如公共/私有云或数据中心)进行,同一组织(且常为同一团队)的产品开发人员与DevOps/运维工程师负责软件的可操作性;后者则通过顾问/解决方案架构师以本地部署软件的形式交付(有时会交付到多个地理位置分散的客户端站点)。

1.2 反馈治理

在从本地部署到完全云部署的各种级别中,都需控制哪些运维反馈可供哪些利益相关者使用。这种治理应明确提供关于数据处理的高级规则,无论是在组织内部还是跨组织层面。这些规则由DevOps/运维工程师通过过滤和控制运行时数据来实施和执行,其结果是确保了数据隐私,且产品开发人员只能访问无违规或不合规风险的数据。

1.3 产品开发中的决策制定

运维数据通过治理后,会成为产品开发中利益相关者的宝贵反馈。例如,产品/项目经理可利用运行时反馈更好地规划功能并优化项目计划;软件开发人员和DevOps工程师能全面了解用户对软件的使用体验(如性能指标、使用计数器),并调整程序和基础设施代码以提升整体体验。随后,通过运行时反馈做出更优决策,对软件进行更改并重新部署,反馈循环再次启动。

以下是反馈流程的mermaid流程图:

graph LR
    A[部署] --> B[反馈治理]
    B --> C[产品开发决策制定]
    C --> A

2 环境与工具

2.1 环境结构

为实现从运维到开发人员的高效快速反馈,需一个遵循上述反馈流程的相应环境。在运维端,应用程序会产生各种日志和指标,这些数据通过反馈控制机制进行过滤和预处理,例如允许外部客户定义最终存储在反馈数据存储中的日志和指标。反馈数据存储为向开发人员和其他利益相关者(如项目经理、产品所有者等)提供的综合接口奠定基础,但其中主要包含过滤后的原始数据。为使这些数据有用,需进行相应的处理和分析步骤,最终向利益相关者呈现可操作的信息,这些信息可通过多种方式交付,如仪表板、集成开发环境(IDE)中的上下文信息或电子邮件通知等。

2.2 工具选项

有多种工具可用于实现这样的环境,例如ELK栈(Elasticsearch + Logstash + Kibana)可提供技术基础:
- Logstash用于收集运行中应用程序的日志、事件和指标,还需额外的工具或自定义扩展来实现反馈控制中的过滤功能。
- Elasticsearch可作为反馈数据存储,它是一个分布式文档存储和搜索引擎,提供RESTful API和强大的查询DSL。
- Kibana可用于进一步的数据处理和分析,它与Elasticsearch直接集成,还可提供仪表板供利益相关者使用。

此外,fluentd可替代Logstash,它能与其他数据库解决方案(如MongoDB)集成,后者可替代Elasticsearch。最后,还可基于Hadoop基础设施上运行的MapReduce作业进行数据处理和分析。

以下是不同工具选项的对比表格:
| 工具 | 功能 | 替代方案 |
| — | — | — |
| Logstash | 收集日志、事件和指标 | fluentd |
| Elasticsearch | 反馈数据存储 | MongoDB |
| Kibana | 数据处理和分析,提供仪表板 | 可扩展或补充其他工具 |

3 反馈阶段

3.1 数据分类

运维数据大致可分为三类:
1. 系统指标(如CPU利用率、IOPS、内存消耗、进程信息)
2. 应用程序指标(如异常、日志/事件、使用情况)
3. 应用系统指标(如方法级响应时间、负载、垃圾回收指标)

3.2 不同阶段的反馈

以下是不同类型的指标/消息在软件开发生命周期各阶段的映射示例:
| 指标/消息 | 阶段 | 目的/利益相关者(示例) | 呈现方式 |
| — | — | — | — |
| 插桩指标、日志消息频率 | 开发中 | 明智的重构/软件开发人员 | IDE、仪表板 |
| 系统指标 | 持续集成后、金丝雀部署 | 非功能和性能测试/DevOps或性能工程师 | 报告、仪表板 |
| 应用(系统)指标 | 部署后、金丝雀部署 | 用户行为、生产中的集成测试/产品所有者、DevOps或性能工程师 | 警报、报告、仪表板 |

3.3 各阶段详细说明

开发中

将应用系统指标(响应时间和负载)集成到IDE中,可让开发人员了解其方法的运行时特性,并识别代码中的热点。此外,还可将异常和特定于应用程序的消息(日志)及其在运行时的分布进行映射,以显示生产中的异常和事件数量。

持续集成后

持续集成(CI)后,应用程序可请求获取可能需要较长时间的反馈,如性能测试。系统指标可作为测试方法的参数或比较性能结果的基线。

金丝雀部署

为降低生产环境中变更的风险,金丝雀发布仅将变更推送给部分用户。应用和系统指标对于检测与基线的偏差和其他异常情况至关重要,其主要目的是发现任何问题,并可能进行回滚或修复后继续推进。

部署后

与金丝雀部署类似,部署后阶段也会观察应用和系统指标,但不同利益相关者出于不同目的进行分析,且这些目的往往与更长期的目标相关。例如,运维工程师观察工作负载模式以调整自适应控制器(如负载均衡器),产品所有者调查使用情况以规划即将发布的版本并确定功能优先级。

以下是各阶段反馈的mermaid流程图:

graph LR
    A[开发中] --> B[持续集成后]
    B --> C[金丝雀部署]
    C --> D[部署后]

4 未来待探索问题

4.1 本地部署中的反馈程度

在本地部署场景中,反馈过程的可行性程度如何?存在哪些限制?在这种场景下是否能实现“DevOps”?

4.2 反馈交付

DevOps方法为从运维聚合数据以指导开发提供了众多机会,但开发人员无法消化所有可用信息,因此需定制反馈交付,考虑向谁呈现何种反馈、何时呈现以及以何种格式呈现。反馈交付高度依赖于开发人员手头的任务,未来基于运维数据的决策支持工具应据此设计。

4.3 DevOps中的快速周期

在软件开发阶段(如测试)中,如何确定用于检测异常的正常运行环境是一个挑战。此外,软件开发的技术环境需高度自动化和集成,以提供及时反馈,那么如何设计这样的环境呢?

4.4 大型组织中的流程繁杂问题

实施反馈过程的许多挑战可能源于组织规模。小型公司可实施临时反馈流程以满足反馈需求,而大型公司的跨组织环境则需更复杂的反馈流程。如何克服大型组织的官僚作风,在DevOps环境中实施有效的反馈过程?

综上所述,运维数据反馈在软件开发中起着至关重要的作用,通过合理的反馈流程、合适的环境与工具,以及针对不同阶段的有效反馈利用,能提升软件的质量和用户体验。同时,未来还需解决一系列相关问题,以进一步完善反馈机制。

5 相关工作分析

5.1 现有反馈来源

开发者可以从多个渠道获取反馈,如标准、组织流程描述等,这些反馈有助于支持应用的部署和设计,使应用能更好地适应运维流程,还能帮助确定额外的应用需求并进行验证,从而改进运维过程。

5.2 及时反馈的价值与挑战

许多研究都认可从运维数据向开发者提供及时反馈的重要价值,它能指导应用设计决策。例如,可以从IT运维中为现有应用推导性能模型,使架构师和开发者能针对不同设计目的(如性能和可靠性)优化应用,还能让开发者与运维人员交流性能指标,并确保在不同开发阶段应用都有一定的性能保障。

然而,开发者获取应用性能(或一般运维数据)的见解存在困难,原因包括复杂的系统架构(涉及地理、文化、组织和技术等多方面的差异)、系统生命周期阶段的持续迭代(导致性能模型不断变化)、缺乏对监控数据的访问权限以及开发者在性能工程方面的知识不足。

为应对这些挑战,提出了多种自动化方法来支持开发者的性能感知,如在开发阶段(特别是单元测试)收集测试的性能数据,并将其与性能回归根本原因分析集成到开发者的IDE中。

5.3 推荐系统的考量

软件工程中的推荐系统研究指出,提供信息虽有价值,但信息过多会严重影响生产力,开发者可能会面临信息过载问题。为缓解这一问题,设计良好的系统应及时向开发者提供建议,即当信息真正有用时才进行交付。

在向开发者交付运维反馈时,也需考虑理解性、透明度、可评估性、信任和干扰等五个关键因素,这些因素对选择反馈的呈现格式和类型有指导作用。例如,对于DevOps反馈,应提供来自运维环境的丰富信息,让用户在需要时能进一步探索。

以下是相关工作的总结表格:
| 相关工作 | 主要内容 | 面临挑战 | 应对方法 |
| — | — | — | — |
| 现有反馈来源 | 标准、组织流程描述等支持应用部署和设计 | 无 | 利用这些反馈确定需求和验证 |
| 及时反馈 | 指导应用设计决策,推导性能模型 | 复杂架构、模型变化、数据访问和知识不足 | 自动化方法,集成性能数据到IDE |
| 推荐系统 | 及时提供建议,避免信息过载 | 信息过多影响生产力 | 考虑五个关键因素选择反馈呈现 |

6 总结与展望

6.1 总结

DevOps体现了软件开发组织与运维工程师之间的跨职能协同,这种协同需建立合适的文化来促进不同角色间的沟通。通过对不同组织运维到开发反馈管道的研究,抽象并提出了更通用、高层次的反馈流程,同时探讨了支持该流程所需的技术环境,还分析了运维反馈在软件开发不同阶段的应用场景。

6.2 展望

未来,为实现有效的反馈过程和管道,需解决以下问题:
- 本地部署反馈程度 :明确本地部署场景中反馈流程的可行性、限制以及“DevOps”的实现可能性。
- 反馈交付定制 :根据开发者的任务定制反馈交付,包括反馈内容、时间和格式,设计基于运维数据的决策支持工具。
- 快速周期设计 :解决软件开发阶段检测异常时确定正常运行环境的挑战,设计高度自动化和集成的技术环境以提供及时反馈。
- 大型组织流程优化 :克服大型组织的官僚作风,实施有效的反馈过程。

以下是未来待解决问题的mermaid流程图:

graph LR
    A[本地部署反馈程度] --> B[反馈交付定制]
    B --> C[快速周期设计]
    C --> D[大型组织流程优化]

运维数据反馈在软件开发中具有不可忽视的重要性。通过建立完善的反馈流程、选择合适的环境与工具、合理利用不同阶段的反馈,能够显著提升软件的质量和用户体验。同时,持续探索和解决未来面临的问题,将进一步完善运维数据反馈机制,推动软件开发行业的发展。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值