TiFlash 项目开源历程

TiFlash2022-04-01 GMT+8 10:35 愚人节 正式官宣开源。

这是加入 PingCAP(aka 贵司)后首次尝试从提出规划到推进落地项目开源,算是值得纪念的事件 Celebrate open-source (#4551),在此存档相关历程。

前言

TiFlash 项目开源,既是秉承和发扬公司开源精神,也能提振客户信心,扩大影响力。但随之而来的问题也很明显:

  • 安全:不同于闭源项目,源码公布之后所有的实现细节均显露无疑,任何漏洞都将暴露在阳光下,安全问题是重中之重。以下几点需特别注意:
    • 法务:开源协议选择,CLA 流程(Contributor License Agreements),法律和舆论风险,申请相关专利,软件著作权登记等
    • 系统安全:清除牵涉 PingCAP 公司内部的逻辑,规范程序后门(Backdoor)
  • 质量保障:面向外部水平参差不齐的开发者,质量保障体系需保障其产出的下限。这方面主要靠自动化的 CI/CD 流程和规章制度,例如:
    • 代码质量管控:格式化检查,代码静态分析,UT 覆盖率保障,头文件依赖检查
    • 规章制度:PR Reviewer 人数,PR & ISSUE 模板,Release Notes 规范,源文件 License 检查,Proposal 流程,代码工程规范
  • 工程架构:TiFlash 作为 C++ 为主导的项目,为了对外部开发者更友好,需要优化工程架构,以简化上手难度。主要考虑以下几点:
    • 编译流程优化:工具链切换到 LLVM 并升级,外部预装库 & 依赖环境解耦,优化文档
    • 清理历史遗留无效代码
  • 开源社区:虽然贵司有诸多开源网红产品,但对于 TiFlash 这类偏专项领域的项目是否有必要做社区?如何吸引外部 Contributor?如何沟通?如何扩大影响力?就看后人的智慧了 Orz…

TiFlash 开源准备事项

进度记录

  • 2022-04-01
    • [DONE] TiFlash 正式开源
  • 2022-03-25
    • [DONE] 法务正式提交相关专利,法务方面问题都已解决
    • CD 流程优化代码缓存
    • [DONE] 开源试运行成功,待正式开源以及 CLA 启用
  • 2022-03-18
    • [DONE] Repo 改名 tiflash
    • [DONE] 重构 CI/CD 流程
    • [DONE] License
      • License 选择:Apache License 2.0
      • 源文件 License 补全
    • [DONE] 安全相关
      • 源代码清理内网链接及相关脚本
    • 目前总体上各事项均已完成,以下需等开源后完成:
      • 暂不考虑 DCO 同 TiDB 一致使用 CLA
      • CI 开启 required 检查:license-checker、CLA
  • 2022-03-11
    • [WIP] 重构 CD 流程
    • [WIP] Repo 改名
  • 2022-03-04
    • [DONE] PR reviewer 人数增加到 2
    • 改名 tiflash 尚待 v5.3.1 发版结束(预计 2022-03-03)
  • 2022-02-25
    • [DONE] 代码质量管控、UT质量(目前代码覆盖率为 49.19%)
    • [DONE] DCO 开启、编译流程优化并支持 cmake install
    • TODO:拆分和重构 CI 流程
  • 2022-02-18
    • [DONE] 外部预装库 & 依赖环境解耦
    • README 补全
    • [DONE] tiflash-proxy 侧开启 DCO、CLA
  • 2022-02-11
    • [DONE] zlib、openssl、curl 环境库依赖解耦
    • [DONE] 工具链升级 llvm
  • 2022-02-04
    • [DONE] tiflash-proxy 相关库解耦,自动化编译流程
    • [DONE] 补全 tiflash 架构设计文档
    • [DONE] grpc 相关环境库依赖解耦
    • CI 流程构建实现:静态分析机制、格式化检查机制、编译缓存机制,重构 UT 框架和流程,自动化 UT 覆盖率
    • Proposal 流程文档,代码工程规范文档,Release Notes 规范

代码质量管控

  • PR 级代码静态分析

    • CI 流程构建基于 clang-tidy 的静态分析机制
    • 统一静态分析检查项配置
    • 各个模块修复 clang-tidy 报错
    • 开启 PR 级代码静态分析检查(P1)
  • PR 级代码格式化检查

    • 统一格式并开启检查
  • ?头文件分析

    • include-what-you-use

UT(单元测试)质量

  • 重构 UT 框架和流程,CI 集成自动 UT 覆盖率
    • UT 框架重构 & CI 集成
  • 各个模块提升 UT 覆盖率至 70%+,目前 x%
    • Compute
    • Storage
    • Common
    • Others
  • 删除|隔离模块中无效代码
    • dbms.src.AggregateFunctions
    • dbms.src.Columns
    • dbms.src.Common
    • dbms.src.Client
    • dbms.src.Core
    • dbms.src.DataStreams
    • dbms.src.DataTypes
    • dbms.src.Debug
    • dbms.src.Dictionaries
    • dbms.src.Flash
    • dbms.src.Functions
    • dbms.src.IO
    • dbms.src.Interpreters
      • Interpreters/{Users,SecurityManager,Quota}
    • dbms.src.Parsers
    • dbms.src.Storages
      • dbms.src.Storages.MergeTree
    • libs
      • libs.libdaemon
      • libs.libcommon
      • libs.libpocoext
      • libs.libconsistent-hashing
    • dbms.tests

工程架构

  • 代码仓库迁移 & 依赖解耦(P1)
    • 重命名为 tiflash
  • Github Repo 规范(P1)
    • PR reviewer 人数增加到 2,开源前打开
  • Developer Certificate 检查
  • PR & Issue template
  • Bug closed checker
    • 流程待开源后开启
  • CLA: https://cla-assistant.io
    • 开源后开启 required 检查
  • 代码源文件 License 补全
    • 流程待开源后开启
  • 编译流程优化(P1)
    • 工具链升级
    • Clang 替换 GCC
    • 新增 llvm 编译环境相关支持,PR 的 ci 流程更换工具链
    • CMake 作为唯一入口,全自动化编译流程
    • 对外编译打包相关流程更换工具链
      • build tiflash multi branch
      • Linux: amd64, arm64
  • 外部预装库 & 依赖环境解耦(P1)
    • tidb-engine-ext 独立开源维护
      • 构建 CI 以及相关 QA 体系
      • tidb-engine-ext 侧实现全链路独立测试
    • 集成到 cmake 编译流程
    • GRPC
    • OPEN_SSL
    • CURL
    • RE2
    • 移除 cluster-manager 模块 重构 & 优化 tiflash replica 管理机制

  • 规范 Proposal 流程
    • RFC 流程
  • 文档补全
    • 开发规范
      • Release Notes 规范
      • 代码工程规范
    • ?代码模块入门分析文档

安全(P1)

  • License 选择
  • 规范 Debug 入口,按编译选项开启|关闭
  • 早期版本风险通知
  • 源代码清理内网链接及相关脚本
  • 开启 first time contributor 检查

社区

  • Contributor 和内部的沟通方式(可以参考 TiKV,有 slack,wechat 和一些 social media)
  • 创建几个简单 issue 方便 contributor 参与( 可使用 label good first issue 做检索)
  • Readme 重新组织,比如加上架构图,重要技术点介绍,致谢等
  • ?Logo 设计
  • 参考 TiDB,添加 github topic