Selskapet PayPal har åpnet kildekoden til den feiltolerante databasen JunoDB, som håndterer data i nøkkel-verdi format. Systemet er opprinnelig designet med tanke på høy sikkerhet, horisontal skalering, feiltoleranse og evnen til å håndtere hundretusener av samtidige tilkoblinger med forutsigbare forsinkelser. I PayPal er nesten alle tjenester, fra brukerpålogging til behandling av finansielle transaksjoner, avhengige av JunoDB. Koden til prosjektet er skrevet i Go (klientbiblioteket er i Java) og distribueres under Apache 2.0-lisensen. Under videreutvikling vil det bli tatt imot feilrettinger, forbedringer og endringer fra fellesskapet.
Arkitekturen til JunoDB er basert på bruk av en lastbalanserer som tar imot forespørselene fra klientapplikasjoner og distribuerer dem mellom proxy-servere, samtidig som den henvender seg til en gruppe servere lagring under behandling av forespørselen. Hver proxy-server oppretter forbindelser til alle servere lagringsenheter og omdirigerer forespørslene til lagringsgruppen basert på partisjoneringsindeksen, som lagres i det distribuerte konfigurasjonslagringssystemet etcd.

Dataene partisjoneres og knyttes til lagringsnoder ved hjelp av hashing, noe som reduserer databevegelsen ved økning eller reduksjon av noder i klyngen. For å sikre feiltoleranse blir hver databit replisert på flere lagringsnoder, noe som gjør det mulig å bevare informasjon selv når enkelte servere går ned. Det støttes opprettelse av geografisk distribuerte lagringsløsninger, der grupper av noder er plassert i forskjellige datasentre.

På lagringsnodene lagres dataene enten i RAM eller i lokalt lagret basert på RocksDB-biblioteket. Ved permanent lagring lagres dataene i kryptert form (krypteringsnøkkelen kan defineres av klienten, eller settes på proxy-nivå).

For interacting with the database from applications, a client library is provided that offers an API for applications in Java, Go, and C++. The client side is streamlined, while complex logic and configurations are offloaded to the DBMS wherever possible. Communication between the client and the load balancer or proxy occurs over an encrypted channel. A command line interface can be used for management and sending requests, which reproduces all the functionality of the client API.
The system is designed to handle requests with predictably low latencies. For example, a cluster of three storage nodes and one proxy, formed from n1-highmem-32 environments (32 CPUs Intel Xeon 2.30GHz, 214G RAM, and 450G SSD-based storage), managed to provide fixed latencies not exceeding 2.5 ms in 95% of cases and 16 ms in 99% when processing 200,000 simultaneous TLS connections and a stream of 15,000 requests per second. (With 3,000 simultaneous connections and a stream of 80,000 requests per second, latencies did not exceed 6 ms in 95% of cases and 15 ms in 99%.) At PayPal, JunoDB-based services handle about 350 billion requests a day.

Kilde: opennet.ru
