跳至主要内容

一篇带有“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