2016-04-28 3 views
1

У нас есть сервис, который работает в 6 AWS регионов и у нас есть некоторые предпосылки, которые должны быть выполнены:AWS чтения реплики архитектуры

  • Латентность запросов к базе данных должна быть очень низким
  • It поддержки высокая пропускная способность запросов
  • Было замечено, что процесс обновления базы данных имеет интенсивность ввода-вывода, поэтому увеличивается время ожидания запросов из-за блокировки db.
  • Задержки в порядке секунд приемлема между обновлением и читать

Архитектуры, что мы обсуждали имели одну услуги, которая обновляет мастер-БД и один ведомый в каждом регионе (всего 6 рабов).

Мы нашли некоторые проблемы и возможные решения с тем, что:

  1. Существует ограничение 5 реплик для чтения с помощью AWS инфраструктуры.

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

  1. В AWS существует ограничение на то, что вы не можете создать прочитанную реплику прочитанной реплики из другого региона.

Для решения этой проблемы мы, тем не менее, внутри приложения, обновляем 2 основные базы данных.

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

В реализации сервиса мы всегда можем воссоздать данные. Таким образом, есть работа, которая повторно обновляет данные от времени до времени (это одна из причин того, что обновление интенсивно в IO).

У кого-то есть аналогичная проблема? Как вы справляетесь с этим? Можем ли мы избежать создания и поддержания баз данных самим?

Мы используем MySQL, но мы довольно открыты для использования других совместимых БД.

ответ

2

К сожалению, нет волшебного решения, когда дело доходит до межрегиона: вы теряете латентность.

Я думаю, что вы изучили почти все решения с точки зрения RDS с тем, что вы предлагаете, например, прочитайте реплику прочитанной реплики (я подтверждаю, что вы не можете сделать это из другого региона, но это должно спасти вас от слишком высокая реплика-лаг).

Другим решением будет создание баз данных на экземплярах EC2, но вы потеряете все преимущества RDS (вы можете защитить этот трафик с межобластным vpn между vpcs). Однако важно иметь в виду, что слишком много прочитанных реплик повлияют на ваши выступления.

Мои советы в вашем случае будет:

  • массово использовать кэш на всевозможных уровнях: elasticache между БД и серверов, лак для HTTP-страниц, CloudFront для доставки контента. Если вы хотите так много прочитанных реплик, это означает, что вы сильно зависите от чтения. Таким образом, вы сэкономите много чтений от попадания в вашу базу данных и значительно увеличьте задержку, и, возможно, будет достаточно 5 прочитанных реплик.
  • Рассматривать очертание или использование нескольких баз данных. Это не всегда является хорошим решением, однако, в зависимости от случая использования ...
+1

1 для кэширования; Я использовал эластичный кэш с redis, прост в использовании и отлично –

0

Вы можете запросить увеличение числа RDS для MySQL реплик для чтения с помощью формы на https://aws.amazon.com/contact-us/request-to-increase-the-amazon-rds-db-instance-limit/

Once предела была увеличена, вы хотите протестировать, чтобы убедиться, что производительность при наличии большого количества Read Replicas приемлема для вашего приложения.

Hal

Смежные вопросы