PayPal открыла исходные тексты СУБД JunoDB
PayPal открыла исходные тексты СУБД JunoDB, манипулирующей данными в формате ключ-значение. Система спроектирована с расчётом на высокую безопасность, горизонтальную масштабируемость, отказоустойчивость и способность обрабатывать сотни тысяч одновременных соединений с предсказуемыми задержками.
Почти все сервисы самой В PayPal работают на JunoDB. Код проекта написан на языке Go (клиентская библиотека на Java) и распространяется под лицензией Apache 2.0.
При дальнейшей его разработке будут приниматься исправления, улучшения и изменения от сообщества.
Архитектура JunoDB основана на использовании балансировщика нагрузки, который принимает запросы от клиентских приложений и распределяет их между прокси-серверами, одновременно обращающимися к группе серверов хранения при выполнении запроса. Каждый прокси-сервер устанавливает соединения сразу со всеми серверами хранения и перенаправляет запросы к группе серверов хранения на основе индекса секционирования, который хранится в распределённой системе хранения конфигурации etcd.
Данные разбиваются по секциям с привязкой к узлам хранения с использованием хэширования. Это позволяет уменьшить перемещение данных при увеличении или уменьшении узлов в кластере. Для обеспечения отказоустойчивости каждая порция данных реплицируется на нескольких узлах хранения. Также можно создавать территориально распределённые хранилища, где группы узлов размещены в разных дата-центрах.
На узлах хранения данные размещаются в оперативной памяти или в локальном хранилище на базе библиотеки 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 тысяч запросов в секунду.
В PayPal сервисы на базе JunoDB обслуживают около 350 млрд запросов в день.