Paypal open-source JunoDB il suo store distribuito key-value.

Paypal open-sourced JunoDB, their distributed key-value store.

Paypal ha recentemente reso open-source JunoDB, un sistema di memorizzazione chiave-valore distribuito costruito su RocksDB. Giornalmente, JunoDB, il database altamente disponibile e orientato alla sicurezza di PayPal, elabora 350 miliardi di richieste.

La vasta gamma di applicazioni di PayPal fa affidamento pesantemente su JunoDB, un sistema di memorizzazione chiave-valore distribuito. JunoDB viene utilizzato per praticamente tutti i servizi backend critici di PayPal, inclusa l’autenticazione, la valutazione del rischio e la gestione delle transazioni. I dati possono essere memorizzati nella cache e recuperati rapidamente dalle applicazioni che utilizzano JunoDB, riducendo la tensione sui servizi backend e sui database relazionali. JunoDB, tuttavia, non è un normale database NoSQL. È stato sviluppato per soddisfare le esigenze specifiche di PayPal. Di conseguenza, può gestire contemporaneamente molti utenti e connessioni senza rallentare. Originariamente creato in C++ single-threaded, è stato riscritto in Golang per sfruttare l’elaborazione parallela e i numerosi core.

L’architettura di JunoDB è un sistema affidabile ed estensibile che privilegia la facilità d’uso, la scalabilità, la sicurezza e la flessibilità. Il design basato su proxy semplifica lo sviluppo astrazione la logica complessa e la configurazione dalle applicazioni e consente una scalabilità lineare orizzontale delle connessioni. Quando si espandono o si contraggono i cluster, JunoDB utilizza l’hashing coerente per suddividere i dati e ridurre la quantità di dati che devono essere spostati. JunoDB utilizza un protocollo basato su quorum e un commit in due fasi per garantire la coerenza dei dati e garantire che non ci sia mai alcun tempo di inattività per il database.

La protezione delle informazioni sia in transito che a riposo è una priorità elevata. Pertanto, è stato implementato il supporto TLS e la crittografia del payload. Infine, la flessibilità di JunoDB e la capacità di adattarsi nel tempo sono garantite dal suo design pluggable storage engine, che semplifica il passaggio a nuove tecnologie di storage man mano che diventano disponibili.

Il nucleo di JunoDB è composto da tre parti interdipendenti:

  1. Il proxy JunoDB consente ai dati dell’applicazione di essere facilmente memorizzati, recuperati e aggiornati, grazie all’API fornita dalla libreria client JunoDB. Con il supporto per linguaggi tra cui Java, Golang, C++, Node e Python, la libreria client sottile JunoDB può essere facilmente integrata con programmi scritti in vari linguaggi.
  2. Le query del client e il traffico di replica proveniente da siti remoti vengono elaborati da istanze di proxy JunoDB controllate da un bilanciatore di carico. Ogni proxy stabilisce una connessione con tutte le istanze del server di archiviazione JunoDB e instrada la richiesta verso un insieme di istanze del server di archiviazione in base alla mappatura dello shard memorizzata in ETCD.
  3. JunoDB utilizza RocksDB per memorizzare i dati in memoria o in archiviazione persistente al ricevimento di una richiesta di operazione da un proxy.

JunoDB mantiene elevati livelli di accessibilità e reattività del sistema supportando molte connessioni client. Gestisce inoltre l’espansione dei dati e mantiene un elevato throughput di lettura/scrittura anche con l’aumentare del volume dei dati e del numero di accessi. Per raggiungere sei 9 di disponibilità del sistema, JunoDB utilizza una combinazione di soluzioni, tra cui la replica dei dati all’interno e all’esterno dei data center e meccanismi di failover.

JunoDB offre prestazioni eccezionali su larga scala, gestendo anche i carichi di lavoro più intensivi con tempi di risposta nell’intervallo dei millisecondi e senza compromettere l’esperienza dell’utente. Inoltre, JunoDB offre un alto throughput e basse latenze, consentendo alle applicazioni di scalare in modo lineare senza compromettere le prestazioni.

Gli utenti possono ottenere il codice sorgente di JunoDB, rilasciato con licenza Apache 2, su GitHub. PayPal ha prodotto video tutorial per la configurazione del server e lo sviluppo del client per aiutare gli sviluppatori nell’uso del database. Il team prevede di includere un client Golang e un operator JunoDB per Kubernetes in futuro.