Case Studies

Frag Lab

使用 Incredibuild,每一位 Frag Lab 开发人员都能享受到由计算能力带来的速度,堪比全马力运转所有机器内核

关于 Frag Lab

Frag Lab 是一家位于乌克兰的独立电子游戏开发商,由一个热衷于开发最佳 AAA 在线 F2P FPS 游戏的开发者团队组成。作为该体裁作品的忠粉,并且有着开发引人注目的 FPS 游戏的经验,Frag Lab 在射击游戏爱好者群体间声名鹊起。

使用 Visual Studio,该团队已在 Windows 平台开发了 C++ 游戏客户端。

另一方面,其游戏服务器正是为 Windows 和 Linux 操作系统开发的。使用 Windows 版本服务器是因为 Visual Studio IDE 极为便利,而 Linux 版本是通过 Clang 构建的,旨在用于生产部署。

所面临的挑战

“于我们而言,开发人员所面临的最大挑战莫过于局部变更的编译时间,”来自 Frag Lab 的 Sergey Rustamov 说道,”由于源代码的组织方式和 C++ 语言本身的原因,许多变更(特别是在常见的 C++ 头文件中)会在不同位置引发大规模的重建,若是缺少分布式构建系统,这一操作将极度耗时。副作用是,编译过程中的整体 CPU 使用率过高,如此一来,便无法切换到其他任务,这无疑浪费了开发人员的时间。”

慢速编译并非 Frag Lab 面临的唯一性能挑战。该工作室的持续集成系统由 Jenkins 提供技术支持,需要尽快采取行动。

“我们的开发信条建立在尽早失败的理念之上,” Sergey 分享道,“宁愿在开发流中犯错,也要从主线流中遏止错误的产生。持续集成系统的速度是这一理念的关键组成部分,它能使我们在提交早期发现故障,允许 QA 团队进行自动构建,并在开发人员对源代码进行变更后立即发现故障。”

从开发人员的角度来看,构建时是否使用 Incredibuild 的时间差别极大。

Sergey Rustamov

Frag Labs

Incredibuild 是如何做到的

使用 Incredibuild,每一位 Frag Lab 开发人员都可将与游戏开发相关的各项任务分配至网络中的其他机器,并能享受到由计算能力带来的速度,堪比全马力运转所有机器内核。

以下为 Incredibuild 用途:

  • 帮助开发人员快速编译局部变更
  • 加速持续集成系统过程,减少构建和自动构建工件的等待时间

全部 Incredibuild 构建步骤均由名为 WAF 的构建系统管理。WAF 直接使用 Make 与 Build 解决方案,并与 Incredibuild 集成,便于开发人员即刻使用 WAF、Ninja、MS Build 等加速工具。

游戏服务器的 Linux 版本未采用分布式,而是在所有可用 CPU 内核上垂直扩展,从而加快编译过程。

提及缩短 CI 周期,Incredibuild 的分布式处理技术可实现分布式处理,从而加速如下过程:

  • 由提交行动触发的开发流的自动构建
  • 主线 Canary 自动构建,用于尽早发现主构建缺陷
  • 从主线和发布分支构建

总结

有人要求 Sergey 总结 Incredibuild 的使用经验时,他告诉我们:“从开发人员的角度来看,使用和不使用 Incredibuild 的构建时间之间的差异是极大的。我们从开发团队处收集构建度量指标,用于了解大多数典型构建操作的平均时间,每构建一个局部变更平均需要 200 秒,而如果不使用 Incredibuild,则要花费 15 分钟到几小时不等,时间长短取决于大规模变更的程度。Incredibuild 作为关键组件,特别是对于自动构建流程,它为我们提供了快速 CI 管道。”

Building a Local Change
15分钟Without Incredibuild
3.3分钟With Incredibuild