Могу ли я использовать Terracotta для масштабирования приложения, интенсивно использующего оперативную память?

StackOverflow https://stackoverflow.com/questions/117455

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top