[Перевод] Ускоряем self-hosted Convex в два раза: AOT-компиляция TypeScript-функций в Wasm

habrahabr.ru · world
Full story

The article describes doubling the speed of self-hosted Convex by ahead-of-time compiling TypeScript functions into WebAssembly. Convex is a relatively new but growing framework for reactive web applications, where transactional queries and mutations are written in TypeScript with consistency guarantees. The work concerns the self-hosted convex-backend, specifically a patched version, because the official version is not suitable for production and appears not to have been tested at scale.

Convex – это новый, но набирающий популярность фреймворк для реактивных веб-приложений, который позволяет писать транзакционные квери (queries) и мутации (mutations) на TypeScript с гарантиями консистентности. Вся статья относится к self-hosted версии Convex: convex-backend, а точнее, к моей пропатченной версии оного, так как “официальная” версия не пригодна к работе в продакшене и вряд ли тестировалась на сколь-нибудь нагруженном кейсе. Моя версия работает на виртуальном сервере с 32 ядрами и 64Гб памяти и обрабатывает до 15 тысяч Convex-кверей и мутаций в минуту. Я навайбкодил convex-wasm-compiler, который компилирует Convex-квери и мутации в WebAssembly, и соответствующий патч для convex-backend, позволяющий выполнять скомпилированные в Wasm Convex-функции на файберах Wasmtime прямо в Tokio рантайме convex-backend. TLDR: квери и мутации в среднем работают в 2 раза быстрее, хвосты задержек сократились втрое. Объём памяти, который сервер удерживает под готовые к выполнению окружения (V8-контексты или Wasm-окружения), уменьшился на 80%. Читать далее

Read full article → Compare