跳至主要内容

· 阅读时长 6 分钟
Benjie

Grafast 终于来了——一个全新的 GraphQL 全面执行引擎。它通过利用 GraphQL 的声明性特性,让你的业务逻辑更好地理解它需要做的一切,从而在整个后端堆栈中实现更高的效率。它向后兼容,因此你可以在现有的模式中逐步采用它,并且它终于可以与 npm 上的 grafast 模块 一起尝试了;或者查看 GitHub 上的源代码

我在 GraphQL Conf 上发布了 Grafast v0.1,上面是我演讲的完整视频,涵盖了 Grafast 是什么以及它如何提高应用程序性能、降低运营成本,而不会给开发人员带来重大负担。

Grafast 工作组

在 Grafast 成为可以在任何语言中实现的规范之前,仍然需要做出一些决定并进行一些调整。如果您对这项技术的潜力感兴趣,请加入 Grafast 工作组并参与其中。我们都应该拥有轻松执行 GraphQL 的未来!

如果您没有时间观看上面的视频,这里有一些关于 Grafast 的信息。

“GraphQL 的执行模型不适合大多数服务器”

GraphQL 是一种声明式语言;请求预先指定了客户端请求的所有内容。

但是基于解析器的执行模型模糊了这种知识——当以简单的方式实现时,解析器很快就会导致严重的性能问题;即使实现得很好,它们也还有很多不足之处。

DataLoader 是解决“N+1 问题”的建议方法之一,但这仅仅是 GraphQL 模式可能面临的最严重的性能问题——随着您的模式和操作变得更加复杂,还有许多相关问题会累积起来。

我不仅要解决众所周知的 N+1 问题以及更微妙的欠取和过取问题,还要帮助您实现 GraphQL 模式的最高效执行,无论您使用什么数据源!解决方案?通过新的通用查询计划器利用 GraphQL 的声明性。

“解析器让路!有一种新的方法来执行 GraphQL”

A flow diagram showing the stages of Grafast: Plan resolvers and the incoming GraphQL request are used to draft a plan, which is then optimized, finalized and executed, then the results are sent.

Grafast 通过“计划解析器”来确定 GraphQL 请求中每个字段的需求,最终形成一个草案“操作计划”。一旦草案完成,计划就会被优化并执行。

Grafast 从一开始就被设计为为模式设计者提供必要的工具,以确保他们的模式尽可能高效地执行,同时确保编写他们的逻辑仍然是一种愉快的体验。为了实现这一点,Grafast 采用了一种规划策略,该策略对理解传入操作采取整体方法,并释放了重大优化的潜力:这些优化在基于解析器的执行模型中是无法实现的,除非付出巨大的努力(以及一些魔法 😉)。

Grafast 与 GraphQL 一样,不特定于任何特定的技术栈、业务逻辑形状或数据存储层。它不关心您是否使用关系数据库、文档存储、ORM、HTTP API、文件系统或信鸽。任何有效的 GraphQL 模式都可以用 Grafast 实现,Grafast 模式可以查询任何数据源、业务逻辑或服务。

虽然 Grafast 支持传统的解析器,但它鼓励开发人员使用“计划解析器”:类似于解析器的小函数,但它们描述了所需的数据,而不是实际获取数据。

A comparison between a traditional resolver and a plan resolver. The plan resolver is about the same length and mirrors the shape of the traditional resolver, but the key difference is it describes how to get the data rather than actually fetching it.

计划解析器类似于传统的解析器,它们甚至遵循相同的形状,但关键区别在于它们描述了如何获取数据,而不是实际自己获取数据。

Grafast 获取 GraphQL 请求,并使用计划解析器草拟一个执行计划,该计划可以被优化和简化。优化可能涉及将执行形状从 GraphQL 请求所暗示的形状显著改变,使系统能够以最有效的方式满足请求的要求。

当规划阶段完成时,Grafast 将执行这个高度优化的执行计划,并将结果馈送到输出计划中,该计划有效地准备结果以发送到 GraphQL 客户端。

如果另一个请求使用相同的 GraphQL 文档但不同的变量进来,Grafast 可以重用该计划并直接跳到高度优化的执行阶段。

对 GraphQL 请求需求的更深入理解为优化打开了全新的途径,而不会牺牲诸如缓存之类的久经考验的方法。结果是更高的效率——不仅在您的 GraphQL 服务器中,而且在它所依赖的后端服务中——让您的团队在更长的时间内使用更简单的架构进行操作,让您的工程师专注于为您的客户提供更好的体验,而不是专注于保持复杂架构平稳运行的复杂性。

Grafast 已经可以正常工作,我的一些 赞助商 已经在生产环境中使用它。您可以通过访问 grafast.org 上的指南立即尝试。现在我要说的就是,如果这项新技术的潜力让你感兴趣,那么请

在 10 月 24 日帮助塑造未来,加入 Grafast 工作组

A cartoon graphic of superheroes looking over their city at sunset. The text reads "Get involved" and there is a link to the Grafast working group hosted on GitHub