Масштабирование MongoDB на EC2 или я должен просто переключиться на DynamoDB? - PullRequest
8 голосов
/ 20 февраля 2012

В настоящее время я запускаю свой сайт на одном сервере с MongoDB. На моем сервере у меня есть два компонента (1) сканер, который запускается ежечасно и добавляет данные в мой экземпляр MongoDB (2) веб-сайт, который читает из индекса сканера, а также пишет в базу данных персонализации пользователей. Я перехожу на Amazon EC2 для автоматического масштабирования, чтобы веб-сервер мог автоматически масштабироваться, поэтому я могу увеличивать количество серверов по мере увеличения веб-трафика. Мне не нужно автоматическое масштабирование для моего сканера. Это создает проблему для того, как я использую MongoDB. Мне интересно, что мой лучший вариант - оптимизировать на

  • Минимальные изменения в моем коде (код в Perl)
  • Возможность легко добавлять / удалять веб-серверы, не беспокоясь о потере данных в БД
  • Низкая стоимость

В краткосрочной перспективе БД, безусловно, сможет поместиться в памяти на всех машинах, поскольку она будет меньше 2 ГБ. База данных персонализации пользователя не может быть перестроена, поэтому ее важнее, а индекс можно легко перестроить. Текущий индекс сканирования MongoDB содержит около 100 тыс. Записей, которые имеют ключ в ~ 15 различных столбцах. Это сделано для скорости, так как я работаю над сайтом онлайн-знакомств (который можно искать разными способами).

Я могу придумать несколько вариантов

  1. Используйте SimpleDB для хранилища персонализации пользователей и MongoDB для индекса. Имейте копию индекса на всех машинах, однако я не знаю слишком много о репликации MongoDB.
  2. Переместить все в SimpleDB
  3. Переместить все в DynamoDB

Я не слишком много знаю о SimpleDB и / или DynamoDB. Судя по статьям, кажется, что DynamoDB будет естественным выбором, но я не уверен в хорошей поддержке perl, могу ли я иметь все столбцы, индексы и т. Д. У кого-нибудь есть опыт или есть какой-нибудь совет?

Ответы [ 4 ]

3 голосов
/ 20 февраля 2012

В настоящее время я запускаю свой веб-сайт на одном сервере с MongoDB.

Во-первых, это большой красный флаг. При работе в рабочей среде всегда рекомендуется запускать набор реплик как минимум с тремя полными узлами.

Репликация обеспечивает автоматическое резервирование и отработку отказа.

Возможность легко добавлять / удалять веб-серверы, не беспокоясь о потере данных в БД

MongoDB поддерживает концепцию, называемую sharding . Sharding предоставляет возможность горизонтального масштабирования путем автоматического разделения данных. Разбиение осуществляется с помощью ключа шарда .

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

Текущий индекс сканирования MongoDB содержит около 100 тыс. Записей, которые связаны с ~ 15 различными столбцами.

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

У вас есть 15 различных индексов, поэтому в основном все эти запросы будут передаваться всем осколкам. Это не очень хорошо "автоматически масштабируется".

3 голосов
/ 20 февраля 2012

Вы можете разместить Mongo на одном сервере в EC2, к которому подключен каждый из блоков веб-фермы. Затем вы можете легко раскрутить другой веб-экземпляр, который использует тот же блок БД.

В настоящее время у нас есть три сервера Mongo, так как мы запускаем набор реплик, и когда мы доберемся до точки, где нам нужно масштабировать горизонтально с Mongo, мы раскроем несколько новых экземпляров и осколим большие коллекции.

1 голос
/ 29 февраля 2012

У меня был очень плохой опыт работы с SimpleDB, и я думаю, что он в корне ошибочен, поэтому я бы его избегал.

Три - хороший документ о том, как настроить MongoDB в Amazon EC2: http://d36cz9buwru1tt.cloudfront.net/AWS_NoSQL_MongoDB.pdf

Я подозреваю, что установка MongoDB на EC2 - это самое быстрое решение по сравнению с перезаписью / миграцией на DynamoDB.

Удачи!

1 голос
/ 21 февраля 2012

Помните, что в настоящий момент в EC2 нет 64-битных небольших экземпляров, что делает репликацию потенциально дорогостоящей. Поскольку файлы карт памяти MongoDB, 32-разрядная ОС не рекомендуется.

...