Операция выполнена!
Закрыть
Хабы: Rust, Программирование, Управление продуктом

Пользователь Reddit опубликовал в r/rustjerk сгенерированный ИИ пост под названием «Почему наш CTO запретил использовать Rust после одного переписывания кода». Очевидно, что этот рассказ выдуман, но у меня есть история похожая на него в том смысле, что успех проекта на Rust привёл к прекращению использования этого языка в компании.

Несколько лет назад я работал в стартапе-«единороге», во время пандемии развивавшемся невероятно быстро. Его основное приложение было написано на Ruby on Rails, а часть инструментария для работы с видео — на Node.js, но мы никак не применяли быстрые компилируемые языки наподобие Rust и Go. Через пару месяцев после моего прихода в компанию нам нужно было реализовать работающий в реальном времени сервис, который бы позволял нам получать информацию о том, кто из пользователей находится онлайн (то есть в профиле есть зелёная точка) и чем они занимаются (например: N пользователей смотрят презентацию X, M пользователей находятся в разделе маркетинга и так далее). Ничего особо сложного, но мы рассчитывали на изначальный рост до ста тысяч пользователей. Эта цель тоже не особо сложна, но большинство разработчиков согласилось, что Ruby — не лучший выбор для этого.

Начались дискуссии о выборе языка. Команда, которая должна была писать сервис, выбрала Rust, но руководство пока не было уверено, поэтому предложило написать в качестве proof of concept несколько сервисов, по одному на каждом из языков: Elixir, Rust, Ruby и Node.js. Тогда я был в отпуске, поэтому, честно говоря, не знаю, почему в этот список не вошёл Go, который мог бы стать вполне подходящим кандидатом. Спустя примерно неделю proof of concept были завершены, и мы провели их бенчмаркинг. Я не был в команде, проводившей их, но выполнял множество задач, связанных с производительностью и наблюдаемостью, поэтому помогал в бенчмаркинге. Результаты меня не удивили: Rust оказался самым быстрым и потреблял меньше всего памяти, затем шли Elixir, Node.js и Ruby. Впрочем, тонкость в том, что версию на Node.js в конечном итоге пришлось бы сделать распределённой из-за однопоточной среды выполнения. Ещё один интересный аспект заключался в том, что версия на Rust содержала проблему, вызванную тем, что разработчик при отправке сообщений клиентам использовал async future — они обходили всех клиентов, чтобы получить список каналов, в которые нужно выполнять передачу, что при высоких нагрузках блокировало среду выполнения на несколько секунд. Если знаешь, что делать, эту проблему легко решить, но новичок, скорее всего, сделал бы всё правильнее на Go или Elixir, чем на Rust. Впрочем, возможно, я и не прав, ведь другие proof of concept (PoC) были написаны людьми, имевшими опыт работы с соответствующими языками, и только PoC на Rust был написан новичком в этом языке.

Читать далее
Читайте также
СТАТЬ АВТОРОМ
НОВОСТИ

ПИШИТЕ

Техническая поддержка проекта ВсеТут

info@vsetut.pro