2008-09-22 3 views
7

Я оцениваю Terracotta, чтобы помочь мне масштабировать приложение, которое в настоящее время ограничено RAM. Это совместный фильтр и хранит около 2 килобайт данных для каждого пользователя. Я хочу использовать EC2 от Amazon, что означает, что я ограничен 14 ГБ оперативной памяти, что дает мне эффективную верхнюю границу на уровне около 7 миллионов пользователей. Мне нужно уметь масштабироваться дальше этого.Могу ли я использовать Terracotta для масштабирования приложения, интенсивно использующего RAM?

Основываясь на моем чтении до сих пор, я понимаю, что Terracotta может иметь кластерную кучу, большую, чем доступная оперативная память на каждом сервере. Было бы целесообразно иметь эффективную кластерную кучу размером 30 ГБ или больше, где каждый из серверов поддерживает только 14 ГБ?

Данные для каждого пользователя (основная масса которых представляют собой массивы поплавков) изменяются очень часто, потенциально сотни тысяч раз в минуту. Для каждого отдельного из этих изменений не требуется синхронизация с другими узлами в кластере в момент их возникновения. Возможно ли периодически периодически синхронизировать некоторые поля объектов?

+0

Скользкий кластер redis может быть более простым, может ли это работать в этом сценарии? – cobbzilla 2016-07-28 23:59:00

ответ

4

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

Вам все равно нужно иметь в виду: a) размер рабочего набора и b) объем трафика данных. Для a) существует некоторый набор данных, которые должны быть в памяти для выполнения работы в любой момент времени, и если этот размер рабочего набора> размер кучи, производительность, очевидно, пострадает. Для b) каждая часть данных, добавленных/обновленных в кластерной куче, должна быть отправлена ​​на сервер. Terracotta лучше всего, когда вы изменяете мелкозернистые поля в графах pojo. Работа с большими массивами не приносит максимальных преимуществ возможностей Terracotta (что не означает, что люди иногда не используют его так).

Если вы создаете много мусора, то менеджеры памяти Terracotta и распределенный сборщик мусора должны быть в состоянии идти в ногу с этим. Трудно сказать, не пытаясь определить, превышают ли ваши объемы данных доступную пропускную способность.

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

С точки зрения чисел, можно индексировать 30 ГБ данных, так что это не близко к жесткому пределу.

+0

Быстрое наблюдение: я слышал, что если вы используете HashMap с Terracotta, тогда значения могут быть распределены, но ключи будут зеркально отображаться повсюду. Это правда? Будет ли другая коллекция карт вести себя по-другому? – sanity 2008-09-22 23:16:50

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