Estensione driver di Azure Cosmos DB for Apache Cassandra
SI APPLICA A: Cassandra
Azure Cosmos DB offre un'estensione driver per DataStax Java Driver 3 e 4. Queste estensioni del driver offrono agli sviluppatori funzionalità diverse per migliorare le prestazioni e l'affidabilità di un'applicazione e ottimizzare i carichi di lavoro in Azure Cosmos DB.
In questo articolo verrà dedicata particolare attenzione a Java versione 4 di DataStax Java Driver. L'estensione creata può essere implementata senza modifiche al codice, ma con un aggiornamento ai file pom.xml
e application.conf
. In questo articolo sono illustrati i valori predefiniti per tutte le opzioni di configurazione impostate dalle estensioni di Azure Cosmos DB for Apache Cassandra e i casi in cui è possibile eseguirne l'override.
Impostazioni consigliate per Java SDK
Le impostazioni seguenti sono specifiche per Java versione 4 del driver client Cassandra.
Autenticazione
Per impostazione predefinita, viene usato il parametro PlainTextAuthProvider. Questo perché Azure Cosmos DB for Apache Cassandra richiede l'autenticazione e usa l'autenticazione in testo normale.
auth-provider {
class = PlainTextAuthProvider
}
Connessione
Azure Cosmos DB bilancia il carico delle richieste rispetto a un numero elevato di nodi back-end. Le impostazioni predefinite nell'estensione per le dimensioni dei nodi locali e remoti sono adatte agli ambienti di sviluppo, di test e di produzione o gestione temporanea con volumi ridotti. Negli ambienti con volumi elevati è consigliabile aumentare questi valori a 50 o 100.
connection {
pool {
local {
size = 10
}
remote {
size = 10
}
}
}
Mappa dei token
La mappa dei token di sessione viene usata internamente dal driver per inviare richieste al coordinatore ottimale quando è abilitato il routing compatibile con token. Questa mappa è un'ottimizzazione efficace quando si è connessi a un'istanza di Apache Cassandra. È invece irrilevante e genera messaggi di errore spuri quando si è connessi a un endpoint di Azure Cosmos DB for Apache Cassandra. È quindi consigliabile disabilitare la mappa dei token di sessione quando si è connessi a un'istanza di Azure Cosmos DB for Apache Cassandra.
metadata {
token-map {
enabled = false
}
}
Criteri di riconnessione
È consigliabile usare il parametro ConstantReconnectionPolicy
per l'API per Cassandra, con un base-delay
di 2 secondi.
reconnection-policy {
class = ConstantReconnectionPolicy
base-delay = 2 second
}
Criteri di ripetizione
I criteri di ripetizione dei tentativi predefiniti nel driver Java non gestiscono l'eccezione OverLoadedException
. Per l'API per Cassandra sono stati creati criteri personalizzati in grado di gestire questa eccezione.
I parametri per i criteri di ripetizione dei tentativi sono definiti all'interno del file reference.conf dell'estensione di Azure Cosmos DB.
retry-policy {
class = com.azure.cosmos.cassandra.CosmosRetryPolicy
max-retries = 5
fixed-backoff-time = 5000
growing-backoff-time = 1000
}
Criteri di bilanciamento e aree preferite
I criteri di bilanciamento del carico predefiniti nel driver v4 limitano il failover a livello di applicazione e specificano un singolo data center locale per CqlSession
, l'oggetto richiesto dai criteri. Questa caratteristica offre un'esperienza ottimale per le comunicazioni con le istanze di Azure Cosmos DB for Apache Cassandra. Oltre a impostare i criteri di bilanciamento del carico, è possibile configurare il failover nelle aree specificate in una distribuzione di scritture in più aree, se si verificano interruzioni a livello di area usando il parametro preferred-regions
.
load-balancing-policy {
multi-region-writes=false
preferred-regions=["Australia East","UK West"]
}
Connessione SSL e timeout
Per impostazione predefinita, viene usato il parametro DefaultsslEngineFactory
. Ciò è dovuto al fatto che l'API Azure Cosmos DB for Apache Cassandra richiede una connessione SSL:
ssl-engine-factory {
class = DefaultSslEngineFactory
}
Un timeout della richiesta di 60 secondi offre un'esperienza migliore rispetto al valore predefinito di 2 secondi. Aumentare o diminuire questo valore in base al carico di lavoro e al provisioning della velocità effettiva di Azure Cosmos DB for Apache Cassandra. Maggiore è la velocità effettiva di cui viene effettuato il provisioning, più basso può essere il valore da impostare.
request {
timeout = "60 seconds"
}