Reimplement sharding in Rust
На данный момент для шардирования используется тарантул библиотека на Lua: vshard
При создании Picodata одним из важных принципов, на котором всё строится -- простота системы, отсутствие "слоёного пирога" из слоёв готовых под-систем. Использование библиотеки vshard этому напрямую противоречит. На данный момент мы вообще не контролируем то, что происходит в системе шардирования -- одна из самых важных систем, на которой строится наша киллер фича - движок распределённого SQL. Вот список проблем с которыми мы уже сталкиваемся из-за невозможности контролировать код вшарда:
- Системная таблица _bucket создаётся в непонятный момент, который мы можем контролировать только косвенно. Из этого выливаются такие проблемы: #1128 (comment 111845)
- Ребалансировка бакетов происходит непонятным образом из-за чего наблюдаем недетерминизм и флакающие тесты: например #1124 (closed)
- ...
Мы планируем её заменить своей кастомной имплементацией на Rust. Мы ожидаем от этого получить:
- Улучшения в производительности (луа)
- Улучшения в читаемости и качестве кода (нет переключения с луа на раст)
- Синхронизацию с говернором
- Улучшения в алггоритме шардинга?
Дополнительные требования:
- переписывание не должно ухудшать производительность пикодаты, поэтому разработку стоит вести на отдельной ветке до тех пор, пока замена не станет как минимум бесплатной, т.к. замена по частям может привести к дополнительному оверхеду
- интерфейс вшардовых хранимок стоит поддержать без изменений, чтобы была возможность апгрейда кластера со луа версией вшарда
- фичи вшарда, которые не используются в сброде, стоит удалить, ради упрощения системы
- код по возможности стоит структурировать с возможностью релизить как отдельный модуль для тарантула (только непонятно зачем)
Edited by Georgy Moshkin