Apache Devlake 代码库导览

本文作者:abeizn
GitHub 地址:https://github.com/abeizn

Apache DevLake 是什么?

研发数据散落在软件研发生命周期的不同阶段、不同工作流、不同 DevOps 工具中,且标准化程度低,导致效能数据难以留存、汇集并转化为有效洞见。为了解决这一痛点,Apache DevLake 应运而生。Apache DevLake 是一款开源的研发数据平台,它通过提供自动化、一站式的数据收集、分析以及可视化能力,帮助研发团队更好地理解开发过程,挖掘关键瓶颈与提效机会。

Apache DevLake架构概述

uLprGHI.png

<center>Apache DevLake 架构图</center>

  • Config UI: 人如其名,配置的可视化,其主要承载 Apache DevLake 的配置工作。通过 Config UI,用户可以建立数据源连接,并实现数据的收集范围,部分数据的转换规则,以及收集频率等任务。
  • Api Sever:Apache DevLake 的 Api 接口,是前端调用后端数据的通道。
  • Runner:Apache DevLake 运行的底层支撑机制。
  • Plugins:具体执行的插件业务,主要承载 Apache DevLake 的后端数据收集、扩展和转换的工作。除dbt插件外的插件产出 Apache DevLake 的预置数据,预置数据主要包括三层;
    • raw layer:负责储存最原始的 api response json。
    • tool layer:根据 raw layer 提取出此插件所需的数据。
    • domain layer:根据 tool layer 层抽象出共性的数据,这些数据会被使用在 Grafana 图表中,用于多种研发指标的展示。
  • RDBS: 关系型数据库。目前 Apache DavLake 支持 MySQL 和 PostgreSQL,后期还会继续支持更多的数据库。
  • Grafana Dashboards: 其主要承载 Apache DevLake 的前端展示工作。根据 Apache DevLake 收集的数据,通过 sql语句来生成团队需要的交付效率、质量、成本、能力等各种研发效能指标。

目录结构Tree

├── api
│   ├── blueprints
│   ├── docs
│   ├── domainlayer
│   ├── ping
│   ├── pipelines
│   ├── push
│   ├── shared
│   ├── task
│   └── version
├── config
├── config-ui
├── devops
│   └── lake-builder
├── e2e
├── errors
├── grafana
│   ├── _archive
│   ├── dashboards
│   ├── img
│   └── provisioning
│       ├── dashboards
│       └── datasources
├── img
├── logger
├── logs
├── migration
├── models
│   ├── common
│   ├── domainlayer
│   │   ├── code
│   │   ├── crossdomain
│   │   ├── devops
│   │   ├── didgen
│   │   ├── ticket
│   │   └── user
│   └── migrationscripts
│       └── archived
├── plugins
│   ├── ae
│   │   ├── api
│   │   ├── models
│   │   │   └── migrationscripts
│   │   │       └── archived
│   │   └── tasks
│   ├── core
│   ├── dbt
│   │   └── tasks
│   ├── feishu
│   │   ├── apimodels
│   │   ├── models
│   │   │   └── migrationscripts
│   │   │       └── archived
│   │   └── tasks
│   ├── gitextractor
│   │   ├── models
│   │   ├── parser
│   │   ├── store
│   │   └── tasks
│   ├── github
│   │   ├── api
│   │   ├── models
│   │   │   └── migrationscripts
│   │   │       └── archived
│   │   ├── tasks
│   │   └── utils
│   ├── gitlab
│   │   ├── api
│   │   ├── e2e
│   │   │   └── tables
│   │   ├── impl
│   │   ├── models
│   │   │   └── migrationscripts
│   │   │       └── archived
│   │   └── tasks
│   ├── helper
│   ├── jenkins
│   │   ├── api
│   │   ├── models
│   │   │   └── migrationscripts
│   │   │       └── archived
│   │   └── tasks
│   ├── jira
│   │   ├── api
│   │   ├── models
│   │   │   └── migrationscripts
│   │   │       └── archived
│   │   └── tasks
│   │       └── apiv2models
│   ├── refdiff
│   │   ├── tasks
│   │   └── utils
│   └── tapd
│       ├── api
│       ├── models
│       │   └── migrationscripts
│       │       └── archived
│       └── tasks
├── releases
│   ├── lake-v0.10.0
│   ├── lake-v0.10.0-beta1
│   ├── lake-v0.10.1
│   ├── lake-v0.7.0
│   ├── lake-v0.8.0
│   └── lake-v0.9.0
├── runner
├── scripts
├── services
├── test
│   ├── api
│   │   └── task
│   └── example
├── testhelper
├── utils
├── version
├── worker
├── Dockerfile
├── docker-compose.yml
├── docker-compose-temporal.yml
├── k8s-deploy.yaml
├── Makefile
└── .env.exemple
   

