运维数据反馈助力软件开发
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[大型组织流程优化]
运维数据反馈在软件开发中具有不可忽视的重要性。通过建立完善的反馈流程、选择合适的环境与工具、合理利用不同阶段的反馈,能够显著提升软件的质量和用户体验。同时,持续探索和解决未来面临的问题,将进一步完善运维数据反馈机制,推动软件开发行业的发展。
超级会员免费看
631

被折叠的 条评论
为什么被折叠?



