吞吐量指南
了解GCU性能并扩展你的图容量
本指南涵盖
- 图计算单元(GCUs)概述及其性能预期
- 如何计算您的超级图所需的GCU数量
- 如何根据需要变化管理您的超级图的吞吐量能力
概述
云专属定价基于运行您的图的必要图计算单元(GCUs)的数量。一个GCU是吞吐量容量的单位,考虑以下因素:
- 处理传入的GraphQL请求
- 在子图中创建查询计划
- 安全地将流量路由到您的后端服务
GCUs在您选择的地区的AWS上运行。
性能预期
由于云专属处于预览阶段,这些性能预期可能会发生变化。
从单个GCU,您可以期待以下基线性能:
- 每秒25个请求(RPS)
- 150个子图 RPS
- 每秒最多0.5兆字节的响应数据
GCU性能取决于其他因素,如有效载荷大小。例如,返回大量有效载荷的请求可能将吞吐量降低到基线25 RPS以下。 相反,返回少量数据的请求可能能实现高于基线25 RPS的吞吐量。
Apollo建议在进入生产之前对Cloud Dedicated上的GraphQL工作负载进行负载测试。
吞吐量因素
除了RPS之外,查询复杂度和响应大小会影响GCU的吞吐量。例如,以下场景会降低相对GCU吞吐量:
- 查询五个以上子图的请求
- 每个操作返回数百或数千个字段的请求
这样的请求会降低吞吐量,因为它们需要额外的计算资源来执行。如果您超级图接收到复杂的查询或返回大量响应,请将额外的GCU纳入您的GCU计算。
ⓘ 注意
GCU包括用于处理偶尔的复杂查询的突发容量。长时间的复杂查询可能会耗尽这一容量。
速率限制
GCUs不超过速率限制。然而,GCUs确实提供了一定数量的吞吐量。可以暂时在几秒钟内提高GCU的吞吐量。在此期间之后,客户端将收到429错误。Apollo建议向客户端添加重试逻辑以最小化丢失的请求。
GCU计算
如果您已经使用GraphOS,您可以使用GraphOS Studio中的操作指标来计算所需的GCUs。
- 在Studio,进入洞察页面,并将时间范围选择为上个月。
- 向下滚动到请求速率图表。这个图表显示了每分钟的请求次数(RPM)。
- 为了计算每秒所需的请求次数(RPS),找到峰值RPM并将其除以60。
- 由于1GCU作为基准可以服务25 RPS,因此将峰值RPS除以25来计算所需的GCUs。
- 在上述示例中,峰值是19,000 RPM。
19,000 / 60 = 317
,因此该图具有graph的峰值317 RPS。317 / 25 = 13
,因此此工作负载需要至少13 GCUs来运行。
ⓘ 注意
如果您的supergraph处理复杂或大型请求,请考虑额外的GCUs。
负载测试
在Cloud Dedicated上投入生产之前,Apollo非常建议运行负载测试以模拟生产流量。例如,假设您运行了典型的日流量的10%的负载测试,在单个GCU上运行良好。这意味着您在典型的日需要至少10个GCUs来运行您的图。
Dedicated试用版可以免费帮助您进行负载测试。取得联系以开始试用。
管理容量
Cloud Dedicated支持关键任务的生产工作负载,并且您可以调整性能以满足您的GraphQL APIs的需求。Dedicated支持每个GraphOS变种最多10个GCUs。
Dedicated从每个变种的1个GCUs开始。您可以通过以下方式更改变种的GCUs:
ⓘ 注意
GCU更新约需1分钟来启用。
在Studio中编辑GCUs
您可以从工作室中的云路由器页面更改图变体的GCUs。点击管理容量旁边的路由器容量。
然后,选择所需的GCUs数量并点击保存更改。
通过API编辑GCUs
您可以使用以下变异从GraphOS平台API更改图变体的GCUs。
mutation Graph($graphId: ID!, $name: String!, $gcus: Int!) {graph(id: $graphId) {variant(name: $name) {router {setGcus(gcus: $gcus) {... on RouterGcusSuccess {order {id}}}}}}}
此变异需要设置以下变量:
graphId
:图的ID是图参考的第一部分- 您可以在GraphOS Studio中的设置 >此图下找到
graphId
。
- 您可以在GraphOS Studio中的设置 >此图下找到
name
:变体名称- 如果您未设置变体名称,默认为
current
。
- 如果您未设置变体名称,默认为
gcus
:为变体分配的GCUs数量