Configurar políticas de almacenamiento de mensajes

Si publicas mensajes en el punto final global de Pub/Sub, Pub/Sub los almacenará automáticamente en laGoogle Cloud región más cercana. Si quieres controlar las regiones en las que se almacenan y procesan tus mensajes, puedes configurar una política de almacenamiento de mensajes en tu tema.

Información general sobre la política de almacenamiento de mensajes

Puedes definir una política de almacenamiento de mensajes al crear un tema o al actualizarlo mediante la consola, la CLI de Google Cloud o las APIs REST.

La política de almacenamiento de mensajes solo se aplica al contenido de los mensajes. La política no se aplica a otros datos, como nombres de temas, etiquetas o ajustes de Gestión de Identidades y Accesos (IAM).

Pub/Sub almacena los mensajes cuando un cliente los publica en Pub/Sub. Una política de almacenamiento de mensajes asegura que Pub/Sub almacene y procese mensajes solo en el conjunto deGoogle Cloud regiones que especifiques, independientemente de dónde se originen las solicitudes de publicación o suscripción. Si la política permite varias regiones para las operaciones de publicación, Pub/Sub almacena el mensaje en una región permitida que esté lo más cerca posible de donde entra el mensaje publicado en la red Google Cloud .

Cuando especifiques una política de almacenamiento de mensajes, puedes definir el valor de enforceInTransit en True. Esta marca controla lo siguiente:

  • Las solicitudes de publicación, extracción y streamingPull recibidas en una región no permitida en la política de almacenamiento de mensajes se rechazan con un error FAILED_PRECONDITION.

  • La entrega de suscripciones push solo se gestiona en las regiones de Cloud permitidas. En algunos casos, esta restricción puede pausar por completo el envío de mensajes en las suscripciones push. Cuando una suscripción push entra en este estado porque las ubicaciones push están demasiado restringidas por una combinación de factores, como la ubicación de almacenamiento de mensajes, las regiones permitidas y la ubicación del recurso de exportación, este estado se hace visible en Stackdriver.

Políticas de almacenamiento de mensajes de temas nuevos

  • Si no especificas una política de almacenamiento de mensajes al crear un tema, se determinará automáticamente en función de la política de organización Restricción de ubicaciones de recursos vigente. Si no hay ninguna política de organización en vigor, la política de almacenamiento de mensajes permite usar todas las regiones.

  • Del mismo modo, si no se especifica ninguna política de almacenamiento de mensajes, la marca enforceInTransit se determina en función de la política de organización Enforce in-transit regions for Pub/Sub messages (Aplicar regiones de tránsito a los mensajes de Pub/Sub). Para obtener más información sobre esta política de organización, consulta Restricciones de la política de organización.

  • Si especificas una política de almacenamiento de mensajes al crear un tema, esta solo puede contener las regiones permitidas por la política de organización Restricción de ubicaciones de recursos vigente. Si no hay ninguna política de la organización en vigor, la política de almacenamiento de mensajes puede incluir cualquier región.

Políticas de almacenamiento de mensajes de temas

  • Cuando se actualiza una política de la organización, los cambios no se propagan automáticamente a los temas ya creados. Por lo tanto, la política de almacenamiento de mensajes de un tema puede dejar de estar sincronizada con la política de la organización más reciente. Para obtener más información, consulta Gestionar las diferencias entre las políticas de la organización y las de los temas.

  • Cuando se actualiza la política de almacenamiento de mensajes de un tema, los cambios no se propagan a los mensajes que ya se han publicado. Los mensajes que ya se hayan almacenado según una política anterior no se moverán para que se ajusten a la nueva política. Los cambios solo se aplican a los mensajes publicados después de la actualización.

Excepciones

Esta política especifica una lista de nombres de regiones Google Cloud permitidas. Por lo tanto, no se admiten los siguientes elementos:

  • Listas de exclusión
  • Zonas o ubicaciones multirregionales

Si publicas un mensaje con una clave de ordenación y la política de almacenamiento de mensajes excluye la región más cercana, el servicio Pub/Sub devuelve un error.

Configurar políticas de almacenamiento de mensajes

Hay dos formas de configurar las políticas de almacenamiento de mensajes de los temas:

  • Define una política de almacenamiento de mensajes mediante una política de organización.
  • Configura una política de almacenamiento de mensajes al crear un tema.

Definir una política de almacenamiento de mensajes mediante una política de organización

.

Consola

Para configurar una política de almacenamiento de mensajes que se aplique a varios temas, define una política de organización de restricción de ubicaciones de recursos.

  1. Ve a la página Políticas de la organización en la consola Gestión de Identidades y Accesos.

    Ir a Políticas de organización

  2. Selecciona el nodo de la jerarquía de recursos (organización, carpeta o proyecto) en el que quieras definir una política de la organización.

  3. En el filtro, introduce Restricción de ubicación de recursos.

  4. Haz clic en Google Cloud - Restricción de ubicación de recursos.

  5. Haz clic en EDITAR.

  6. Añade o elimina regiones según sea necesario.

    Los temas que crees heredarán estos ajustes. Los cambios no se propagan automáticamente a los temas que ya tengas. Para actualizar temas, debes ejecutar una operación de actualización.

