Как стать автором
Обновить

Uber перенесла базу данных c 1 трлн записей из DynamoDB в LedgerStore

Время на прочтение3 мин
Количество просмотров5.1K

Uber перенесла все свои данные о платёжных транзакциях из DynamoDB и хранилища BLOB-объектов в новое долгосрочное решение — LedgerStore. Компания стремится сократить расходы на $6 млн ежегодно.

Двухфазная фиксация записи для строго согласованных индексов
Двухфазная фиксация записи для строго согласованных индексов

Ранее Uber уже сократила использование DynamoDB для хранения «горячих» данных 12-недельной давности. Этот шаг привёл к значительной экономии и упрощению архитектуры хранения.

Uber создала свою платёжную платформу Gulfstream в 2017 году и использовала DynamoDB для хранения данных. Из-за роста затрат на хранение более старые записи переносили в TerraBlob, сервис, похожий на S3, который создали в Uber.

Тем временем компания начала работу над специализированным решением для хранения финансовых транзакций с гарантиями целостности данных. Каушик Девараджайя, технический руководитель Uber, объясняет: «LedgerStore — это неизменяемое решение для хранения, которое обеспечивает поддающуюся проверке полноту данных и гарантии правильности для обеспечения их целостности для транзакций. LedgerStore поддерживает надёжные и согласованные индексы. Для строго согласованных индексов хранилище данных использует двухфазную фиксацию. Сначала оно сохраняет отступ в индексе, а затем — запись. Наконец, если запись успешна, намерение асинхронно фиксируется или откатывается в случае сбоя. Во время чтения любые записи с незафиксированными намерениями либо фиксируются (если чтение завершается успешно), либо удаляются (если чтение записи завершается неудачно) асинхронно. LedgerStore реализует в конечном итоге согласованные индексы, используя материализованные представления из собственной базы данных Docstore, распределённой БД, построенной на основе MySQL». 

Чтобы выгрузить старые данные реестра в холодное хранилище, LedgerStore использует индексы временного диапазона для поддержки временных запросов. Исходное решение использовало две таблицы в DynamoDB: одну, оптимизированную для записи, а вторую — для чтения. Новый дизайн использует базу данных Docstore с одной таблицей и задействует сканирование префиксов для эффективного чтения.

Заполнение индекса из холодного хранилища
Заполнение индекса из холодного хранилища

LedgerStore поддерживает управление жизненным циклом индекса, автоматизируя переиндексацию данных в случае изменения его определения. Процесс создает новый индекс, заполняет данные из старого, выполняет соответствующие проверки, меняет индекс и удаляет старый.

Компания столкнулась с уникальными проблемами при переносе петабайт данных финансовых транзакций в LedgerStore. Она использовала теневую и автономную проверку, чтобы гарантировать правильность миграции, а также производительность и масштабируемость LedgerStore в производственной среде. Для теневой проверки компания Gulfstorm дважды записывала данные в DynamoDB и LedgerStore и сравнивала возвращаемые при чтении между двумя хранилищами данных.

Кроме того, Uber реализовала автономную проверку старых данных в сочетании с инкрементным заданием обратного заполнения, выполняемым в Apache Spark. Инженеры использовали несколько мер для контроля процесса и устранения любых проблем, включая динамическое управление скоростью для корректировки скорости обработки в зависимости от производственного трафика, и аварийную остановку в случае серьёзных проблем.

Команда придерживалась консервативного подхода к развёртыванию и разработала резервный вариант получения данных из DynamoDB на случай, если они не будут найдены в LedgerStore. В целом миграция прошла успешно, и в компании не было никаких простоев или сбоев во время и после неё.

Также можно прочитать о том, как в Uber проектировалась система кэширования на основе Redis.

Теги:
Хабы:
Всего голосов 4: ↑3 и ↓1+5
Комментарии4

Другие новости

Истории

Работа

Ближайшие события

AdIndex City Conference 2024
Дата26 июня
Время09:30
Место
Москва
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область