Skip to content

Reimplement sharding in Rust

На данный момент для шардирования используется тарантул библиотека на Lua: vshard

При создании Picodata одним из важных принципов, на котором всё строится -- простота системы, отсутствие "слоёного пирога" из слоёв готовых под-систем. Использование библиотеки vshard этому напрямую противоречит. На данный момент мы вообще не контролируем то, что происходит в системе шардирования -- одна из самых важных систем, на которой строится наша киллер фича - движок распределённого SQL. Вот список проблем с которыми мы уже сталкиваемся из-за невозможности контролировать код вшарда:

  • Системная таблица _bucket создаётся в непонятный момент, который мы можем контролировать только косвенно. Из этого выливаются такие проблемы: #1128 (comment 111845)
  • Ребалансировка бакетов происходит непонятным образом из-за чего наблюдаем недетерминизм и флакающие тесты: например #1124 (closed)
  • ...

Мы планируем её заменить своей кастомной имплементацией на Rust. Мы ожидаем от этого получить:

  • Улучшения в производительности (луа)
  • Улучшения в читаемости и качестве кода (нет переключения с луа на раст)
  • Синхронизацию с говернором
  • Улучшения в алггоритме шардинга?

Дополнительные требования:

  • переписывание не должно ухудшать производительность пикодаты, поэтому разработку стоит вести на отдельной ветке до тех пор, пока замена не станет как минимум бесплатной, т.к. замена по частям может привести к дополнительному оверхеду
  • интерфейс вшардовых хранимок стоит поддержать без изменений, чтобы была возможность апгрейда кластера со луа версией вшарда
  • фичи вшарда, которые не используются в сброде, стоит удалить, ради упрощения системы
  • код по возможности стоит структурировать с возможностью релизить как отдельный модуль для тарантула (только непонятно зачем)
Edited by Georgy Moshkin
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information