Exemple : Définitions de zone dans le fichier XML de descripteur de stratégie de déploiement

Vous pouvez définir des zones et des règles de zone avec le fichier XML du descripteur de stratégie de déploiement.

Exemple : fragments primaires et de réplique dans des zones différentes

Cet exemple place les fragments primaires dans une zone donnée et les fragments de réplique dans une zone différente avec une seule réplique asynchrone. Tous les fragments primaires commencent dans la zone DC1. Les fragments de réplique commencent dans la zone DC2.

<?xml version="1.0" encoding="UTF-8"?>
<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy
	../deploymentPolicy.xsd"	xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
 <objectgridDeployment objectgridName="library">
	<mapSet name="ms1" numberOfPartitions="13" minSyncReplicas="0"
		maxSyncReplicas="0" maxAsyncReplicas="1">
		<map ref="book" />
		<zoneMetadata>
				<shardMapping shard="P" zoneRuleRef="primaryRule"/>
				<shardMapping shard="A" zoneRuleRef="replicaRule"/>
				<zoneRule name ="primaryRule">
					<zone name="DC1" />
				</zoneRule>
				<zoneRule name="replicaRule">
				</zoneRule>
		</zoneMetadata>
 	</mapSet>
  </objectgridDeployment>
 </deploymentPolicy>

Une réplique asynchrone est définie dans l'élément ms1 mapSet. Par conséquent, deux fragments existent pour chaque partition : un fragment primaire et un fragment de réplique asynchrone. Dans l'élément zoneMetadata, un élément shardMapping est défini pour chaque fragment: P pour le fragment primaire et DC1 pour le fragment de réplique asynchrone. L'attribut primaryRule spécifie la zone définie des fragments primaires, la zone DC1 simplement, et cette règle doit être utilisée pour le placement des fragments primaires. Les répliques asynchrones sont placées dans la zone DC2.

Toutefois, si la zone DC2 est perdue, les fragments de réplique deviennent indisponibles. La perte ou la défaillance d'un serveur de conteneur dans la zone DC1 peut générer une perte de données, même si une réplique a été spécifiée.

Pour faire face à cette éventualité, vous pouvez ajouter une zone ou une réplique, comme décrit dans les sections suivantes.

Exemple : ajout d'une zone, segmentation des fragments

Le code suivant configure une nouvelle zone :

<?xml version="1.0" encoding="UTF-8"?>
<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy
	../deploymentPolicy.xsd" xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
 	<objectgridDeployment objectgridName="library">
		<mapSet name="ms1" numberOfPartitions="13" minSyncReplicas="0"
			maxSyncReplicas="0" maxAsyncReplicas="1">
 				<map ref="book" />
 				<zoneMetadata>
 					<shardMapping shard="P" zoneRuleRef="stripeRule"/>
				 	<shardMapping shard="A" zoneRuleRef="stripeRule"/>
				 	<zoneRule name="stripeRule" exclusivePlacement="true">
					 	<zone name="A" />
					 	<zone name="B" />
						<zone name="C" />
 					</zoneRule>
				</zoneMetadata>
 		</mapSet>
	</objectgridDeployment>
</deploymentPolicy>

Trois zones ont été définies dans ce code : A, B et C. Une règle de zone partagée, stripeRule, est définie à la place de règles de zone de fragments primaires et de fragments de réplique distinctes. Cette règle inclut toutes les zones, avec l'attribut exclusivePlacement affecté de la valeur true. La stratégie de placement eXtreme Scale garantit que les fragments primaires et de réplique se trouvent dans des zones distinctes. Avec cette segmentation du placement, les fragments primaires et de réplique sont répartis dans les deux zones conformément à la stratégie. L'ajout d'une troisième zone C permet de ne pas générer une perte de données en cas de perte d'une zone et de conserver les fragments primaire et de réplique de chaque partition. Un problème de zone entraîne la perte du fragment primaire, du fragment de réplique ou d'aucun fragment. Tout fragment perdu est remplacé à partir du fragment survivant dans une zone survivante et il est placé dans l'autres zone survivante.

Exemple : ajout d'une réplique et définition de plusieurs centres de données

Le scénario classique à deux centres de données utilise des réseaux haut débit à faible latence dans chaque centre de données, mais la latence entre les deux centres de données est élevée. Des répliques synchrones sont utilisées dans chaque centre de données où la faible latence réduit l'impact de la réplication sur les temps de réponse. La réplication asynchrone est utilisée entre les centres de données, de sorte que le réseau dont la latence est élevée n'a aucune incidence sur le temps de réponse.

