我可以创建一个挂钩或以其他方式对 Cloud SQL 只读副本进行响应吗?

Can I create a hook or react in some other way to a CloudSQL read replica cathing up?

我有一个带 google CloudSQL Postgres 实例的实时生产系统。该应用程序很快将进行长时间的 运行 数据库架构修改,以适应业务运营方式的变化。我们有一个部署计划,允许业务在架构更改期间继续运行,这实际上暂停了对我们只读副本的复制,并排队 API 请求,这些请求会在架构更改后改变数据库以进行重播完全的。部署完成后,最后一步是取消暂停复制。但是,当只读副本正在赶上时,架构更改将锁定表,从而导致大量失败的读取请求。因此,在我们取消暂停读取复制之前,我们将把所有 API 数据库查询转移到刚刚完成架构更改的主实例。到目前为止一切顺利,但我找不到一种方法来以编程方式判断只读副本何时完成追赶,因此我们可以将我们的数据库查询拆分为写入到主实例和读取到副本。

是否有我们的应用程序可以订阅的 PubSub 主题或指标流,当复制赶上时会触发?我也会对报告应用程序可以接收的复制滞后事务计数(或时间)的东西感到满意,并且当尾随平均值低于阈值时,它会切换到再次从副本读取。最不理想但仍然可以的选择是连续轮询 API 或指标流。

我知道我可以通过查询副本数据库本身的复制状态来直接执行此操作,但这意味着我们必须在我们的应用程序中实现自定义流量定向。目前我们使用的框架允许我们在配置中路由数据库流量。我知道应该有 CloudSQL 提供的指标,但我找不到它们。

我知道它没有完全回答您的问题,但也许您可以使用它。看来您可能对 Cloud Monitoring 和指标感兴趣:

database/mysql/replication/seconds_behind_master

根据 reference 它反映了副本落后于主服务器的滞后。

或者 database/replication/replica_lag 都可以。我不认为你可以通过 pub/sub 登机。无论如何,您应该查看参考资料,因为它包含所有指标。