Рейтинг:0

Задержка главной БД с межрегиональной репликацией AWS RDS

флаг mg

У меня установлено приложение в 3 регионах (ЕС, AP, США), а мастер MySQL RDS находится в eu-west-1 с репликами чтения в других регионах.

Это отлично работает для запросов на чтение, когда приложение для конкретного региона очень быстро подключается к своей локальной реплике чтения RDS, но когда моему приложению необходимо выполнить запрос на запись, оно должно подключаться к главной БД в eu-west-1.

При записи в основную БД из США или AP задержка огромна, обычно для завершения вставки требуется около 2,5 с.

Я действительно изо всех сил пытался найти какую-либо информацию о том, как преодолеть это, Aurora часто появляется на форумах и в руководствах по глобальным базам данных, но для этого требуется репликация типа экземпляра с минимумом db.r5, который вскоре становится очень дорого при запуске нескольких экземпляров.

Кто-нибудь сталкивался с этой проблемой с медленной межрегиональной записью в главную БД? Поможет ли пиринг VPC ускорить это?

Wilson Hauck avatar
флаг jp
Что является результатом SELECT @@binlog_format; ? Какой у вас тип экземпляра? Во всех регионах одинаково? Что является результатом SELECT @@version; ?
Рейтинг:0
флаг gp
Tim

Это не полный ответ, а некоторые мысли, которые нужно попробовать, и вопросы, которые не помещаются в поле для комментариев. Пожалуйста, постарайтесь сопротивляться желанию поставить минус :)

Пиринг VPC определенно стоит того, чтобы его попробовать. трафик остается на магистрали AWS что должно немного уменьшить задержку. Я не знаю, насколько это поможет. Эти три области находятся на расстоянии 200-300 мс друг от друга, поэтому у вас всегда будут задержки.

Я подозреваю, что разговор между клиентом и БД представляет собой несколько запросов на одну вставку - например, создать соединение, подключиться к определенной БД, вставить, зафиксировать, закрыть. Если это так, уменьшение задержки помогает, но более важно исключить некоторые шаги. Используете ли вы пул соединений, чтобы соединения уже были открыты? Я подозреваю, что пиринг VPC и общая оптимизация будут лучшим решением, чем любая из приведенных ниже идей.

Если бы вы могли сделать обновления асинхронными? Если вы можете поместить записи в очередь SQS, обрабатываемые в одном регионе, это, вероятно, будет сделано в течение секунды или двух. Это может быть оптимизация по сравнению с прямым подключением к базе данных, в зависимости от того, насколько быстро оно работает.

Multi-master — еще один вариант, использующий встроенные функции репликации базы данных. Я не совсем уверен, что вы можете сделать это в RDS, но, возможно, стоит посмотреть, возможно ли это, и преимущества/недостатки. Если вы ожидаете, что люди будут обновлять одну и ту же запись одновременно, вам придется защищаться от этого.

Другим вариантом может быть сегментирование с данными конкретных пользователей в определенных базах данных. Это сделает логику вашего приложения более сложной.

флаг mg
Большое спасибо @Tim, здесь есть несколько хороших советов, чтобы я мог больше исследовать ....

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.