目录导览

  • 后端部分:
    • config:对.env 配置文件的读、写以及修改的操作。
    • logger:log 日志的 level、format 等设置。
    • errors:Error 的定义。
    • utils:工具包,它包含一些基础通用的函数。
    • runner:提供基础执行服务,包括数据库,cmd,pipelines,tasks以及加载编译后的插件等基础服务。
    • models:定义框架级别的实体。
      • common:基础 struct 定义。
      • domainlayer:领域层是来自不同工具数据的通用抽象。
        • ticket:Issue Tracking,即问题跟踪领域。
        • code:包括 Source Code 源代码关联领域。以及 Code Review 代码审查领域。
        • devops:CI/CD,即持续集成、持续交付和持续部署领域。
        • crossdomain:跨域实体,这些实体用于关联不同领域之间的实体,这是建立全方面分析的基础。
        • user:对用户的抽象领域,user 也属于 crossdomain 范畴。
      • migrationscripts:初始化并更新数据库。
    • plugins:
      • core:插件通用接口的定义以及管理。
      • helper:插件通用工具的集合,提供插件所需要的辅助类,如 api 收集,数据 ETL,时间处理等。
        • 网络请求 Api Client 工具。
        • 收集数据 Collector 辅助类,我们基于 api 相同的处理模式,统一了并发,限速以及重试等功能,最终实现了一套通用的框架,极大地减少了开发和维护成本。
        • 提取数据 Extractor 辅助类,同时也内建了批量处理机制。
        • 转换数据 Convertor 辅助类。
        • 数据库处理工具。
        • 时间处理工具。
        • 函数工具。
      • ae:分析引擎,用于导入 merico ae 分析引擎的数据。
      • feishu:收集飞书数据,目前主要是获取一段时间内组织内会议使用的 top 用户列表的数据。
      • github:收集 Github 数据并计算相关指标。(其他的大部分插件的目录结构和实现功能和 github 大同小异,这里以 github 为例来介绍)。
        • github.go:github 启动入口。
        • tasks:具体执行的4类任务。
          • *_collector.go:收集数据到 raw layer 层。
          • *_extractor.go:提取所需的数据到 tool layer 层。
          • *_convertor.go:转换所需的数据到 domain layer 层。
          • *_enricher.go:domain layer 层更进一步的数据计算转换。
        • models:定义 github 对应实体 entity。
        • api:api 接口。
        • utils:github 提取的一些基本通用函数。
      • gitextractor:git 数据提取工具,该插件可以从远端或本地 git 仓库提取 commit 和 reference 信息,并保存到数据库或 csv 文件。用来代替 github 插件收集commit 信息以减少 api 请求的数量,提高收集速度。
      • refdiff:在分析开发工作产生代码量时,经常需要知道两个版本之间的 diff。本插件基于数据库中存储的 commits 父子关系信息,提供了计算ref(branch/tag)之间相差 commits 列表的能力。
      • gitlab:收集 Gitlab 数据并计算相关指标。
      • jenkins:收集 jenkins 的 build 和 job 相关指标。
      • jira:收集 jira 数据并计算相关指标。
      • tapd:收集 tapd 数据并计算相关指标。
      • dbt:(data build tool)是一款流行的开源数据转换工具,能够通过SQL实现数据转化,将命令转化为表或者视图,提升数据分析师的工作效率。Apache DevLake 增加了 dbt 插件,用于数据定制的需要。
    • services:创建、管理 Apache DevLake 各种服务,包含 notifications、blueprints、pipelines、tasks、plugins 等。
    • api:使用 Gin 框架搭建的一个通用 Apache DevLake API 服务。
  • 前端部分:
    • congfig-ui:主要是 Apache DevLake 的插件配置信息的可视化。一些术语的解释
      • 常规模式
        • blueprints 的配置。
        • data connections 的配置。
        • transformation rules 的配置。
      • 高级模式:主要是通过 json 的方式来请求 api,可选择对应的插件,对应的 subtasks,以及插件所需要的其他信息。
    • Grafana:其主要承载 Apache DevLake 的前端展示工作。根据收集的数据,通过 sql 语句来生成团队需要的各种数据。目前 sql 主要用 domain layer 层的表来实现通用数据展示需求。
  • migration:数据库迁移工具。
    • migration:数据库迁移工具 migration 的具体实现。
    • models/migrationscripts:domian layer 层的数据库迁移脚本。
    • plugins/xxx/models/migrationscripts:插件的数据库迁移脚本。主要是rawtool开头的数据库的迁移。
  • 测试部分:
    • testhelper 和 plugins 下的*_test.go 文件:即单元测试,属于白盒测试范畴。针对目标对象自身的逻辑,执行路径的正确性进行测试,如果目标对象有依赖其它资源或对够用,采用注入或者 mock 等方式进行模拟,可以比较方便地制造一些难以复现的极端情况。
    • test:集成测试,灰盒测试范畴。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。
    • e2e: 端到端测试,属于黑盒测试范畴。相对于单元测试更注重于目标自身,e2e 更重视目标与系统其它部分互动的整体正确性,相对于单元测试着重逻辑测试,e2e 侧重于输出结果的正确性。
  • 编译,发布部分:
    • devops/lake-builder: mericodev/lake-builder 的 docker 构建。
    • Dockerfile:主要用于构建 devlake 镜像。
    • docker-compose.yml:是用于定义和运行多容器 Docker 应用程序的工具,用户可以使用YML文件来配置 Apache DevLake 所需要的服务组件。
    • docker-compose-temporal.yml:Temporal 是一个微服务编排平台,以分布式的模式来部署 Apache DevLake,目前处于试验阶段,仅供参考。
    • worker:Temporal 分布式部署形式中的 worker 实现,目前处于试验阶段,仅供参考。
    • k8s-deploy.yaml:Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。目前 Apache DevLake已支持在 k8s 集群上部署。
    • Makefile:是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。
    • releases:Apache DevLake 历史 release 版本的配置文件,包括 docker-compose.yml 和 env.example。
    • scripts:shell 脚本,包括编译 plugins 脚本。
  • 其他:
    • img:logo、社区微信二维码等图像信息。
    • version:实现版本显示的支持,在正式的镜像中会显示对应 release 的版本。
    • .env.exemple:配置文件实例,包括 DB URL, LOG 以及各插件的配置示例信息。

如何联系我们

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容