Het bedrijf PayPal heeft de broncode van de fouttolerante database JunoDB vrijgegeven, die gegevens in een sleutel-waardeformaat beheert. Het systeem is oorspronkelijk ontworpen met het oog op hoge veiligheid, horizontale schaalbaarheid, fouttolerantie en het vermogen om honderdduizenden gelijktijdige verbindingen met voorspelbare latenties te verwerken. Bij PayPal zijn vrijwel alle diensten, van gebruikersinvoer tot financiële transactieverwerking, afhankelijk van JunoDB. De projectcode is geschreven in de programmeertaal Go (met een clientbibliotheek in Java) en wordt verspreid onder de Apache 2.0-licentie. Tijdens verdere ontwikkeling zullen verbeteringen, correcties en wijzigingen van de gemeenschap worden geaccepteerd.
De architectuur van JunoDB is gebaseerd op het gebruik van een load balancer die aanvragen van clienttoepassingen ontvangt en deze verspreidt over proxyservers, die tegelijkertijd verbinding maken met een groep servers opslag tijdens de uitvoering van een aanvraag. Elke proxyserver maakt verbinding met alle servers opslag en leidt aanvragen door naar de groep opslagservers op basis van een partitioneringsindex die is opgeslagen in het gedistribueerde configuratiesysteem etcd.

Gegevens worden gepartitioneerd en toegewezen aan opslagknopen met behulp van hashing, wat de verplaatsing van gegevens vermindert bij het toevoegen of verwijderen van knopen in het cluster. Om fouttolerantie te waarborgen, wordt elke datareplica op meerdere opslagknopen gerepliceerd, waardoor informatie behouden blijft bij uitval van afzonderlijke servers. Het ondersteunen van geografisch verspreide opslagruimtes, waarbij groepen knopen in verschillende datacenters zijn geplaatst.

Op de opslagknopen worden gegevens bewaard in het RAM of in lokale opslag op basis van de RocksDB-bibliotheek. Bij permanente opslag worden de gegevens in versleutelde vorm opgeslagen (de encryptiesleutel kan door de client worden gedefinieerd of op het niveau van de proxy worden ingesteld).

Voor toegang tot de database vanuit applicaties is er een clientbibliotheek beschikbaar, die een API biedt voor applicaties in de talen Java, Go en C++. De clientzijde is zo eenvoudig mogelijk gehouden, terwijl complexe logica en instellingen waar mogelijk naar de SDB zijn verplaatst. De interactie tussen de client en de load balancer of proxy vindt plaats via een versleuteld communicatiekanaal. Voor het beheer en het verzenden van aanvragen kan een command-line interface worden gebruikt, die alle mogelijkheden van de client API reproduceert.
Het systeem is ontworpen voor het verwerken van verzoeken met voorspelbaar lage latencies. Bijvoorbeeld, een cluster van drie opslagnodes en één proxy, samengesteld uit omgevingen n1-highmem-32 (32 CPU Intel Xeon 2.30GHz, 214G RAM en 450G opslag op basis van SSD), kon vaste latencies bieden die niet hoger waren dan 2,5 ms in 95% van de gevallen en 16 ms in 99% bij de verwerking van 200 duizend gelijktijdige TLS-verbindingen en een doorvoer van 15 duizend verzoeken per seconde (bij 3000 gelijktijdige verbindingen en een doorvoer van 80 duizend verzoeken per seconde waren de latencies niet hoger dan 6 ms in 95% van de gevallen en 15 ms in 99%). In PayPal bedienen services op basis van JunoDB ongeveer 350 miljard verzoeken per dag.

Bron: opennet.ru
