
Вызовите Rust — у нас тут медленно!
В рамках одного из проектов я занимался реализацией высокопроизводительного процессинга данных, где требовалось интенсивное чтение и запись больших объемов данных в формате Apache Parquet.
После анализа существующего Java-стека и проведения бенчмарков стало ясно, что для задач data plane гораздо эффективнее использовать современный нативный движок, в то время как control plane логично оставить на Java. В итоге был выбран DataFusion — движок запросов на Rust, используемый, например, в InfluxDB и других популярных базах данных.
Реализация аналогичного по производительности решения на Java заняла бы более года и потребовала форка нескольких проектов. Мы сделали наше решение на базе DataFusion, используя Project Panama (FFI).
В докладе поделюсь практическим опытом построения подобного решения:
- С какими трудностями придется столкнуться при интеграции Rust и Java.
- Как устроен Project Panama (FFI и FFM) и какие его части особенно важны.
- Как собрать кроссплатформенную Rust-библиотеку и встроить ее в Java-проект.
- Как спроектировать удобный и безопасный API.
- Как работать с указателями, колбэками, управлением памятью и логированием между языками.
Будет полезно разработчикам, которые хотят повысить производительность своих Java-приложений за счет интеграции с нативным кодом или использовать сторонние библиотеки, написанные под другие языки программирования и среды.