Максим Бабенко — Как мы адаптировали динамические таблицы YTsaurus для хранения блобов

Ближайшая конференция SmartData: #SmartData #DataEngineering #IT #conference #jugrugroup YTsaurus, как и многие другие системы, использует технику LSM (log-structured merge tree) для хранения и обновления данных в KV-таблицах. При некоторых паттернах нагрузки, однако, она показывает себя не с лучшей стороны. Например, если в ячейках таблицы хранятся блобы достаточно крупного размера, то фоновые процессы compaction вынуждены постоянно перезаписывать их, тратя впустую сеть, CPU и ресурсы дисковой подсистемы. Для того чтобы повысить эффективность работы системы, команда реализовала альтернативный подход, который позволил вынести блобы и хранить их отдельно от «обычных» табличных данных. При этом пришлось особым образом модифицировать алгоритмы compaction, чтобы, тем не менее, уметь собирать «мусор» среди блобов и обеспечить подходящий трейдофф между занимаемым местом на диске (space amplification) и объемом постоянно перезаписываемых данных (write amplification). В качестве бонуса применили данный подход для ряда таблиц, которые по требованиям латентности чтения, были вынуждены держать в RAM. В итоге удалось вынести (под видом блобов!) часть их данных на диски и в разы сократить потребление RAM, сохранив при этом низкое время чтения на высоких квантилях. В процессе внедрения пришлось значительно доработать IO-стек, перейдя на io_uring, и слой блоб-хранилища, добавив в него алгоритм consistent hashing для выбора метода расположения реплик данных. Скачать презентацию с сайта —
Back to Top