PayPal hà apertu u codice fonte di u DBMS JunoDB tolerante à i difetti, chì manipula e dati in un formatu chjave-valore. U sistema hè statu inizialmente cuncepitu cù alta sicurezza, scalabilità horizontale, tolleranza à i difetti, è a capacità di trattà centinaie di millaie di cunnessione simultanee cù latenzi prevedibili in mente. À PayPal, quasi tutti i servizii, da l'accessu di l'utilizatori à l'elaborazione di e transazzioni finanziarii, sò ligati à JunoDB. U codice di u prughjettu hè scrittu in Go (una biblioteca di client Java) è hè distribuitu sottu a licenza Apache 2.0. U sviluppu ulteriore accettarà correzioni, migliure è cambiamenti da a cumunità.
L'architettura di JunoDB hè basata annantu à l'usu di un equilibratore di carica chì accetta e richieste da l'applicazioni client è e distribuisce trà i servitori proxy chì accedenu simultaneamente à un gruppu di servitori almacenamentu quandu si esegue una dumanda. Ogni servitore proxy stabilisce cunnessione cù tutti à tempu. servitori almacenamentu è instrada e richieste à un gruppu di servitori di almacenamentu basatu annantu à un indice di partizione almacenatu in u sistema di almacenamentu di cunfigurazione distribuita etcd.

I dati sò partizionati è ligati à i nodi di almacenamento chì utilizanu l'hashing, chì riduce u muvimentu di dati cum'è i nodi in u cluster cresce o si riduce. Per assicurà a tolleranza di difetti, ogni pezzu di dati hè replicatu nantu à parechji nodi di almacenamiento, chì vi permette di salvà l'infurmazioni quandu i servitori individuali fallenu. A creazione di magazzini distribuiti geograficamente hè supportatu, in quale gruppi di nodi sò situati in diversi centri di dati.

Nantu à i nodi di almacenamiento di dati, sò situati in RAM o in almacenamiento locale basatu nantu à a biblioteca RocksDB. Quandu si almacenanu in permanenza, i dati sò guardati in forma criptata (a chjave di criptografia pò esse determinata da u cliente o stabilita à u livellu proxy).

Per accede à a basa di dati da l'applicazioni, una libreria cliente hè furnita chì furnisce una API per applicazioni in Java, Go è C++. A parte di u cliente hè simplificata quant'è pussibule, è a logica cumplessa è i paràmetri sò trasferiti à u latu DBMS sempre chì hè pussibule. L'interazzione trà u cliente è u balancer o proxy hè realizatu per mezu di un canale di cumunicazione criptatu. Per gestisce è mandà richieste, pudete aduprà l'interfaccia di linea di cummanda, chì replica tutte e capacità di l'API cliente.
U sistema hè cuncepitu per processà e richieste cù latenze bassu prevedibile, per esempiu, un cluster di trè nodi di almacenamiento è un proxy, furmatu da ambienti n1-highmem-32 (32 CPU Intel Xeon 2.30GHz, 214G RAM è 450G SSD-based storage) , hà sappiutu furnisce ritardi fissi micca più di 2.5 ms in u 95% di i casi è 16 ms in u 99% quandu si tratta 200 mila cunnessione TLS simultanea è un flussu di 15 mila richieste per seconda (cù 3000 cunnessione simultanea è un flussu di 80 mila richieste). per seconda, i ritardi ùn anu micca più di 6 ms in 95% di i casi è 15 ms in 99%). In PayPal, i servizii basati in JunoDB servenu circa 350 miliardi di richieste per ghjornu.

Source: opennet.ru
