Могу ли я использовать Terracotta для масштабирования приложений, интенсивно использующих ОЗУ? - PullRequest
7 голосов
/ 23 сентября 2008

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

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

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

1 Ответ

4 голосов
/ 23 сентября 2008

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

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

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

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

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

...