Fem*_*efa 5 database postgresql load-balancing laravel
我已经搜索了几周但找不到答案,所以我决定询问。
我注意到我的网站上有一个奇怪的行为(技术:laravel 和 pgSLQ)。我使用主从亚马逊 RDS 设置。Laravel 设置为将读取查询发送到从节点,并将写入查询发送到主节点。不幸的是,当执行行锁(lockforupdate)时,其他线程似乎能够读取该行。当我返回到单服务器设置时,这种行为消失了(意味着锁可以工作)。我也怀疑这是 Laravel 的问题,因为这在同样具有相同读/写架构的 MySQL 上运行的第二个 Laravel 站点上不是问题。所以我认为我的问题是:
根据亚马逊文档:
此只读副本(PostgreSQL 术语中的“备用”)数据库实例是 主数据库实例的异步创建的物理复制。它是由一个特殊连接创建的,该连接在源数据库实例和只读副本之间传输预写日志 (WAL) 数据,其中 PostgreSQL 在数据库更改发生时异步流式传输。
(强调我的)
和:
如果源数据库实例上没有发生用户事务,PostgreSQL 只读副本会报告最多五分钟的复制延迟。
这些只读副本不会拥有当前事务的行锁。这对于很多用例(例如报告系统)来说非常有用,但显然不适合您的用例。
最简单的解决方案是将需要锁定的查询指向主服务器。我没有在 RDS 上同步复制 Postgres 的经验(如果该功能可用的话)。
同样来自Postgres 文档:
因此,在主数据库和备用数据库上几乎同时运行相同的查询可能会返回不同的结果。我们说备用数据库上的数据最终与主数据库保持一致。