flink-china / flink-forward-asia-hackathon-2021

本 GitHub 项目是 Flink Forward Asia Hackathon (2021) 的投票专用项目。
121 stars 19 forks source link

[参赛项目] 嵌入式软件CI/CD大数据分析与状态监测Flink+Pravega #3

Open yuchuzhi opened 2 years ago

yuchuzhi commented 2 years ago

项目简述

  分析和监测嵌入式软件Continues Integration(CI)/Continues Delivery(CD)编译结果

背景

  随着物联网, 智能驾驶,机器学习,5G等技术的快速发展,对嵌入式系统尤其是软件的要求越来越高,一方面软件要足够灵活,能够根据实际需求进行定制和剪裁,以满足功耗和存储的限制;另一方面对软件的准确性、安全性以及稳定性有着更严苛的标准。

  实际项目中,我们嵌入式SDK(Software Development Kit)面临的是需要适配的硬件种类越来越多,而且复杂程度越来越高,从ARM Cortex-M0/M4/M7/CM33,到ARM-Cortex A 系列,以及包含DSC/DSP等各种架构,硬件类型多达60种。除此之外一个完整SDK不仅要提供基础的BSP和driver层的支持,也需要对三方middleware的集成,以方便客户进行二次开发。比如支持主流的RTOS,图形图像处理,机器学习,音频处理,电机控制等等热门领域。

  这么一个复杂的SDK,对软件质量的把控带来了巨大挑战。测试点组合多,测试分支复杂,测试项繁多,测试结果和日志数据巨大,往往需要投入不小人力和时间成本去人工分析,以至于测试结果难以汇总,软件整体质量很难把控,尤其是难以得到真实数据的支撑,也很难从历史数据上得到有用的信息,这样的CI/CD已经严重拖累了SDK的开发、迭代效。

  基于以上的原因,我们需要一个强大而稳定的系统监测SDK CI的状态和分析结果。

目标

  自动化分析CI/CD数量巨大的测试日志,从而有效的监控软件质量和状态。

实施方案

  CI生成的流式日志数据,属于流式数据,经过filebeat + logstash 对数据进行简单的清理,源源不断的写入Pravega stream。Pravega 支持数据的持久化,并且提供弹性的无限扩展能力。因此很适合日志数据处理,不仅免去了额外的存储需求,而且Pravega也能对数据进行缓冲, 达到削峰填谷的作用。下图是本项目的架构: image

  数据处理部分,采用了基于朴素贝叶斯算法的模型。朴素贝叶斯算法简单有效,常用于文字的分类,例如垃圾邮件检测等。在我们的模型中,选用关键词和短语作为特征值,经过大量历史日志训练,基本上可以达到95%以上的准确率。 image

  在Flink job部分,以UDF的方式嵌入上述模型,Pravega Stream充当数据源。Pravega 的特性决定了event 不会被遗漏,重复,或者乱序处理。如果配置得当,Flink Job 还可以自动从故障中断的地方恢复。 image

  经过处理的数据的写入业务数据库MySQL存储,,最后通过Grafana 完美的呈现一个动态、实时的可视化报表。 image

  该项目可生成实时的可视化状态监控报表,支持查看任意历史时间点的状态。报表中提供了整体软件测试的结果汇总,各编译器编译速度的分析,硬件平台的测试进度,以及具体测试失败原因的预测和分类。

成员介绍

袁彬(Bill) :资深嵌入式软件测试工程师,在欧美企业从事嵌入式软件开发14年,目前担任软件测试经理,熟悉嵌入式ARM架构,精通Python,Ruby,C,C#,Java等编程语言。对嵌入式软件CI/CD和自动化测试有透彻的理解,特别是多任务大数据的自动化测试方案上设计和实施有诸多建树。

郭辉(Haley):高级嵌入式软件测试工程师,在欧美企业从事嵌入式软件开发5年,目前任自动化测试框架架构师,精通Python,Ruby,C,C#,Java,Java Script等编程语言。对嵌入式软件CI/CD自动化测试有深入的研究,特别是在分布式并行化的自动化测试方案上设计和实施有诸多建树。

余楚志(Fly): 资深嵌入式软件测试工程师,在欧美企业从事嵌入式软件开发7年,拥有丰富的CI/CD自动化测试项目经验。精通Python,Ruby,Perl,C,C#,Java等编程语言,熟练设计自动化测试案例和优化自动化框架。