我的应用程序设置在3个地区(EU, AP, US)和主MySQL RDS驻留在EU -west-1,读取副本在其他地区。
这对于读查询非常有效,特定区域的应用程序连接到它的本地读副本RDS非常快,但是当我的应用程序需要执行写查询时,它必须连接到eu-west-1的主DB。
当从US或AP写入主DB时,延迟很大,通常需要2.5s左右才能完成插入。
我一直在努力寻找关于如何克服这个问题的任何信息,Aurora在论坛和全球数据库教程中出现了很多,但它需要复制实例类型,使用db。R5是最小的,当运行多个实例时,它很快就会变得非常昂贵。
有人遇到过跨区域写主数据库缓慢的问题吗?VPC对等是否有助于加快这一速度?
对于跨区域查询,您无法克服延迟,因为存在称为光速的限制。你必须通过限制所需的往返次数来解决这个问题。
您可以例如:
- 使用批量插入(使用
insert … values (…), (…), …
在单个语句中插入多行); - 使用批量更新(使用
do $$ begin update …; update …; update …; …, end; $$;
在单个语句中更新多行-这可能有点棘手正确引用; - 禁用准备语句或在连接时准备它们;
- 使用keepalive保持打开的连接;
- 避免同步待机(
synchronous_standby_names
)。