6 River Systems 如何利用 JSON Schema 节省时间并提升协作
在人工智能和协作机器人的帮助下,6 River Systems 已成为履行运营领域的行业领导者。美国、加拿大和欧洲的企业使用其全面的解决方案来优化其运输工作流程,每周履行数百万件商品。自 2015 年成立以来,6 River Systems 发展迅速,并经历了企业发展过程中的一些常见挑战。在这段旅程中,他们发现 JSON Schema 可以帮助他们克服其中的一些挑战。
挑战
与许多经历快速增长的组织一样,6 River Systems 在发展过程中面临着一系列组织、技术和演变方面的挑战。当 6 River Systems 的仓库客户数量增长 10 倍时,公司本身也必须随之增长。6 River Systems 的运营、工程和分析团队规模显著扩大,因此他们意识到需要一种更好的方式来保持一致并传达期望、合同和理解,不仅要与彼此之间沟通,还要与履行系统沟通。
6 River Systems 使用大量机器人和硬件,而这些技术并不总是能很好地协同工作。他们难以将一流的数据处理、存储和分析工具集成到其现有系统中。例如,他们设施中的机器人使用机器人操作系统 (ROS) 框架,该框架存储消息、命令和系统状态信息。虽然 ROSbag 等工具使收集和分析机器人数据变得更加容易,但它们与 Elasticsearch 和 BigQuery 等现代数据堆栈工具不兼容。此外,最广泛使用的 ROS 版本依赖于 Python 2.7,该版本已弃用。
快速增长的一个不可避免的结果是技术债务。6 River Systems 取得了早期成功,足以让 Shopify 在 2019 年收购他们。他们实施的一些解决方案是目光短浅的,他们知道下一阶段的增长将要求他们专注于可持续的长期项目和实践。
解决方案
通过扩大对 JSON Schema 的使用,6 River Systems 能够解决许多组织和技术问题。事实上,JSON Schema 已成为整个组织自动化工作的核心,这帮助他们实现了更高的一致性和更高质量的结果。
为了解决其沟通挑战,6 River Systems 的分析师开始直接与产品工程师合作草拟新的模式。使用 JSON Schema,分析师可以编写工程师可以立即理解的生产就绪规范。
6 River Systems 发现 JSON Schema 对生成类型化 SDK 非常有用。当分析师和工程师完成对模式的迭代后,他们使用模式为机器人和整个应用程序生成 TypeScript 接口。在数据生成点进行强类型化使开发更加顺畅,并在错误到达生产环境之前消除错误,这至关重要。
6 River Systems 还使用其模式来自动更新目标数据库、识别和隔离不符合规范的数据,并提供对流经管道的数据的洞察。
以下是他们实施的一些技术解决方案
- 每次发布新模式时,都会运行一系列数据库协调步骤以确保一切同步。数据库表会自动创建或迁移,并且模式会被推送到注册表。
- 数据处理系统使用 JSON Schema 持续验证数据。任何不符合模式规范的数据都会被重定向到“无效事件”表(也称为“死信”,并触发警报。他们跟踪无效事件的量,并在需要时通知利益相关者。
- 他们使用 JSON Schema 构建事件级命名空间,这些命名空间已融入其所有指标和监控系统。他们可以识别通过管道运行的精确仪表和版本,并且任何问题都会立即显示在图表上。
- 数据发现工具(例如数据目录)会使用 JSON Schema 进行播种,因此这些工具不再需要手动抓取元数据。
- 他们开始使用 JSON Schema 来帮助自动生成 dbt 中的源,dbt 是一个流行的仓库分析平台。因此,分析工程师或数据分析师不再需要帮助编写新的 JSON Schema,然后又在 YAML 中重复编写相同的内容。
影响
由于使用 JSON Schema,6 River Systems 在整个组织中看到了好处。他们发现 JSON Schema 在其技术堆栈的所有层级中都节省了时间。有些人可能会说,在生成点结构化数据会减慢速度,这种说法有一定道理。但 6 River Systems 发现,当团队使用 TypeScript 接口在 IDE 中指出不正确的数据类型和缺失的属性时,情况并非如此。
JSON Schema 是数据分析师和产品工程师都能理解的工具。这使使用 TypeScript 和 SQL 等截然不同的语言的两个人能够直接相互沟通——这种好处“不可低估”,6 River Systems 的数据平台团队负责人 Jacob Thomas 说。
JSON Schema 使 6 River Systems 能够在整个堆栈中实现自动化。他们已经为仪表 SDK 实施了 TypeScript 接口,用它为数据仓库生成表,并在流式环境中使用它来生成 Kafka 主题和 dbt 源。在一个大型的履行中心,在代码发布后追踪数据问题非常困难,因此在代码发布之前使用 JSON Schema 进行验证可以节省时间并带来安心感。
随着公司的发展,让个人在复杂的架构中追逐问题是不 sustainable 的。将 JSON Schema 用作整个组织的共享语言,提升了所有层级数据的质量和可视性,从而实现了可持续实践。
主要影响结果
6 River Systems 使用 JSON Schema 最大的优势是节省了时间。对于这样一个管理如此大量工作的小团队来说,每一分钟都很宝贵!他们希望将所有可以自动化的东西都自动化。
“我们已经处理了数亿个事件——每个事件都是‘已知良好’。这是一个有效的模型,而且运作良好。”
6 River Systems 发现,通过使用 JSON Schema,他们可以
- 将已知良好的仪表部署到数千个现场机器人。
- 使使用 TypeScript 和 JavaScript 思考的产品工程师、使用 Python 思考的数据工程师和使用 SQL 思考的分析师之间能够有效协作。
- 验证到达其数据收集基础设施的每个有效负载。
- 主动播种数据发现机制和目录,而不是让工具手动抓取元数据。
由于使用 JSON Schema,他们能够在生产方实现 Quicktype 和 TypeBox 等工具,并在客户端实现基于 JSON Schema 的验证器。通过一些将两者连接起来的逻辑,他们的数据仓库始终保持最新状态。
6 River Systems 的旅程
6 River Systems 成立于 2015 年的马萨诸塞州沃尔瑟姆,并于 2019 年成为 Shopify 的子公司。与许多快速发展的公司一样,6 River Systems 发现他们需要做出一些改变,以维持早期的成功。让我们来看看 6 River Systems 是如何经历识别他们面临的挑战和他们考虑的不同解决方案的过程的。
识别痛点
当 6 River Systems 起步时,他们处理了很多半结构化数据,这些数据在发送时没有上下文。无法知道数据的含义、如何结构化它,以及哪些是可以接受的,哪些是不可以接受的。他们组建了一个团队来分析这些数据,但随着数据量的增加,团队的扩展变得不可持续。最重要的是,仪表经常发生变化,有时甚至完全被移除,这使得对数据的上下文化变得更加困难,并导致面向客户的仪表板崩溃。
所有这一切都发生在新的客户不断加入的时候。整个组织的成本都在上升,6 River Systems 知道他们需要使用可持续的长期解决方案尽快扩展——这一切都需要在不阻碍当前开发的情况下进行。
“我们很快就发现,我们需要一个解决方案来表达期望、合同和理解——一个用于各种团队内部系统和人类的 IDL。”
寻找解决方案
在寻找维护其数据显式合同的解决方案时,以下是一些他们考虑的选项
- Protobuf:虽然 Protobuf 运行良好,但它不像 JSON 那样常见。分析师往往不知道它,而 JSON 是他们每天都要使用的东西。由于 6 River Systems 的工程和分析团队紧密合作,他们需要一个对双方来说都同样易于理解的解决方案。
- Apache Avro:Avro 有很多值得称道的地方,但它与 6 River Systems 不使用的 Kafka 生态系统紧密相连。
- JSON Schema:与其用新技术完全重写堆栈,不如使用 JSON Schema,它是一个增量解决方案,易于理解。JSON 已经广泛应用于前端工程师,它与 Node.js 和 TypeScript 生态系统很好地集成,并且可以“附加到”现有代码,而无需进行任何更改或仅需进行少量更改。
验证解决方案
事实证明,在堆栈的各个层级中,使用 JSON 和 JSON Schema 是最佳解决方案。他们可以利用 JSON Schema 来增强上游流程,同时自动化下游流程,而不是从头开始。他们能够使每个架构比以前更加严格,并对数据实施更多约束。
“令人恍然大悟的是,团队不再需要与我们联系来推动新的仪器。产品团队和分析师可以相互沟通,高质量的数据就会出现在 BigQuery 中。”
虽然 6 River Systems 之前已经在公司的多个领域使用 JSON Schema,但他们现在将其用于驱动 UI 组件、工作流和配置管理系统,以及与仓库管理系统的进出集成。通过在整个组织中一致地实施 JSON Schema,他们相信自己能够在不断发展和扩展的同时,始终保持其所知的高质量解决方案。
感谢 Jacob Thomas 和 6 River Systems 让我们能够与您分享此案例研究。
经许可使用图片。