Puede especificar zonas y reglas de zonas con el archivo XML de descriptor de política de despliegue.
Este ejemplo coloca los fragmentos primarios en una zona, y los fragmentos de réplica en una zona distinta, con una única réplica asíncrona. Todos los fragmentos primarios se inician en la zona DC1. Los fragmentos de réplica se inician en la zona 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>
Se define una réplica asíncrona en el elemento de mapSet ms1. Por lo tanto, existen dos fragmentos en cada partición: un fragmento primario y una réplica asíncrona. En el elemento zoneMetadata, se define un elemento shardMapping para cada fragmento: P para el primario y DC1 para la réplica asíncrona. El atributo primaryRule define la zona establecida para los fragmentos primarios, que es solo la zona DC1, y esta regla se utilizará para la colocación de fragmentos primarios. Las réplicas asíncronas se colocan en la zona DC2.
Si embargo, si se pierde la zona DC2, los fragmentos de réplica dejarán de estar disponibles. La pérdida o anomalía de un servidor de contenedor en la zona DC1 puede producir pérdida de datos, aunque se haya especificado una réplica.
Para tratar esta posibilidad, puede añadir una zona o añadir una réplica, tal como se describe en las secciones siguientes.
El código siguiente configura una nueva zona:
<?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>
Se han definido tres zonas en total en este código: A, B y C. En lugar de reglas de zona de primario y de réplica distintas, se define una regla de zona compartida denominada stripeRule. Esta regla incluye todas las zonas, con el atributo exclusivePlacement establecido en true. La política de colocación de eXtreme Scale garantiza que los fragmentos primario y de réplica se encuentran en zonas distintas. Esta escritura en bandas de la colocación hace que los fragmentos primario y de réplica se distribuyan entre ambas zonas para adecuarse a esta política. La adición de una tercera zona C garantiza que la pérdida de cualquiera de las zonas no producirá pérdida de datos, y sigue dejando los fragmentos primario y de réplica para cada partición. Una anomalía de zona produce pérdida del fragmento primario, del fragmento de réplica, o de ninguno de ellos. Cualquier fragmento perdido se sustituye desde el fragmento superviviente en una zona superviviente, colocándolo en la otra zona superviviente.
El clásico escenario de dos centros de datos tiene redes de baja latencia y alta velocidad en cada centro de datos, pero alta latencia entre los centros de datos. Las réplicas síncronas se utilizan en cada centro de datos donde la baja latencia minimiza el impacto de la réplica en los tiempos de respuesta. Se utiliza la réplica asíncrona entre los centros de datos, de forma que la red de latencia alta no tiene ningún impacto en el tiempo de respuesta.
<?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>
La réplica primaria y la réplica síncrona comparten la regla primarySync con un valor de atributo exclusivePlacement de false. El atributo exclusivePlacement establecido en false crea una configuración con los fragmentos de réplica primaria y síncrona de cada partición colocada en la misma zona. El fragmento de réplica asíncrona utiliza una segunda regla de zona con básicamente las mismas zonas que la regla de zona primarySync. Sin embargo, la réplica asíncrona utiliza el atributo exclusivePlacement establecido en true. El atributo exclusivePlacement, cuando se establece en true, indica que un fragmento no se puede colocar en una zona con otro fragmento de la misma partición. Como resultado, el fragmento de réplica asíncrona no se coloca en la misma zona que el fragmento de réplica primaria o síncrona. Hay tres fragmentos por partición en esta mapSet: una réplica primaria, y una réplica síncrona y asíncrona, de forma que hay tres elementos shardMapping, uno para cada fragmento.
Si se pierde una zona, las réplicas asíncronas se perderán, y no se volverán a generar, ya que no tienen ninguna zona aparte. Si se pierden los fragmentos primario y de réplica, la réplica asíncrona superviviente pasará a ser la primaria, y se creará una nueva réplica síncrona en la zona. Los primarios y las réplicas se fragmentan en cada zona.
Con la colocación exclusiva, cada fragmento tiene su propia zona: debe tener suficientes zonas para todos los fragmentos que desea colocar en sus propias zonas. Si una regla tiene una zona, solo se puede colocar un único fragmento en la zona. Con dos zonas, puede tener hasta dos fragmentos en la zona.
El código siguiente configura una nueva zona:
<?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>