注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

搭建生产流水线

生产工作流需要可靠的流水线来支持。按照本文档中列出的原则搭建流水线将使维护更加容易,从而让您在问题导致SLA违约之前发现问题。这里的一些指导也将使共享有关流水线重要内容的知识变得更容易。这在流水线生命周期的各个阶段都很重要,从开发一直到长期维护。

本文档对流水线开发人员和维护人员都很有用。对于开发人员来说,如果流水线将直接进入生产,在开始搭建流水线之前使用本文档是有帮助的。同样,当将概念验证流水线转换为生产流水线时,也可以使用本文档。对于流水线维护人员,以下元素应作为进入维护模式的前提条件。

流水线定义和期望

虽然在开始搭建生产流水线之前不一定总能有明确的期望答案,但尽早注意这些期望是有价值的。强烈建议在建立流水线定义和期望时进行文档化。

期望影响生产流水线设计和设置的几个方面,包括:

  • 流水线的设计和架构决策。
  • 如何设置计划(因为这是控制流水线构建频率的主要方式)。
  • 需要哪些验证和监控。
  • 在流水线处于维护模式时如何优先处理问题。

您的团队应该解决的重要问题包括:

  • 流水线的范围究竟是什么? 从哪里开始,在哪里结束?应该在哪里连接到其他流水线?
    • 如果您的流水线的某些部分与另一个流水线或应用案例重叠,请考虑将重叠部分视为自己的流水线。
  • 流水线刷新率的要求是什么?
    • 或者是否有特定的时间需要刷新数据?
    • 流水线是否应该在周末运行?
    • 何时数据被认为是严重过时的?
    • 在刷新率和支持方面的期望是什么?
    • 注意 — 尽管这听起来很简单,但这是流水线维护团队经常面临最大困难的地方。在这里没有明确的定义,作为流水线维护人员很难优先处理工作或做出正确的修复。
  • 端到端传播延迟的期望是什么? 换句话说,从数据到达Foundry的那一刻起,到流水线输出更新为止,数据流经流水线需要多长时间?
  • 您从每个外部来源获取的联系人是谁? 外部来源可以是数据连接同步或是一个独立的上游Foundry流水线,供给您的流水线。
  • 数据正确性的功能保证是什么? 是否有关键列或关键验证必须为true以确保您的流水线?
    • 注意: 确定如果保证被打破,结果应该是什么是很重要的。失败的验证是否应阻止数据到达您的最终用户,还是应该触发警报而不阻止流水线更新?您可能希望执行后者以允许其他最新数据流经您的流水线。这两种不同情况的实现会有所不同。文档是开始跟踪保证的一个好地方。
  • 期望是否确定为兼容? 随着复杂系统的增长,它们变得更容易出现故障。通常希望在警报触发后留出足够的时间来解决潜在问题——无论是意外的流水线故障还是上游来源缺失的数据。
    • 示例1: 重要的是考虑传播延迟与预期流水线刷新率的关系。如果预期的刷新率是每2小时一次,而流水线需要1.5小时来构建,则可能难以遵守SLA。
    • 示例2: 如果一个工作流需要每小时刷新一次,但上游数据源每天只提供两次数据。这意味着您将无法实现每小时的刷新。

生产流水线的原则

设置成功生产流水线的关键原则可以总结为:“以您不会在场维护它的理念来搭建”

一些具体的建议可以帮助您实现这一目标:

  • 版本化您的代码,并撰写有意义的提交信息: 这使得更容易跟踪更改是何时、由谁提交的。
    • 在生产流水线中,如果可能,推荐使用JavaPython。这两种语言有很多可用的资源和强大的开发者社区。虽然SQL非常易于访问,但它很快就会变得复杂,因此更难调试。
  • 优化可读性高于一切: 简单的流水线更易于维护。在变换代码中选择标准或现有解决方案将降低维护负担和开发复杂性。如果您必须做一些非常规的事情,请确保彻底记录。
  • 尽可能线性化流水线: 就一般架构而言,易于维护的流水线是那些相当简单和线性的,但很难就如何实现这一点给出建议。注意流水线的一般结构,并在考虑您的限制的情况下尽可能优化可读性和简单性。当您考虑将流水线移至生产时,花一些时间理顺流水线通常是值得的。
  • 生产流水线通常是长期存在的。 因此,编写流水线的人很有可能不是长期维护或管理流水线的人。请记住,接手流水线开发或维护的下一个人需要能够阅读代码并理解流水线的设置。
  • 保持简洁的文档:
    • 逻辑文档: 一般建议将逻辑本身的文档保存在代码注释中。
    • 整体流水线文档(包括记录流水线中的重复问题): 也应保存在靠近流水线的直观位置。一个很好的例子是将其放在流水线所属的项目中。对于流水线开发人员和维护人员来说,它应该易于查找。
    • 请记住:过度记录也会使其难以阅读并减少实用性。保持简洁并记录关键信息。如果您需要捕获不会经常被引用的非常长且详细的流水线信息,请考虑将其保存在单独的文档中。

开发过程和基础设施设置

开发

一旦流水线进入生产,确保围绕进一步贡献流水线的开发流程已建立并有效传达给流水线开发人员很重要。这确保了流水线不会意外中断。

因此,我们建议阅读:

  • 开发最佳实践 至少,生产流水线应易于阅读、易于维护,并且主分支已锁。然而,为确保您的开发设置更稳健,我们建议阅读本文档中的更详细建议。
  • 分支和流水线发布流程 如果您在流水线的开发阶段尚未使用分支和流水线发布流程,我们建议在将流水线移至生产时使用此流程。文档将提供您可以使用的示例流程。

基础设施(计划)

相关地,尽早设置计划将使您能够开发,而无需考虑手动触发流水线不同部分的构建。如果您的计划混乱,您可能会发现这会阻碍开发并减慢速度,因为更改不会自动传播到流水线中。

将流水线移至生产时,还建议审查和重组计划,因为开发期间使用的计划可能不再有意义或可能包含反模式。此步骤应在进入维护模式之前完成。

根据最佳实践设置或审查计划可以通过遵循**计划最佳实践文档**来实现。

提早开始监控

一旦流水线开始定期运行,您就希望开始监控其行为。这可以防止技术债务的积累,并允许您跟踪流水线的期望是否现实。在可能的情况下,即使在面对截止日期和团队能力的情况下,也建议尽早开始监控。

有关如何设置监控的更多信息,请参见流水线监控最佳实践文档。