<?xml version="1.0" encoding="UTF-8"?>
 <deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy
	../deploymentPolicy.xsd" xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
	<objectgridDeployment objectgridName="library">
 		<mapSet name="ms1" numberOfPartitions="13" minSyncReplicas="1"
			maxSyncReplicas="1" maxAsyncReplicas="1">
		 	<map ref="book" />
		 	<zoneMetadata>
			 	<shardMapping shard="P" zoneRuleRef="primarySync"/>
			 	<shardMapping shard="S" zoneRuleRef="primarySync"/>
			 	<shardMapping shard="A" zoneRuleRef="async"/>
				<zoneRule name ="primarySync" exclusivePlacement="false" >
				 	<zone name="DC1" />
 					<zone name="DC2" />
			 	</zoneRule>
			 	<zoneRule name="async" exclusivePlacement="true">
					<zone name="DC1" />
				 	<zone name="DC2" />
			 	</zoneRule>
			</zoneMetadata>
		</mapSet>
  </objectgridDeployment>
 </deploymentPolicy>

Les fragments primaires et les fragments de réplique synchrones partagent la règle primarySync avec l'attribut exclusivePlacement affecté de la valeur false. L'attribut exclusivePlacement affecté de la valeur false crée une configuration avec les fragments primaires et de réplique synchrone de chaque partition placée dans la même zone. Le fragment de réplique asynchrone utilise une deuxième règle de zone avec principalement les mêmes zones que la règle de zone primarySyn. Toutefois, le fragment de réplique asynchrone utilise l'attribut exclusivePlacement affecté de la valeur true. L'attribut exclusivePlacement, lorsqu'il a la valeur true, signifie qu'un fragment ne peut pas être placé dans une zone contenant un fragment issu d'une même partition. En conséquence, le fragment de réplique asynchrone n'est pas placé dans la même zone que le fragment primaire ou de réplique synchrone. Il existe trois fragments par partition dans ce mapSet : un fragment primaire, un fragment de réplique synchrone et un fragment de réplique asynchrone, de sorte qu'il existe trois éléments shardMapping, un pour chaque fragment.

Si une zone est perdue, tous les fragments de réplique asynchrones sont perdus et non régénérés, car ils n'ont pas de zone distinctes. Si les fragments primaire et de réplique sont perdus, le fragment de réplique asynchrone restante devient le fragment primaire et un nouveau fragment de réplique synchrone est créé dans la zone. Les fragments primaires et de réplique sont segmentés dans chaque zone.

Avec le placement exclusif, chaque fragment a sa propre zone ; vous devez avoir suffisamment de zones pour tous les fragments à placer dans leurs propres zones. Si une règle a une zone, un seul fragment peut être placé dans la zone. Avec deux zones, vous pouvez disposer de deux segments dans la zone.

Exemple : zones dans un environnement WebSphere Application Server

Le code suivant configure une nouvelle zone :

<?xml version="1.0" encoding="UTF-8"?>
<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy
	../deploymentPolicy.xsd" xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
 	<objectgridDeployment objectgridName="library">
		<mapSet name="ms1" numberOfPartitions="13" minSyncReplicas="0"
			maxSyncReplicas="0" maxAsyncReplicas="1">
 				<map ref="book" />
 				<zoneMetadata>
 					<shardMapping shard="P" zoneRuleRef="stripeRule"/>
				 	<shardMapping shard="A" zoneRuleRef="stripeRule"/>
				 	<zoneRule name="stripeRule" exclusivePlacement="true">
						<zone name="ReplicationZoneA" />
					 	<zone name="ReplicationZoneB" />
						<zone name="ReplicationZoneC" />
 					</zoneRule>
				</zoneMetadata>
 		</mapSet>
	</objectgridDeployment>
</deploymentPolicy>
Pour cet exemple, trois groupes de noeuds sont définis dans l'environnement WebSphere Application Server : ReplicationZoneA, ReplicationZoneB, and ReplicationZoneC. Le nom du groupe de noeuds et le nom de zone dans le fichier XML du descripteur de la stratégie de déploiement doit être identique et contenir le texte ReplicationZone<identifier>. Ce fichier définit une configuration similaire à la segmentation des fragments (par exemple, mais indique le nom requis pour une configuration WebSphere Application Server.