PayPal открыла исходные тексты СУБД JunoDB

PayPal открыла исходные тексты СУБД JunoDB, манипулирующей данными в формате ключ-значение. Система спроектирована с расчётом на высокую безопасность, горизонтальную масштабируемость, отказоустойчивость и способность обрабатывать сотни тысяч одновременных соединений с предсказуемыми задержками. 

9d67a5d256e6cae863b0ae3ce6d9b642.JPG

Почти все сервисы самой В PayPal работают на JunoDB. Код проекта написан на языке Go (клиентская библиотека на Java) и распространяется под лицензией Apache 2.0. 

При дальнейшей его разработке будут приниматься исправления, улучшения и изменения от сообщества.

Архитектура JunoDB основана на использовании балансировщика нагрузки, который принимает запросы от клиентских приложений и распределяет их между прокси-серверами, одновременно обращающимися к группе серверов хранения при выполнении запроса. Каждый прокси-сервер устанавливает соединения сразу со всеми серверами хранения и перенаправляет запросы к группе серверов хранения на основе индекса секционирования, который хранится в распределённой системе хранения конфигурации etcd.

Данные разбиваются по секциям с привязкой к узлам хранения с использованием хэширования. Это позволяет уменьшить перемещение данных при увеличении или уменьшении узлов в кластере. Для обеспечения отказоустойчивости каждая порция данных реплицируется на нескольких узлах хранения. Также можно создавать территориально распределённые хранилища, где группы узлов размещены в разных дата-центрах.

c1d95c8b6f4b91958272f9a1b9f902c4.JPG

На узлах хранения данные размещаются в оперативной памяти или в локальном хранилище на базе библиотеки RocksDB. При постоянном хранении они находятся в зашифрованном виде (ключ шифрования может определять как клиентом, так и задаваться на уровне прокси).

Для обращения к БД из приложений поставляется клиентская библиотека с API для приложений на языках Java, Go и C++. Взаимодействие между клиентом и балансировщиком или прокси осуществляется через шифрованный канал связи. Для управления и отправки запросов можно использовать интерфейс командной строки, который воспроизводит все возможности клиентского API.

Система спроектирована для обработки запросов с предсказуемыми низкими задержками. Так, кластер из трёх узлов хранения и одного прокси, сформированный из окружений n1-highmem-32 (32 CPU Intel Xeon 2.30GHz, 214G ОЗУ и 450G хранилище на базе SSD), смог предоставить фиксированные задержки в 2,5 мс в 95% случаев и 16 мс в 99% случаев при обработке 200 тысяч одновременных TLS-соединений и потоке в 15 тысяч запросов в секунду.

de415419b18db5c7eb325cfebc6d36ca.JPG

В PayPal сервисы на базе JunoDB обслуживают около 350 млрд запросов в день.

© Habrahabr.ru