Para obtener más información sobre las políticas de la organización, consulta el artículo Gestionar tus Google Cloud recursos.

Configurar una política de almacenamiento de mensajes al crear un tema

Consola

Cuando se usa la consola Google Cloud , no se puede configurar una política de almacenamiento de mensajes al crear un tema. En su lugar, todos los temas nuevos heredarán automáticamente la política de tu organización Restricción de ubicaciones de recursos.

Sin embargo, después de crear un tema, puedes cambiar su política de almacenamiento de mensajes en la consola con una operación de actualización.

CLI de gcloud

Para crear un tema con una política de almacenamiento de mensajes específica, usa el comando gcloud pubsub topics create con la marca --message-storage-policy-allowed-regions:

gcloud pubsub topics create TOPIC_ID \
    --message-storage-policy-allowed-regions=REGION1,REGION2

Haz los cambios siguientes:

  • TOPIC_ID: el ID o el nombre del nuevo tema.
  • REGION1, REGION2: lista separada por comas de las regiones Google Cloud admitidas.

REST

Para crear un tema con una política de almacenamiento de mensajes, usa el método projects.topics.create.

La solicitud debe autenticarse con un token de acceso en el encabezado Authorization. Para obtener un token de acceso de las credenciales de aplicación predeterminadas actuales, usa gcloud auth application-default print-access-token.

 POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
 Authorization: Bearer $(gcloud auth application-default print-access-token)
 Content-Type: application/json --data @response-body.json

Especifica los siguientes campos en el cuerpo de la solicitud:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": ["REGION"],
    "enforceInTransit": true
  }
}

Donde:

  • PROJECT_ID es el ID del proyecto.

  • El ID de tu tema es TOPIC_ID.

  • REGION es la región que has especificado.

Respuesta de ejemplo:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": [
      "REGION"
    ],
    "enforceInTransit": true
  }
}

Consulta las siguientes referencias de la API para obtener más información sobre cómo configurar las políticas de almacenamiento de mensajes.

Actualizar las políticas de almacenamiento de mensajes

Consola

  1. En la Google Cloud consola, abre la página Detalles del tema.

    Ir a Detalles del tema

  2. Selecciona un tema para actualizarlo.

    Puedes seleccionar varios temas.

  3. En el panel de información, selecciona la pestaña Política de almacenamiento.

    Este panel puede estar contraído de forma predeterminada. Si está contraído, haz clic en Mostrar panel de información.

  4. Selecciona o deselecciona tantas regiones como sea necesario.

  5. Haz clic en Actualizar.

CLI de gcloud

Para aplicar a un tema la política de almacenamiento de mensajes definida en la política de restricción de ubicaciones de recursos de tu organización, ejecuta el siguiente comando:gcloud pubsub topics update

gcloud pubsub topics update TOPIC_ID \
    --recompute-message-storage-policy

Para actualizar la política de almacenamiento de mensajes de un tema con regiones específicas, ejecuta el comando gcloud pubsub topics update con la marca --message-storage-policy-allowed-regions:

gcloud pubsub topics update TOPIC_ID \
    --message-storage-policy-allowed-regions=REGION1,REGION2

Haz los cambios siguientes:

  • TOPIC_ID: el ID del tema que vas a actualizar.
  • REGION1, REGION2: lista separada por comas de las regiones Google Cloud admitidas.

REST

Para actualizar un tema con una política de almacenamiento de mensajes, usa el método projects.topics.patch.

La solicitud debe autenticarse con un token de acceso en el encabezado Authorization. Para obtener un token de acceso de las credenciales de aplicación predeterminadas actuales, usa gcloud auth application-default print-access-token.

 PATCH https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
 Authorization: Bearer $(gcloud auth application-default print-access-token)
 Content-Type: application/json --data @response-body.json

Especifica los siguientes campos en el cuerpo de la solicitud:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": ["REGION"], // Replace with your required region
    "enforceInTransit": true
  }
}

Donde:

  • PROJECT_ID es el ID del proyecto.

  • El ID de tu tema es TOPIC_ID.

  • REGION es la región que has especificado.

Respuesta de ejemplo:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": [
      "REGION"
    ],
    "enforceInTransit": true
  }
}

Consulta las siguientes referencias de la API para obtener más información sobre cómo actualizar las políticas de almacenamiento de mensajes.

Gestionar las diferencias entre las políticas de la organización y las de los temas

Ver las diferencias entre las políticas de organización y las políticas de temas

Consola

La consola muestra las diferencias entre la política de la organización y las políticas de almacenamiento de mensajes de temas concretos. Google Cloud

Para ver si algún tema no está sincronizado con la política de tu organización, sigue estos pasos:

  1. Ve a la página Detalles del tema.

    Ir a Detalles del tema

  2. Selecciona un tema.

  3. En el panel de información, selecciona la pestaña Política de almacenamiento.

    Este panel puede estar contraído de forma predeterminada. Si está contraído, haz clic en Mostrar panel de información.

    En el panel se muestran tus políticas de almacenamiento, así como las diferencias entre las políticas de la organización y las del tema.

