Hasura Graphkel引擎2.0

2021-02-26 02:33:18

我很荣幸地代表Hasura的整个团队宣布发布了Hasura GraphQL Engine 2.0(也称为Hasura 2.0)。 🎉

Hasura 2.0是过去几年中最重要的版本,但也与Hasura 1.x完全向后兼容。在过去两年中Hasura的最近85个版本中,我们一直致力于不破坏面向用户的API,而这个主要版本是另一个检查点,可确保用户获得新功能而不必重构他们的工作。实际上,Hasura 2.0 == Hasura 1.4,但由于发行量很大,我们决定将下一个1.4版本称为2.0。

TL; DR:如何入门?如果您想跳过这些小窍门,直接尝试一下,请前往文档尝试使用Docker 2.0或在Hasura Cloud(Hasura GraphQL Engine的托管服务)上免费试用。我还将在3月4日举办一次网络研讨会,请加入我的行列,并提出您的问题。

Hasura 2.0捕获了GraphQL引擎内部的基本变化,使Hasura可以满足更大范围的任务关键型应用程序的需求。在Hasura 2.0中,您可以看到5个主要的工作领域和功能新增:

我们首先使用对Postgres的独家支持来构建Hasura。这是一个刻意的选择,因此我们可以集中精力进行工程和产品方面的工作,并且鉴于Postgres的兴起和Postgres生态系统的爆炸式增长,这种选择取得了很好的回报。

在与用户(尤其是企业和用户)合作的过程中任务关键型工作负载,我们越来越注意到,用户经常带来多个新数据库或现有数据库,即使只是Postgres。这些是我们已经看到的2个主要用例:

多租户:不同的租户将其数据分组到不同的Postgres数据库中。通常,这是为了实现扩展或加强严格的数据隔离。

不同的工作负载:针对搜索优化的Postgres数据库可能与针对时间序列优化的数据库(使用Timescale)的调配和调优非常不同,后者反过来与针对高事务量调优的Postgres数据库完全不同。数据从这些不同的来源一起被消耗。

Hasura 2.0允许将多个数据库同时引入到一个Hasura GraphQL引擎实例(或扩展的Hasura实例集群)中。现在,您不必提供单个env变量,就可以在运行中的Hasura实例上即时添加和删除数据库源!

Postgres始终只是Hasura的起点。现在,我们重构了查询编译管道,以便可以轻松地将其推广到任何数据库。

现有或遗留的关键任务数据通常不在Postgres上,而将数据传输到Postgres的ETL成本不可行,并且无法实现直接查询真相来源的目的-特别是对于快速移动的操作/实时数据。

当然,新数据工作负载也可能会进入其他不仅仅是Postgres的数据库中!

在Hasura 2.0中,我们将启动对SQL Server和我们的第一个OLAP数据库-BigQuery的支持。

在接下来的一天中,我们将分阶段在Hasura Cloud上推出SQL Server支持。您也可以前往文档,尝试在Docker和您自己的SQL Server数据库上使用Hasura。

我们从泛化关系数据库开始,目的是确保可以在2周内将新的关系数据库引擎添加到Hasura。

Hasura添加新数据库的哲学是保持最终的GraphQL API相似,但不尝试将所有数据库引擎标准化为相同的公共分母接口。 Hasura的目标是充分发挥特定数据库引擎的优势,同时确保GraphQL,授权和Event Just Work的所有Hasura优势。

我们已经开始编写有关如何扩展一些类型类以增加对您喜欢的SQL系统的支持,并与维护人员紧密合作以保持对数据库及其优点(特定类型的本机支持)的改进的贡献指南。 ,功能,运算符,连接处理等)。

在这一年中,我们将把其他类型的数据库系统引入Hasura:在我们看来,文档和键值存储非常重要!让我们知道您希望通过我们的Github支持哪些数据库,以便其他人也可以参与其中并帮助我们确定优先级。

Hasura支持"联接数据"跨异构源,以便API使用者可以看到其API模型的语义统一图。目前,Hasura支持在某些特定方向上加入。以下是按优先级顺序排列的下列远程加入功能:

远程模式到数据库:将任何GraphQL API数据源的输出与数据模型连接在一起

GraphQL API已成为人类探索,使用和集成的最佳现代API。

尽管GraphQL最初的目标是提供一种用于在UI上自动进行API组合并在JSON上创建类型安全的客户端-服务器协定的规范,但其成功远不止于此。可以说,对于真正的GraphQL stan感到沮丧的是,GraphQL片段和Relay风格的GraphQL并不像应有的那样受欢迎。这是因为GraphQL解决了一个更大的问题,而不仅仅是自动化API组成和UI上的乏味部分。

自助服务消费:API使用者可以浏览,探索,测试和集成具有更紧密反馈回路的API,而无需使用典型的手写文档和内容。工具。

