2013-11-07 5 views
3

Я использую Infinispan в Распределенный режим Async с 4 узлами на 4 различных системах. Каждый узел работает с 3 ГБ размера кучи.Infinispan кластер не может связаться в случае огромных данных

Только один узел играет роль загрузчика и пытается загрузить 50 миллионов записей в кусках (в цикле, где 5 миллионов записей переходят в кеш-память в 10 раз). Согласно моим расчетам, 4 узла могут обрабатывать большую часть данных, поэтому пространство не является проблемой.

Когда я запускаю все 4 узла, кластерные формы успешно и данные начинают загружаться в кеш. Но так как эти данные очень огромный, через некоторое время любой один узел не может получить ответ от другого одного узла и не с ниже исключением:

2013-11-01 05:35:14 ERROR org.infinispan.interceptors.InvocationContextInterceptor  - ISPN000136: Execution error 
org.infinispan.util.concurrent.TimeoutException: Timed out after 15 seconds waiting for a response from INUMUU410-54463 
at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.processCalls(CommandAwareRpcDispatcher.java:459) 
at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.invokeRemoteCommands(CommandAwareRpcDispatcher.java:154) 
at org.infinispan.remoting.transport.jgroups.JGroupsTransport.invokeRemotely(JGroupsTransport.java:534) 

INUMUU410-54463 это имя машины.

+0

Я не получаю «куски» - так, это на самом деле 10 ставок огромных значений или 50 М ставок небольших значений? Также укажите, какую версию Infinispan вы используете. –

+0

Я использую Infinispan 5.3.0. Chunks означает, что я запрашиваю 10 миллионов записей из базы данных и делаю cache.putAll(). И я делаю это 10 раз. Поэтому я хочу загрузить 50 миллионов записей в кеш. –

+0

Я думаю, нам понадобятся журналы уровня TRACE на пакете org.jgroups.protocols здесь - я не могу сказать в этот момент, когда материал застревает. Но наличие 5M записей в одной команде - это не очень хорошая идея. Это означает, что действительно огромные сообщения JGroups, и поскольку они отправляются параллельно (в асинхронном режиме скорость передачи не дросселируется) => они должны быть в памяти, может быть, даже несколько раз (до/после сортировки). Более того, putAll-маршрутизация не очень умна (это довольно глупо!) - на самом деле она отправляет команду всем узлам в этом случае, а затем каждый узел отправляет ее всем остальным узлам. –

ответ

1

(копируется из Flavius комментарий выше :)

То, что я хотел бы сделать в вашем случае, чтобы разбить его таким образом, что один putAll не содержит больше, чем, например, 1 Мбайт данных, а затем отправить их синхронно (используя cache.getAdvancedCache(). WithFlags (FORCE_SYNCHRONOUS)). Или иначе дросселируйте количество сообщений, которые находятся в эфире одновременно (см. Также метод putAllAsync в расширенном кеше).

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

  • Нет связанных вопросов^_^