CLI de gcloud

Para examinar la política actual asignada a un tema, ejecuta el siguiente comando:

gcloud pubsub topics describe TOPIC_ID

Haz los cambios siguientes:

  • TOPIC_ID: el ID del tema que estás consultando.

Resolver las diferencias entre las políticas de la organización y las del tema

Consola

  1. En la Google Cloud consola, abre la página Detalles del tema.

    Ir a Pub/Sub

  2. Selecciona un tema.

  3. En el panel de información, selecciona la pestaña Política de almacenamiento.

    Este panel puede estar contraído de forma predeterminada. Si está contraído, haz clic en Mostrar panel de información.

    Tus políticas de almacenamiento se muestran en el panel, junto con las discrepancias.

    Si hay alguna discrepancia, el panel de información muestra tres opciones para sincronizar la política de almacenamiento del tema con la política de tu organización:

    • Los temas permiten el almacenamiento en ubicaciones no permitidas.

      Actualiza los temas para que puedan almacenar mensajes únicamente en las ubicaciones que permita tu política.

    • El tema no permite el almacenamiento en algunas ubicaciones permitidas.

      Actualiza los temas para que puedan almacenar mensajes en todas las ubicaciones que permita tu política.

    • Los temas no están actualizados, tanto en ubicaciones permitidas como no permitidas.

      Actualiza los temas para que puedan almacenar mensajes en las ubicaciones que permita tu política.

  4. Selecciona la opción adecuada para resolver tus problemas.

  5. Haz clic en Actualizar tema.

    Se abrirá el cuadro de diálogo Sincronizar con la política de almacenamiento de la organización.

  6. Haz clic en Actualizar tema.

Monitorización y solución de problemas

Para ayudarte a saber dónde se almacenan los datos de los mensajes, Pub/Sub ofrece métricas desglosadas por cada Google Cloud región.

Puedes usar estas métricas para lo siguiente:

  • Descubre cómo se distribuyen tus datos por todo el mundo.
  • Optimizar la ubicación de la implementación de editores y suscriptores en función de esos datos.

Métricas de almacenamiento de mensajes

Recuentos de mensajes almacenados sin confirmar:

subscription/num_unacked_messages_by_region

Volumen de datos almacenados:

subscription/unacked_bytes_by_region

Antigüedad del mensaje más antiguo:

subscription/oldest_unacked_message_age_by_region

Hay métricas análogas disponibles para temas y capturas. Además, hay métricas correspondientes disponibles para los mensajes confirmados que se conservan de forma opcional para reproducirlos. Por ejemplo:

subscription/num_retained_acked_messages_by_region

Implicaciones en el rendimiento y la disponibilidad

La política de almacenamiento de mensajes no afecta al SLA general, pero introduce una compensación entre disponibilidad y control cuando los editores o suscriptores se ejecutan fuera Google Cloud o en regiones no permitidas por la política. Los usuarios que ejecutan clientes de editores en el conjunto de regiones permitidas por la política de almacenamiento de mensajes no notarán ningún cambio en la latencia ni en la disponibilidad del servicio.

Para entender estas compensaciones, merece la pena tener en cuenta cómo se enrutan las solicitudes de publicación. Por lo general, Pub/Sub intenta almacenar los mensajes lo más cerca posible de la fuente de la solicitud. Las solicitudes que se originan enGoogle Cloud suelen estar vinculadas a las instancias de Pub/Sub de la misma región. Si un editor se encuentra en una sola región, añadir más regiones a la política de almacenamiento de mensajes no aumenta la disponibilidad. Cuando se publica desde fuera de Google Cloud, se añade una capa de enrutamiento para enviar la solicitud a una región de Google Cloud cercana donde esté disponible el servicio Pub/Sub.

Imagina que tienes una política de almacenamiento de mensajes que solo permite la región us-central1.

  1. Un cliente editor que se ejecuta en us-east1 emite una solicitud Publish.
  2. La solicitud se dirige a un servidor de Pub/Sub en us-east1.
  3. En lugar de almacenar los datos en us-east1, la solicitud se dirige a la región más cercana permitida por la política de almacenamiento de mensajes, que es us-central1.
  4. Pub/Sub almacena los mensajes publicados en us-central1 y reenvía los mensajes a los suscriptores desde esa ubicación.

Este mecanismo tiene implicaciones en la latencia de las solicitudes y en la disponibilidad general del sistema. Como la solicitud atraviesa más enlaces de red, tarda más en completarse y tiene una probabilidad relativamente mayor de fallar.Esto también significa que los suscriptores pueden ver el mensaje algo más tarde, ya que debe viajar a la región permitida más cercana antes de enviarse. Si la política permite una sola región, pero tus aplicaciones de editor se ejecutan en varias regiones, la aplicación distribuida solo estará disponible en la región permitida.

Siguientes pasos