L'azienda XTX Markets ha aperto il codice sorgente del file system TernFS, progettato per creare uno storage distribuito che copre più data center geograficamente separati e in grado di archiviare fino a decine di exabyte di dati, trilioni di file e centinaia di miliardi di directory, ai quali possono interagire contemporaneamente milioni di clienti. Il codice del progetto è scritto in C++ e Go e viene distribuito sotto licenza GPLv2. Le specifiche del protocollo e le librerie client sono fornite sotto licenza Apache 2.0.
Il filesystem è ottimizzato per carichi tipici dei sistemi di machine learning: registrazione e lettura di file non modificabili dopo la creazione e contenenti più di alcuni megabyte di dati. Il filesystem non è progettato per la creazione frequente di nuove directory e per il frequente spostamento di file tra directory. Sono disponibili funzioni per il recupero di file o directory eliminati per errore, oltre alla possibilità di impostare politiche di eliminazione permanente. Il contenuto del filesystem può essere replicato tra diversi data center in regioni distinte. I nodi di archiviazione possono includere diversi tipi di dispositivi di memorizzazione (sia basati su dischi che su memoria flash).
Uno dei requisiti nel design è l'assenza di un singolo punto di guasto e l'assicurazione di un'elevata affidabilità dell'archiviazione: le interruzioni di corrente non devono causare danni al filesystem e i file non possono risultare parzialmente registrati (solo file completamente registrati sono disponibili per la lettura). Il sistema è resistente al guasto di singoli dispositivi di memorizzazione, nodi di metadati e nodi di archiviazione. È possibile effettuare la manutenzione dello storage senza interrompere l'attività.
L'implementazione dello storage basato su TernFS presso XTX Markets è iniziata nell'estate del 2023, dopo un anno e mezzo di sviluppo del file system. A metà del 2024, tutti i sistemi di machine learning di XTX Markets sono stati migrati su TernFS. Attualmente, lo storage consiste in oltre 30.000 dischi e 10.000 unità Flash, distribuiti in tre data center. Il volume totale dei dati memorizzati è stimato in 500 petabyte, con una capacità di picco che raggiunge diversi petabyte al secondo. Lo storage è utilizzato all'interno di un cluster che conta oltre 100.000 nodi computazionali. Non si sono verificati incidenti che abbiano portato a perdite di dati nei due anni di operatività.
Tra i limiti di TernFS: i file registrati non possono essere modificati; bassa efficienza nella gestione di file di dimensioni inferiori a 2 MB; scarse prestazioni nelle operazioni di creazione e cancellazione di directory; assenza di separazione dei diritti di accesso.
I componenti che costituiscono il cluster di storage TernFS:
- Nodi di storage dei metadati, responsabili della gestione delle informazioni sulla struttura delle directory e sugli attributi dei file.
- Nodi di coordinamento (CDC - Cross-Directory Coordinator), che eseguono transazioni che coprono directory diverse.
- Servizi di storage che garantiscono la memorizzazione del contenuto dei file.
- Registro contenente informazioni su tutti gli altri servizi e monitorando il loro funzionamento.
- Servizi per gli utenti per accedere al sistema di file storage:
- ternweb — accesso allo storage tramite Web API.
- terncli — interfaccia a riga di comando.
- ternfs.ko — modulo per il kernel Linux che consente di montare lo storage per l'uso come filesystem locale.
- ternfuse — implementazione di un client per lavorare con il filesystem, utilizzando il sottosistema FUSE.
- terns3 — implementazione dell'API Amazon S3.
- Processi in background:
- GC — garbage collector che libera snapshot scaduti (file rimossi ma non ancora cancellati) e pulisce i blocchi per i file eliminati in modo irreversibile.
- scrubber — rilevamento della degradazione dei dati e recupero.
- migrator — esclusione dallo storage di dischi guasti.

Fonte: opennet.ru
