Question

J'évalue Terracotta pour m'aider à développer une application actuellement limitée à la RAM. C'est un filtre collaboratif qui stocke environ 2 kilo-octets de données par utilisateur. Je souhaite utiliser l'EC2 d'Amazon, ce qui signifie que je suis limité à 14 Go de RAM, ce qui me donne une limite supérieure réelle par serveur d'environ 7 millions d'utilisateurs. Je dois pouvoir évoluer au-delà.

D'après mes lectures jusqu'à présent, je suppose que Terracotta peut avoir un tas en cluster plus volumineux que la RAM disponible sur chaque serveur. Serait-il viable d’avoir un tas efficace en cluster de 30 Go ou plus, où chacun des serveurs ne prend en charge que 14 Go?

Les données par utilisateur (dont la plupart sont des tableaux de flotteurs) changent très souvent, voire des centaines de milliers de fois par minute. Il n'est pas nécessaire que chacune de ces modifications soit synchronisée avec les autres nœuds du cluster au moment où elles se produisent. Est-il possible de ne synchroniser que périodiquement certains champs d'objet?

Était-ce utile?

La solution

Je dirais que la réponse est un oui qualifié pour cela. Terracotta vous permet de travailler avec des tas en cluster plus grands que la taille d’une seule machine virtuelle Java, bien que ce ne soit pas le cas d’utilisation le plus courant.

Vous devez toujours garder à l'esprit a) la taille du groupe de travail et b) la quantité de trafic de données. Pour a), un ensemble de données doit être en mémoire pour effectuer le travail à un moment donné et si cette taille de travail > taille du tas, les performances vont évidemment en souffrir. Pour b), chaque donnée ajoutée / mise à jour dans le tas en cluster doit être envoyée au serveur. La terre cuite est préférable lorsque vous modifiez des champs à grain fin dans des graphiques en pojo. Travailler avec de grandes baies ne tire pas le meilleur parti des capacités de Terracotta (cela ne veut pas dire que les gens ne l'utilisent pas de cette façon parfois).

Si vous créez beaucoup de déchets, les gestionnaires de mémoire Terracotta et le ramasse-miettes distribué doivent être en mesure de le suivre. Il est difficile de dire sans l'essayer si vos volumes de données dépassent la bande passante disponible.

Votre application bénéficiera énormément si vous utilisez plusieurs serveurs et que les données sont partitionnées par serveur ou possèdent une certaine localité de référence. Dans ce cas, vous n’avez besoin que des données pour la partition d’un serveur dans le segment de mémoire et le reste n’a pas besoin d’être affecté en mémoire. Il sera bien sûr mis en défaut si nécessaire pour le basculement / la disponibilité si d’autres serveurs tombent en panne. Cela signifie que dans le cas de données partitionnées, vous ne transmettez pas à tous les nœuds, vous n’envoyez que des transactions au serveur.

Du point de vue des chiffres, il est possible d’indexer 30 Go de données, ce qui n’est proche d’aucune limite absolue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top