31 votes

Réplication de tas JVM entre deux machines

Quels sont les principes de base de la façon dont deux ordinateurs séparables connectés au sein du même réseau exécutant la même application Java conservent le même état en synchronisant leur tas entre eux?

Je crois que Terracotta fait cette tâche, mais je n'ai aucune idée à quoi ressemblerait un pseudo-code qui décrirait ses fonctions principales.

Je cherche juste à comprendre cette technologie.

12voto

Alex Miller Points 28225

Terre cuite ASM œuvres en manipulant le code octet de vos classes (et le JDK de classes, etc). Les instructions sur comment et quand le faire de cette partie de la terre Cuite au fichier de configuration.

Le pseudo-code de modification regarde certains octets de codes comme un champ de lecture ou d'écriture ou d'un moniteur d'entrer ou de sortir. Chaque fois que ces instructions se produire, le code est ajouté autour de cet emplacement que l'action appropriée dans le distribuées de mémoire. Par exemple, lorsqu'un moniteur est obtenu grâce à la synchronisation, un distribué verrouillage est obtenu ainsi (que ce soit en lecture ou en écriture verrouillage dépend de la configuration). Si un champ dans un objet partagé est écrit, le système distribué doit vérifier qu'un verrou d'écriture et ensuite envoyer la valeur de données est envoyé au serveur en cluster, qui les stocke sur le disque ou le partage sur le réseau approprié.

Notez que la terre Cuite ne partage pas l' ensemble du segment de mémoire, seul le graphe d'objets indiqué par la configuration. En général, il n'y aurait que peu de sens dans le partage de tout un tas. C'est mieux au lieu de l'application pour décrire le domaine des objets nécessaires dans l'application distribuée.

Il existe de nombreuses optimisations utilisé pour rendre les opérations ci-dessus efficace: seul champ deltas sont envoyés sur le réseau et dans une forme beaucoup plus efficace que la sérialisation Java, de nombreux deltas peuvent être regroupés et envoyés dans les lots, les verrous sont en fait des "check-out" pour un client en particulier, de sorte que si l'application de partitionnement des données sur l'ensemble des clients, la plupart des distribué des verrous sont en fait une opération locale, n'impliquant pas un appel du réseau, etc.

6voto

Bozho Points 273663

La terre cuite peut en effet gérer cela si vous le lui demandez - voir la description de son DSO - Objets partagés distribués.

Cela semble cool mais je préférerais quelque chose comme EHcache (peut être soutenu par Terracotta à nouveau) qui fonctionne un peu plus haut niveau.

4voto

João Fernandes Points 693

Une technologie émergente qui résout ce problème est la mémoire transactionnelle logicielle distribuée. Vous bénéficiez de solides garanties de cohérence des données (c.-à-d. Sérialisation 1 copie) et d'un puissant mécanisme de contrôle d'accès concurrent: les transactions.

AFAIK, il n'y a pas de solution mature, mais c'est prometteur.

1voto

Justin Points 1781

Je vous recommanderais d'enquêter sur http://www.jboss.org/infinispan et de voir si cela répondra à vos besoins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X