Compania PayPal a deschis codurile sursă pentru sistemul de gestionare a bazelor de date rezistente la defecțiuni JunoDB, care manipulează datele în format cheie-valoare. Sistemul a fost conceput inițial având în vedere un nivel ridicat de securitate, scalabilitate orizontală, reziliență și capacitatea de a gestiona zeci de mii de conexiuni simultane cu întârzieri previzibile. Practic, toate serviciile de la PayPal, de la autentificarea utilizatorilor până la procesarea tranzacțiilor financiare, depind de JunoDB. Codul proiectului este scris în limbajul Go (biblioteca clientului este în Java) și este distribuit sub licența Apache 2.0. În cadrul dezvoltării continue, se vor accepta corecturi, îmbunătățiri și modificări din partea comunității.
Arhitectura JunoDB se bazează pe utilizarea unui echilibrator de sarcină, care primește cereri de la aplicații client și le distribuie între serverele proxy, care accesează simultan un grup servere de stocare în timpul procesării cererii. Fiecare server proxy stabilește conexiuni cu toate servers serverele de stocare și redirecționează cererile către grupul de servere de stocare pe baza indexului de secționare, care este stocat într-un sistem distribuit de gestionare a configurației etcd.

Datele sunt secționate și alocate nodurilor de stocare prin utilizarea hashing-ului, ceea ce permite reducerea mutării datelor atunci când nodurile din cluster cresc sau scad. Pentru a asigura reziliența, fiecare porțiune de date este replicată pe mai multe noduri de stocare, ceea ce permite păstrarea informației în cazul defectării unor servere individuale. Se suportă crearea de stocări distribuite geografic, în care grupuri de noduri sunt amplasate în diferite centre de date.

Pe nodurile de stocare, datele sunt plasate în memorie sau în stocarea locală bazată pe biblioteca RocksDB. Atunci când sunt stocate permanent, datele sunt plasate într-o formă criptată (cheia de criptare poate fi determinată atât de utilizator, cât și setată la nivelul proxy-ului).

Pentru a accesa baza de date din aplicații, este furnizată o bibliotecă client, care oferă un API pentru aplicații în limbile Java, Go și C++. Partea client este maxim simplificată, iar logica complexă și setările sunt, pe cât posibil, mutate la nivelul SGBD-ului. Interacțiunea între client și echilibratorul de sarcină sau proxy se realizează printr-un canal de comunicație criptat. Pentru gestionare și trimiterea de cereri, se poate utiliza interfața liniei de comandă, care reproduce toate funcționalitățile API-ului client.
Sistemul este proiectat pentru a gestiona cereri cu întârzieri previzibile scăzute, de exemplu, un cluster format din trei noduri de stocare și un proxy, creat din medii n1-highmem-32 (32 CPU Intel Xeon 2.30GHz, 214G RAM și 450G stocare pe bază de SSD), a reușit să ofere întârzieri fixe ce nu depășesc 2.5 ms în 95% din cazuri și 16 ms în 99% în timpul procesării a 200 de mii de conexiuni TLS simultane și a unui flux de 15 mii cereri pe secundă (la 3000 de conexiuni simultane și un flux de 80 de mii cereri pe secundă, întârzierile nu au depășit 6 ms în 95% din cazuri și 15 ms în 99%). La PayPal, serviciile bazate pe JunoDB gestionează aproximativ 350 de miliarde de cereri pe zi.

Sursa: opennet.ro
