如何按需模拟“无服务器”Cloud SQL?

如何按需模拟“无服务器”Cloud SQL?

问题:Cloud SQL 实例无限期运行,并且托管成本昂贵。

目标:节省资金的同时不损害数据库可用性。

已经过去了近四年时间,Google Cloud 仍未满足该功能请求,该请求已在 AWS 上使用其 Aurora RDS 实现。

由于自动扩展到零的按需 Cloud SQL 似乎不会很快推出,因此以下策略是否有效?

  1. 拥有 Cloud SQL 实例、Baby 和 Papa。它们遵循主/从副本原则,但略有不同。Baby 实例较小,vCPU 较少,内存较低,始终运行,但运行成本较低。然而,Papa 实例价格昂贵,vCPU 和内存较高,但仅在需要时运行。
  2. 首先,只有 Baby Cloud SQL 实例在运行,因此它是接受读取/写入的主实例。Papa Cloud SQL 实例未运行。
  3. 由于我使用的是标准应用引擎,该引擎在没有流量的情况下会自动缩放到零,因此安排一个 cron 作业,每 10 分钟检查一次是否存在应用引擎实例。在这种情况下,应用程序没有流量。如果不是这种情况,则启动 Papa Cloud SQL 实例。启动后,Papa 实例将成为接受读取/写入的主实例,而 Baby 实例将成为仅能读取的从属副本。
  4. 如果 cron 作业检测到应用引擎没有正在运行的实例,则意味着没有流量。因此,Papa Cloud SQL 实例将停止,Baby Cloud SQL 副本将升级为主实例并可以接受读取/写入。
  5. 这样,昂贵的 Papa 实例就可以按需运行。如果在 Papa 实例停止或重启时出现流量高峰,Baby 实例仍然能够响应请求。

这个策略可以确保昂贵的 Papa Cloud SQL 实例仅在流量下运行。这种 Baby-Papa 动态在 Google Cloud 上可行吗?

答案1

Google Cloud 并未将 Cloud SQL 定位为“无服务器”,或者更准确地说,将其规模缩减为零。其存储中您完全不必关心实例的是Cloud Datastore 或 Firebase。这是一个设计决策,会产生一些影响,因为这些不是 SQL。现在我们假设继续使用 SQL。

测试您的自定义扩展方案,看看它是否满足您的需求。App Engine 扩展是否是数据库扩展的有用触发器?您编写的这些脚本是否能够自动成功切换且不会丢失数据?在两个实例中复制两个数据可以节省多少成本?

考虑只有一个 SQL 实例的替代方案,禁用高可用性。编辑实例 CPU 和内存以获取不同的大小。更简单,没有副本。停机时间需要几分钟。

降低 Cloud SQL 成本的唯一方法是官方文档正在减少 CPU、内存、网络或存储。您还可以研究承诺作为降低部分成本的一种方式。

相关内容