Терракотовая производительность и советы - PullRequest
9 голосов
/ 25 апреля 2009

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

В основном то, что я пытаюсь сделать:

Мой корень (система записи) - это ConcurrentHashMap.

Основным инструментированным классом является JavaBean с примерно 30 полями, которые я хочу существовать в HashMap.

В Hashmap будет около 20000 таких JavaBean-компонентов.

Каждый компонент имеет (как минимум) 5 полей, которые будут обновляться каждые 5 секунд.

(Причина, по которой я использую Terracotta для этого, заключается в том, что эти JavaBeans должны быть доступны через JVM и узлы.)

Кто-нибудь с большим опытом, чем у меня с ТС, есть какие-нибудь советы? Производительность имеет ключевое значение.

Какие-нибудь примеры других подобных приложений?

Ответы [ 2 ]

7 голосов
/ 25 апреля 2009

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

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

Хорошие предложения unnutz по использованию CHM или CSM. CHM обеспечивает больший параллелизм (поскольку каждый внутренний сегмент может быть заблокирован и использоваться одновременно) - обязательно поэкспериментируйте с большим количеством сегментов. CSM имеет фактически одну блокировку для каждой записи, поэтому фактически имеет N разделов в таблице размера N. Это может значительно снизить конкуренцию за блокировку (за счет управления большим количеством объектов внутренней блокировки). Изменения, которые скоро появятся в CSM, значительно снизят стоимость блокировки.

Как правило, мы находим хорошую стратегию:

  1. Создайте тест производительности (должен быть многопоточным и многоузловым, похожим на ваше приложение (или ваше реальное приложение!)
  2. Настройте объекты - посмотрите на свой кластеризованный граф объектов в консоли разработчика, чтобы найти объекты, которые вообще не нужно кластеризовать - иногда это происходит случайно (удалите или обрежьте кластер с помощью переходного поля). Иногда вы можете кластеризовать Date, где будет делать long. Небольшое изменение, но это один объект на карту, и это может иметь значение.
  3. Настройка блокировок - используйте профилировщик блокировок в консоли разработчика, чтобы найти горячие блокировки или блокировки, которые слишком узкие или слишком широкие. Регистратор кластерной статистики также может помочь в анализе размера транзакции.
  4. Настройте GC и DGC - настройте сборку мусора JVM, затем настройте распределенный GC Terracotta, включив изменение частоты молодого поколения gc.
  5. Tune TC server - здесь очень много подробных настроек, но обычно они того не стоят, пока не настроены все вышеперечисленные.

Не стесняйтесь спрашивать на Терракотовых форумах , а также - все о инжиниринге, полевом инжиниринге, продукции mgmt смотрите их и отвечайте там.

3 голосов
/ 25 апреля 2009

Во-первых, я бы посоветовал вам поднять этот вопрос и на их форумах.

Во-вторых, на самом деле производительность вашего приложения, кластеризованного на Terracotta, будет зависеть от количества транзакций записи. Поэтому вы можете рассмотреть возможность использования ConcurrentStringMap (если ваши ключи являются строками) или ConcurrentHashMap. Обратите внимание, что CSM намного лучше, чем CHM с точки зрения производительности.

В конце концов, POJO загружаются лениво. Это означает, что каждое свойство загружается по требованию.

Надеюсь, это поможет.

Приветствия

...