查询所需内容:API使用者可以设计API查询以精确获取所需数据,而无需人工为自己喜欢的数据形状构建自定义端点。想象一个仅以固定形状提供数据的数据库-这太荒谬了!现在,这就是我们想要的,但也需要我们的API。性能,缓存,安全性等应该尽可能地发挥作用。

但是,实际上,我们发现在生产中使用GraphQL API的三大障碍-即使在技术上也是如此可行的:

在生产中缺乏围绕GraphQL的GraphQL供应商工具-操作,缓存,监视,错误和QoS报告,授权,安全性都是GraphQL的全新内容。在关键任务方案中,尤其是在企业环境中,采用GraphQL的成本可能太高了。

未构建前端应用程序的消费者(例如,使用公共API或开发人员构建其他服务的消费者)可能不希望或无法在其代码中使用GraphQL客户端。作为人类,他们仍然喜欢GraphQL作为工具,但是可能无法实际使用

REST API不会消失。这意味着团队可能必须永远维护多个API引擎,以确保他们不会疏远某些API使用者。维护GraphQL API和REST API的成本是荒谬的。 (例如,对于使用gRPC的团队来说,REST也可以被视为占位符)。

这使Hasura用户可以在情况需要时获得GraphQL和REST的所有好处。 Hasura使用GraphQL作为中间表示,并将带有参数的RESTful请求转换为参数化的GraphQL查询,然后以最小的开销执行它-毕竟缓存了查询计划!

这似乎与“持久查询”的想法相似。但是这里的主要区别是支持惯用的REST。这意味着支持错误代码,缓存头,REST样式动词和参数化(路径参数,URL参数,JSON主体等),甚至支持已创建端点的OpenAPI / Swagger文档。

Hasura包含一个复杂的授权引擎-与数据库世界中的RLS样式授权非常相似。

这样,Hasura可以将其授权策略功能扩展到整个数据源,而不仅限于特定数据库所支持的授权功能。

Hasura 2.0具有对远程GraphQL服务(您自己的GraphQL服务或您不拥有的外部GraphQL API)的授权:基于角色的架构和预设参数。

随着时间的流逝,我们计划扩展此授权引擎,以跨所有数据源创建通用且统一的RLS样式授权层。有了对远程GraphQL服务授权的支持,我们才刚刚开始!随着数据的爆炸式增长,对声明性和“人类可观察到的”的需求授权变得更加重要。

Hasura 2.0还具有一个策略继承系统,该系统可以动态编写细粒度的RLS或ABAC样式策略。

面向多个异构数据源的GraphQL层是成为单点故障的理想候选者。 Hasura 1.x已经可以无缝地以按比例放大的方式作为副本集群运行,并且它们将自动彼此同步。

使用Hasura 2.0,我们希望确保我们可以开始引入一些功能,这些功能可以使运行高可用性和“分布式”功能。 Hasura集群及其与一组上游数据源的交互尽可能无缝且简单。

这不再只是使Hasura扩大规模并发挥作用,还不仅仅是使其与上游资源的容错和交互作用。可扩展性以防止单点故障问题。

Hasura 2.0具有"维护模式"可以对其本身和所连接的源进行主要的Hasura版本升级,而无需中断GraphQL API和事件传递系统。

根据上游数据源的特性定制的自动故障转移,断路和重试逻辑。例如:postgres主副本已关闭!

上游源监视:通常,当API性能下降时,很难隔离问题的根源是API层还是上游数据源。例如:由于连接池已饱和,API请求正在排队。

ICYMI,Hasura是GraphQL服务器,不需要构建步骤! Hasura的所有配置都是完全动态的,并由API驱动。此"元数据" API-可以根据用例在生产中锁定-进行"更改管理"非常方便。

但是,这些元数据API也非常强大,因为它们允许Hasura用户" fetch"。实时运行Hasura系统的所有配置。

创建有关基础数据模型,其文档,常用列,建议的查询模式的数据字典。我们已经在这里在Hasura的顶部组装了一个入门工具包,用于构建您自己的数据字典。

实时观察安全性和授权配置以及规则。观察特定请求实际使用了哪些授权子句。

创建社区和特定于组织的基础元数据配置,并共享它们以鼓励通用标准和最佳实践。

尽管在此版本的Hasura 2.0中没有上述某些可用功能,但希望有很多元数据工具可以帮助您!

即时git push(或github webhook)将数据库迁移和Hasura元数据更改部署到您的暂存和生产Hasura实例。

Hasura 2.0随处可见,并且是该版本的一部分,它为工程师和贡献者在未来几个月和几年内进行创新和快速交付奠定了技术基础。

与我一起参加Hasura 2.0启动网络研讨会,了解这些功能的实际应用,了解更多信息并提出问题! 当然,如果您错过了它,别忘了注册令人敬畏的(免费的)虚拟GraphQL会议:https://graphql.asia/ Hasura Cloud为您提供了完全托管的,可用于生产的GraphQL API即服务,可帮助您更快地构建现代应用程序。