跳至主要内容

让位解析器 - Grafast 0.1 发布!

· 阅读时长 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