Elección de niveles de coherencia para obtener un rendimiento óptimo
Los niveles de coherencia de Azure Cosmos DB controlan el equilibrio entre la actualización de datos, la latencia, el rendimiento y la disponibilidad. Las aplicaciones de inteligencia artificial tienen diversos requisitos de coherencia. Algunos necesitan visibilidad inmediata del contenido cargado, mientras que otros pueden tolerar breves retrasos a cambio de un mayor rendimiento y menores costos. Comprender los niveles de coherencia le ayuda a seleccionar el nivel adecuado para diferentes partes de la aplicación de IA.
Descripción de los cinco niveles de coherencia
Azure Cosmos DB ofrece cinco niveles de coherencia que forman un espectro de garantías más fuertes a más débiles. Cada nivel proporciona garantías específicas sobre el momento en que las lecturas reflejan las escrituras confirmadas.
Coherencia fuerte
La coherencia fuerte ofrece linearización, lo que significa que las lecturas siempre devuelven la escritura confirmada más reciente. Cuando un cliente escribe datos en una región, una lectura posterior de cualquier región devuelve ese valor. Esta garantía requiere consenso de mayoría global antes de confirmar las escrituras, lo que aumenta la latencia de escritura para las cuentas de varias regiones.
Cuándo usar:
- Sistemas financieros o transaccionales que requieren una precisión absoluta
- Escenarios en los que los datos obsoletos provocan decisiones incorrectas
- Aplicaciones con requisitos estrictos de cumplimiento normativo
Desventajas:
- Mayor latencia de escritura, especialmente para las cuentas que abarcan varias regiones
- No se admite con varias regiones de escritura
- Las lecturas consumen dos veces las RU de niveles de coherencia más débiles porque leen de dos réplicas.
Coherencia de obsolescencia limitada
La obsolescencia limitada garantiza que las lecturas se retrasan respecto a las escrituras por un máximo de K versiones (actualizaciones) o T segundos, lo que ocurra primero. Este nivel proporciona coherencia casi fuerte con una latencia más predecible que la coherencia fuerte.
Cuándo usar:
- Cuentas de escritura de una sola región que necesitan garantías de coherencia entre regiones
- Escenarios donde la desactualización breve es aceptable, pero los datos deben converger rápidamente
Desventajas:
- Sigue requiriendo leer de dos réplicas, consumiendo más RU que los niveles más débiles
- No se recomienda para las cuentas de escritura de varias regiones porque la obsolescencia depende del retraso de replicación entre regiones.
Coherencia de sesión
La coherencia de la sesión garantiza que, dentro de una única sesión de cliente, las lecturas siempre reflejen las escrituras de esa sesión. Esta garantía de "lectura de las escrituras" usa tokens de sesión para realizar un seguimiento de la posición del cliente en el flujo de escrituras. La coherencia de sesión es la opción más popular para las aplicaciones porque equilibra el rendimiento con necesidades de coherencia prácticas.
Cuándo usar:
- La mayoría de los escenarios de aplicación, especialmente las aplicaciones orientadas al usuario
- Aplicaciones de inteligencia artificial en las que los usuarios esperan ver su contenido cargado inmediatamente
- Aplicaciones en las que una sola cuenta de usuario o servicio realiza operaciones relacionadas
Desventajas:
- Requiere mantener y pasar tokens de sesión entre solicitudes
- Es posible que otras sesiones vean datos obsoletos hasta que se complete la replicación.
- Las lecturas incurren en costos de RU de una sola réplica
Coherencia de prefijo coherente
El prefijo coherente garantiza que las lecturas nunca vean escrituras desordenadas. Si las escrituras ocurren en el orden A, B, C, las lecturas pueden no ver nada, ver A, A-B o ver A-B-C, pero nunca B sin A o C sin B. Los lotes transaccionales son visibles en conjunto o no se ven en absoluto.
Cuándo usar:
- Escenarios en los que el orden de escritura es importante, pero la frescura absoluta no
- Aplicaciones que leen secuencias de actualizaciones (registros de auditoría, flujos de eventos)
Desventajas:
- Es posible que las lecturas devuelvan datos obsoletos.
- Proporciona garantías de orden sin garantías de frescura
Coherencia final
La coherencia final proporciona la garantía más débil: las lecturas pueden devolver datos obsoletos sin promesas de ordenación. Sin embargo, este nivel ofrece la mayor disponibilidad, rendimiento y latencia más baja porque las lecturas usan una sola réplica sin coordinación.
Cuándo usar:
- Cargas de trabajo de análisis e informes
- Procesamiento en segundo plano que no requiere datos nuevos
- Escenarios de alto rendimiento en los que la frescura absoluta no es crítica
Desventajas:
- Es posible que las lecturas devuelvan valores anteriores.
- No hay ninguna garantía sobre el orden de lectura en relación con las escrituras
Aplicación de la coherencia de sesión a las aplicaciones de IA
La coherencia de la sesión se adapta a la mayoría de las aplicaciones de IA, ya que proporciona la garantía de "lectura de las escrituras" que esperan los usuarios. Cuando un usuario carga un documento y lo busca inmediatamente, la coherencia de la sesión garantiza que el documento aparezca en los resultados de búsqueda, siempre y cuando la solicitud de búsqueda incluya el token de sesión de la operación de carga.
Los tokens de sesión están enlazados a particiones, lo que significa que cada token realiza un seguimiento de la posición dentro de una partición específica. El SDK administra los tokens de sesión automáticamente dentro de una instancia de cliente. Para las aplicaciones distribuidas en las que varios servicios manejan diferentes partes de una solicitud de usuario, debe pasar los tokens de sesión explícitamente.
En el ejemplo siguiente se muestra cómo configurar la coherencia de la sesión en el nivel de cliente:
from azure.cosmos import CosmosClient, ConsistencyLevel
client = CosmosClient(
url=endpoint,
credential=credential,
consistency_level=ConsistencyLevel.Session
)
database = client.get_database_client("documents-db")
container = database.get_container_client("documents")
# Write a document and capture the session token using response_hook
session_info = {}
def capture_session_token(headers, result):
session_info["token"] = headers.get("x-ms-session-token", "")
container.create_item(
body={
"id": "doc-123",
"title": "Project Proposal",
"content": "Document content...",
"category": "proposals"
},
response_hook=capture_session_token
)
# Use the session token for subsequent reads to guarantee read-your-writes
results = container.query_items(
query="SELECT * FROM c WHERE c.category = @category",
parameters=[{"name": "@category", "value": "proposals"}],
session_token=session_info.get("token")
)
Cuando la aplicación usa el token de sesión de la operación de escritura, se garantiza que la consulta posterior vea el documento recién creado.
Comprender la coherencia y el consumo de RU
El nivel de coherencia afecta directamente al consumo de RU para las operaciones de lectura. La coherencia de obsolescencia limitada y fuerte requiere leer de dos réplicas (cuórum minoritario) para garantizar la coherencia. La coherencia final, de sesión y de prefijo coherente leída de una sola réplica.
| Nivel de coherencia | Lectura de réplicas | Costo relativo de RU |
|---|---|---|
| Alta | Dos (quórum de minorías) | 2× |
| Uso vinculado | Dos (cuórum minoritario) | 2× |
| Session | One | 1× |
| Prefijo coherente | One | 1× |
| Ocasional | One | 1× |
En el caso de las aplicaciones de inteligencia artificial intensiva de lectura, el uso de la coherencia de sesión en lugar de una coherencia fuerte reduce los costos de lectura a la mitad, a la vez que proporciona garantías prácticas de coherencia para las operaciones orientadas al usuario.
Los costos de RU de escritura no varían según el nivel de coherencia en el nivel de operación, pero la coherencia fuerte requiere esperar a la replicación global, lo que aumenta la latencia. Todos los niveles de coherencia escriben en una mayoría local (tres réplicas en un conjunto de cuatro réplicas) antes de confirmar la operación.
Invalidar la coherencia por solicitud
El SDK de Python establece el nivel de coherencia a nivel de cliente al construir el CosmosClient. Puede crear instancias de cliente independientes con diferentes niveles de coherencia para diferentes partes de la aplicación, lo que permite una mayor coherencia para las operaciones críticas y la coherencia más débil para las tareas en segundo plano.
Puede usar una coherencia más fuerte para las operaciones críticas:
from azure.cosmos import CosmosClient, ConsistencyLevel
# Client with strong consistency for critical reads
strong_client = CosmosClient(
url=endpoint,
credential=credential,
consistency_level=ConsistencyLevel.Strong
)
strong_container = strong_client.get_database_client("documents-db").get_container_client("documents")
# Critical read that must return the latest data
results = strong_container.query_items(
query="SELECT * FROM c WHERE c.id = @id",
parameters=[{"name": "@id", "value": "critical-doc-123"}]
)
Puede usar una coherencia más débil para las operaciones en segundo plano:
# Client with eventual consistency for analytics
eventual_client = CosmosClient(
url=endpoint,
credential=credential,
consistency_level=ConsistencyLevel.Eventual
)
eventual_container = eventual_client.get_database_client("documents-db").get_container_client("documents")
# Analytics query where staleness is acceptable
results = eventual_container.query_items(
query="SELECT c.category, COUNT(1) as count FROM c GROUP BY c.category"
)
Esta flexibilidad le permite optimizar los costos de diferentes escenarios a la vez que mantiene la coherencia necesaria para las operaciones orientadas al usuario.
Selección de la coherencia para la búsqueda de vectores
Las consultas de búsqueda vectorial normalmente toleran la coherencia final porque los resultados de similitud semántica no requieren una actualización absoluta. Una consulta que pregunta "buscar documentos similares a X" genera resultados útiles incluso si los documentos más recientes aún no se pueden buscar.
Sin embargo, si los usuarios esperan encontrar contenido cargado recientemente a través de la búsqueda de vectores, la coherencia de la sesión garantiza que las incrustaciones recién indexadas se puedan buscar inmediatamente dentro de la misma sesión. El usuario que cargó un documento y generó su inserción ve ese documento en resultados de búsqueda de similitud.
En el caso de las consultas híbridas que combinan la similitud vectorial con filtros de metadatos, aplique las mismas consideraciones de coherencia que para las consultas estándar. Si los usuarios filtran por fecha y esperan que aparezcan documentos recientes, la coherencia de la sesión proporciona el comportamiento esperado.
Considere la coherencia en las implementaciones de varias regiones
En el caso de las cuentas distribuidas entre varias regiones, el nivel de coherencia afecta a la latencia de escritura y a la actualización de lectura:
Coherencia fuerte: Requiere esperar la replicación a todas las regiones antes de confirmar las escrituras. La latencia de escritura aumenta con la distancia a la región más lejana. No se admite la coherencia fuerte con varias regiones de escritura.
Obsolescencia limitada: funciona mejor para las cuentas de escritura de una sola región que necesitan una coherencia predecible entre regiones. Las lecturas de regiones no principales devuelven datos dentro de los límites de obsolescencia configurados.
Niveles de sesión y más débiles: escribe confirmación después de la confirmación de mayoría local. La replicación entre regiones se produce de forma asincrónica. Los tokens de sesión garantizan la lectura de las escrituras dentro de una sesión, pero otras regiones podrían ver brevemente datos obsoletos.
Para la mayoría de las aplicaciones de IA distribuidas globalmente, la coherencia de sesión proporciona el mejor equilibrio. Los usuarios que interactúan con una región específica ven sus escrituras inmediatamente. Los usuarios de otras regiones ven datos coherentes con el tiempo, lo que suele ser aceptable para escenarios de búsqueda de documentos.
Supervisión de la coherencia con métricas de PBS
Las métricas de obsolescencia limitada probabilísticamente (PBS) muestran la frecuencia con la que las lecturas con coherencia final devuelven realmente los datos más recientes. Esta métrica ayuda a validar si los niveles de coherencia más débiles cumplen los requisitos de la aplicación.
Puede acceder a las métricas de PBS a través de Azure Portal:
- Vaya a la cuenta de Azure Cosmos DB
- Seleccione Métricas en el panel izquierdo.
- Seleccione la categoría Coherencia .
- Visualización de la métrica de PBS para las regiones
Si las métricas de PBS muestran que la coherencia final devuelve datos actuales más de 99% del tiempo, puede usar de forma segura la coherencia final para más operaciones. Si PBS muestra obsolescencia significativa, considere la posibilidad de usar la coherencia de sesión para las operaciones orientadas al usuario.