La coerenza
Questo argomento introduce i quattro livelli di coerenza in Milvus e i loro scenari più adatti. In questo argomento viene trattato anche il meccanismo che garantisce la coerenza in Milvus.
Panoramica
La consistenza in un database distribuito si riferisce specificamente alla proprietà che garantisce che ogni nodo o replica abbia la stessa visione dei dati quando scrive o legge i dati in un determinato momento.
Milvus supporta quattro livelli di consistenza: forte, bounded staleness, di sessione e finale. Il livello di consistenza predefinito in Milvus è bounded staleness. È possibile regolare facilmente il livello di consistenza quando si effettua una ricerca monovettoriale, una ricerca ibrida o una query per adattarlo al meglio alla propria applicazione.
Livelli di consistenza
Come definito dal teorema PACELC, un database distribuito deve trovare un compromesso tra coerenza, disponibilità e latenza. Un'alta consistenza implica un'elevata precisione ma anche un'alta latenza di ricerca, mentre una bassa consistenza porta a una velocità di ricerca elevata ma a una certa perdita di visibilità dei dati. Pertanto, livelli diversi di coerenza si adattano a scenari diversi.
Di seguito vengono illustrate le differenze tra i quattro livelli di coerenza supportati da Milvus e gli scenari a cui ciascuno di essi si adatta.
Forte
Strong è il livello di coerenza più alto e più rigoroso. Garantisce che gli utenti possano leggere la versione più recente dei dati.
Consistenza forte
Secondo il teorema PACELC, se il livello di coerenza è impostato su forte, la latenza aumenterà. Pertanto, si consiglia di scegliere una consistenza forte durante i test funzionali per garantire l'accuratezza dei risultati dei test. La consistenza forte è anche la più adatta per le applicazioni che richiedono una stretta consistenza dei dati a scapito della velocità di ricerca. Un esempio può essere un sistema finanziario online che si occupa di pagamenti e fatturazione degli ordini.
Stalliezza limitata
La staleness limitata, come suggerisce il nome, consente l'incoerenza dei dati durante un certo periodo di tempo. Tuttavia, in genere, i dati sono sempre globalmente coerenti al di fuori di quel periodo di tempo.
Consistenza della staleness limitata
La staleness limitata è adatta a scenari che devono controllare la latenza di ricerca e possono accettare l'invisibilità sporadica dei dati. Ad esempio, nei sistemi di raccomandazione come i motori di raccomandazione video, l'invisibilità dei dati ha talvolta un impatto minimo sul tasso di richiamo complessivo, ma può aumentare significativamente le prestazioni del sistema di raccomandazione.
Sessione
La sessione garantisce che tutti i dati scritti possano essere immediatamente percepiti in lettura durante la stessa sessione. In altre parole, quando si scrivono dati tramite un client, i nuovi dati inseriti diventano istantaneamente ricercabili.
Consistenza di sessione
Si consiglia di scegliere la sessione come livello di coerenza per gli scenari in cui la richiesta di coerenza dei dati nella stessa sessione è elevata. Un esempio può essere la cancellazione dei dati di una voce di libro dal sistema bibliotecario; dopo la conferma della cancellazione e l'aggiornamento della pagina (una sessione diversa), il libro non dovrebbe più essere visibile nei risultati della ricerca.
Eventualmente
Non esiste un ordine garantito di lettura e scrittura, e le repliche alla fine convergono allo stesso stato se non vengono effettuate altre operazioni di scrittura. Con la consistenza "eventually", le repliche iniziano a lavorare sulle richieste di lettura con gli ultimi valori aggiornati. Eventualmente coerente è il livello più debole tra i quattro.
Consistenza eventuale
Tuttavia, secondo il teorema PACELC, la latenza di ricerca può essere enormemente ridotta sacrificando la coerenza. Pertanto, il livello eventually consistent è il più adatto per gli scenari che non richiedono un'elevata coerenza dei dati, ma che richiedono prestazioni di ricerca rapidissime. Un esempio può essere il recupero di recensioni e valutazioni di prodotti Amazon con il livello eventually consistent.
Garantire il timestamp
Milvus realizza diversi livelli di coerenza introducendo il timestamp di garanzia (GuaranteeTs ).
Un GuaranteeTs serve a informare i nodi di interrogazione che una ricerca o una richiesta di interrogazione non verrà eseguita fino a quando tutti i dati precedenti al GuaranteeTs non potranno essere visti dai nodi di interrogazione. Quando si specifica il livello di consistenza, questo corrisponde a un valore specifico di GuaranteeTs. A diversi valori di GuaranteeTs corrispondono diversi livelli di consistenza:
Forte: GuaranteeTs è impostato come identico al timestamp più recente del sistema e i nodi di interrogazione attendono che tutti i dati precedenti al timestamp più recente del sistema siano visibili prima di elaborare la richiesta di ricerca o di interrogazione.
Stallo limitato: GuaranteeTs è impostato relativamente più piccolo del timestamp più recente del sistema e i nodi di interrogazione cercano su una vista di dati tollerabile e meno aggiornata.
Sessione: Il client utilizza il timestamp dell'ultima operazione di scrittura come GuaranteeTs, in modo che ogni client possa almeno recuperare i dati inseriti dallo stesso client.
Alla fine: GuaranteeTs viene impostato su un valore molto piccolo per saltare il controllo di coerenza. I nodi di query effettuano immediatamente una ricerca sulla vista dei dati esistenti.
Per ulteriori informazioni sul meccanismo che garantisce diversi livelli di coerenza in Milvus, si veda Come funziona GuaranteeTs.
Cosa succede dopo
- Imparare a regolare il livello di coerenza quando: