PayPal har åbnet kildeteksterne til den fejltolerante database JunoDB, der håndterer data i nøgle-værdi format. Systemet er oprindeligt designet med fokus på høj sikkerhed, horisontal skalerbarhed, fejltolerance og evnen til at håndtere hundredtusindvis af samtidige forbindelser med forudsigelige forsinkelse. I PayPal er stort set alle tjenester, fra bruger-login til behandling af finansielle transaktioner, afhængige af JunoDB. Projektets kode er skrevet i Go (klientbiblioteket er på Java) og distribueres under Apache 2.0 licensen. Under den videre udvikling vil ændringer, forbedringer og rettelser fra fællesskabet blive accepteret.
JunoDB's arkitektur er baseret på brugen af en belastningsfordeler, der accepterer anmodninger fra klientapplikationer og distribuerer dem mellem proxy-servere, der samtidig henvender sig til en gruppe servere lagringssystemer under anmodningen. Hver proxy-server opretter forbindelser til alle servere lagringssystemer og omdirigerer anmodninger til en gruppe lagringsservere baseret på partitioneringsindekset, der opbevares i det distribuerede konfigurationslagersystem etcd.

Data partitioneres og knyttes til lagringsnoder ved hjælp af hashing, hvilket reducerer flytningen af data ved udvidelse eller reduktion af noder i klyngen. For at sikre fejltolerance replikeres hver datasæt på flere lagringsnoder, hvilket muliggør bevarelse af information, når enkelte servere svigter. Det understøttes oprettelse af geografisk distribuerede lagre, hvor grupper af noder er placeret i forskellige datacentre.

Data på lagringsnoder placeres i RAM eller i lokal lagring baseret på RocksDB-biblioteket. Ved permanent opbevaring gemmes data i krypteret form (krypteringsnøglen kan defineres af klienten eller angives på proxy-niveau).

For database access from applications, a client library is provided, offering an API for applications in Java, Go, and C++. The client part is greatly simplified, while complex logic and settings are as much as possible delegated to the DBMS. Interaction between the client and load balancer or proxy is done through an encrypted communication channel. For management and request sending, a command-line interface can be used that replicates all capabilities of the client API.
The system is designed to handle requests with predictable low latencies. For instance, a cluster of three storage nodes and one proxy, formed from environments n1-highmem-32 (32 CPU 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 concurrent 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, services based on JunoDB handle about 350 billion requests daily.

Kilde: opennet.ru
