Компания PayPal открыла The initial texts of the fault-tolerant DBMS junodb , which manipulates the data in the key-value format. The system is originally designed with an eye on high safety, horizontal scalability, failure tolerance and the ability to process hundreds of thousands of simultaneous compounds with predictable delays. In PayPal, almost all services, from the entry of users to processing financial transactions, are tied to Junodb. The project code is written in GO (client library on Java) and is distributed under the Apache 2.0 license. With the further development of will be accepted corrections, improvements and changes from the community.
Junodb architecture is based on the use of a load balancer receiving requests from client applications and distributing them between proxy servers, simultaneously turning to a group of storage servers when performing a request. Each proxy server sets connections immediately with all storage servers and redirects requests to the storage group based on the sectionaling index, which is stored in the distributed storage system for the ETCD configuration.
The data is section and tied to storage nodes using hashing, which allows reducing the movement of data with an increase or decrease in the nodes in the cluster. To ensure failure tolerance, each portion of data is replicated on several storage nodes, which allows you to save information when you fail individual servers. The creation of territorially distributed storage facilities is supported, in which groups of nodes are placed in different datacities.
On the storage assemblies are placed in RAM or in a local storage based on the RockSDB library. With constant storage, the data is placed in an encrypted form (the encryption key can determine both the client and set at the proxy level).
To appeal to the database from applications, a client library is supplied, providing API for applications in Java, GO and C ++ languages. The client part is as simplified as possible, and the complex logic and settings are made to the side of the DBMS if possible. The interaction between the client and the balancer or proxy is carried out through the encrypted communication channel. To manage and send requests, you can use command line interface , which reproduces all the capabilities of the client API.