默认情况下,Cloud Run 服务最多可以有 100 个实例。您可以将此数量增加到您区域允许的上限。每个区域的最大限制还受 Cloud Run 服务的 CPU 和内存配置影响。具体而言,您的服务可用的实例数上限为以下各项中的最小值:
- 区域配额基准除以请求的 1 个 CPU 的倍数
- 区域配额基准除以请求的 2GB 内存的倍数
例如,如果基准配额为 1000 个实例,内存为 4GB 或 CPU 有 2 个,则有效上限为 500 个。
您可以在控制台的配额页面中查看您所在区域的每个区域基准配额。
如何提高基准区域配额
如果您需要为部署了 Cloud Run 服务的区域提高实例数上限,可以申请增加配额。
设置实例数上限的最佳实践
以下部分介绍了为服务配置实例数量上限的最佳实践。
事件驱动型服务的最佳实例数上限值
事件驱动型服务(例如函数)可能会因传入事件而出现不规律的流量高峰。如需确定这些服务的最佳实例数上限值,您需要考虑服务调用时间、预期平均调用次数、峰值调用频率以及对调用失败的容错性等因素。
一般而言,建议先将实例数上限值设为 3,然后监控调用失败情况,并根据需要上调实例数上限值。
当所有实例都在使用时的请求处理
正常情况下,服务会创建新实例进行纵向扩容,以处理传入的流量负载。但是,如果您设置了实例数上限,则可能会遇到没有足够的实例来满足传入流量负载需求的情况。
在这种情况下,Cloud Run 会尝试在长达 30 秒的时间内处理新的入站请求:
- 如果某个实例在此时间段内处理完其请求,则可能会开始处理这个新的入站请求。
- 如果没有可用的实例,则该请求将失败。
Cloud Run 会自动保存发往事件驱动型服务的事件,直至有容量可用。
超出 Cloud Run 伸缩能力的实例数上限
在指定实例数上限时,您实际指定的是一个数量上限。设置较高的上限并不意味着您的服务一定会纵向扩容到指定的实例数量,它只意味着在任何时间点共存的实例数量不得超过此上限。
此外,设置实例数上限可能会影响 Cloud Run 用于满足流量需求的伸缩策略。通常,Cloud Run 会优先遵循您指定的上限,而不是扩容(可能超过您的上限)。
处理流量高峰
在某些情况下,例如流量快速激增时,Cloud Run 在短时间内创建的实例数量可能多于指定的实例数上限。如果您的服务无法承受此暂时性行为,您可能需要考虑安全边际因素,设置一个低于服务承受能力的实例数上限。
部署
部署新修订版本时,Cloud Run 会将流量从较早的修订版本迁移到新修订版本。因为实例数上限是针对每个修订版本独立设置的,所以部署后的一段时间内,实际的实例数可能会暂时超出指定的上限。
例如,某个服务的实例数上限可能是 5 个。正常情况下,该服务在处理请求时会纵向扩容到 5 个实例。部署新修订版本后,新修订版本自身的实例数上限是 5 个。
部署新修订版本后,先前修订版本已处理的请求不会中断。这些请求将继续得到处理。新的入站请求将由新部署的服务修订版本处理。
因此,在部署新修订版本后的一段时间内,上述示例中的服务最多可能有 10 个实例(每个修订版本各有 5 个实例)。上一版的实例终止运行所需的时间取决于这些实例处理完所有活跃请求所需的时间。这是在选择适当的实例数上限时需要考虑的一个额外因素。