Domanda

Sto valutando Terracotta per aiutarmi a scalare un'applicazione che è attualmente limitata dalla RAM. È un filtro collaborativo e memorizza circa 2 kilobyte di dati per utente. Voglio usare Amazon EC2, il che significa che sono limitato a 14 GB di RAM, il che mi dà un limite superiore per server effettivo di circa 7 milioni di utenti. Devo essere in grado di scalare oltre questo.

Sulla base della mia lettura finora, ritengo che Terracotta possa avere un heap cluster più grande della RAM disponibile su ciascun server. Sarebbe possibile avere un heap cluster efficace di almeno 30 GB, in cui ciascuno dei server supporta solo 14 GB?

I dati per utente (la maggior parte dei quali sono matrici di float) cambia molto frequentemente, potenzialmente centinaia di migliaia di volte al minuto. Non è necessario che ciascuna di queste modifiche sia sincronizzata con altri nodi nel cluster nel momento in cui si verificano. È possibile sincronizzare periodicamente solo alcuni campi oggetto?

È stato utile?

Soluzione

Direi che la risposta è un sì qualificato per questo. Terracotta ti consente di lavorare con cumuli di cluster più grandi delle dimensioni di una singola JVM, sebbene non sia il caso d'uso più comune.

Devi ancora tenere a mente a) le dimensioni del set di lavoro eb) la quantità di traffico di dati. Per a), ci sono alcuni set di dati che devono essere in memoria per eseguire il lavoro in un dato momento e se quella dimensione del set di lavoro > heap size, le prestazioni ovviamente ne risentiranno. Per b), ogni pezzo di dati aggiunto / aggiornato nell'heap cluster deve essere inviato al server. La terracotta è la migliore quando si cambiano campi a grana fine in grafici a pojo. Lavorare con array di grandi dimensioni non sfrutta al meglio le capacità di Terracotta (il che non vuol dire che le persone a volte non lo usano in questo modo).

Se stai creando molta spazzatura, i gestori di memoria di Terracotta e il garbage collector distribuito devono essere in grado di tenere il passo. È difficile dire senza provare se i volumi di dati superano la larghezza di banda disponibile lì.

La tua applicazione trarrà enormi vantaggi se esegui più server e i dati sono partizionati dal server o hanno una certa quantità di località di riferimento. In tal caso, sono necessari solo i dati per la partizione di un server nell'heap e il resto non deve essere danneggiato nella memoria. Ovviamente sarà difettoso se necessario per failover / disponibilità se altri server non funzionano. Ciò significa che nel caso di dati partizionati, non si sta trasmettendo a tutti i nodi, ma solo inviando transazioni al server.

Dal punto di vista dei numeri, è possibile indicizzare 30 GB di dati, quindi non è vicino ad alcun limite rigido.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top