我的Symfony主义主/从连接有一个奇怪的问题。我们将Amazon RDS Aurora和MySQL与主副本一起使用。它运作良好,但我们的应用程式运作速度过快。
每个INSERT / UPDATE / DELETE请求总是转到主请求,然后AWS RDS自动将数据复制到Slaves上,平均延迟为20ms。
当我们的应用执行这些查询中的任何一个,然后将用户重定向回他正在执行的操作时,该应用执行SELECT即可查看更改,而且通常它是如此之快以至于还没有复制,因此用户可以看到过时的信息。
我想通过在每个请求上最好添加一个事件侦听器来实现快速修复,因此,如果Doctrine完成了任何INSERT / UPDATE / DELETE操作,我可以为其他50-100ms添加睡眠机制,以便这些请求将200返还给客户之前,请花一点时间,以便他进行更新。
有人有类似的问题吗?
我想这是一个好问题,但是非常烦人,而且由于速度快,UX大大减少了。
请让我知道对于这个问题是否有更好的 quick 解决方案。我们的应用执行的读取操作比写入操作多很多倍,因此客户端不会注意到增加100ms的写入请求。我想在请求级别解决此问题。遍历每个要写的控制器不是一个选择,因为它是一个庞大的应用程序。
答案 0 :(得分:1)
您可以使用内置的生命周期挂钩(https://symfony.com/doc/current/doctrine/lifecycle_callbacks.html)
例如,使用postUpdate和PHP的usleep()可以帮助解决问题。
/**
* @ORM\PostUpdate
*
* @return void
*/
public function awaitReplication() : void
{
usleep(200);
}