Практический пример языка Rust: сообщество выбирает Rust для npm

задняя часть Программа перевода самородков Rust

Практический пример языка Rust: сообщество выбирает Rust для npm

Использование Rust для устранения узкого места регистрации пакетов npm, вызванного производительностью процессора

Язык Rust на npm

Факты и цифры:

共有超过 836,000 个 JavaScript 包可用

每个月使用 npm 下载的软件包超过三百亿

下载来自于超过一千万个用户

npm, Inc.npmjs.comКомпания, стоящая за веб-сайтом и службой реестра npm. Это крупнейший реестр программного обеспечения в мире, который загружают 1,3 миллиарда пакетов в день. Помимо поддержки реестров пакетов с открытым исходным кодом, npm также предоставляет продукт реестра пакетов корпоративного уровня и поддерживает инструмент командной строки для взаимодействия с информацией реестра.

Проблемы, с которыми сталкивается npm, — это требования к эффективности и масштабируемости. Если о сервисе можно забыть после деплоя, мы экономим драгоценное время на другие проблемы. Сотрудники npm также хотят иметь полезное сообщество для технологий, которые они используют. Rust отвечает этим требованиям, а также частично используется в текущем стеке npm.

Проблема: масштабирование сервиса, ограниченного производительностью ЦП

Команда инженеров npm постоянно беспокоится о проблемах с производительностью, которые могут возникнуть по мере экспоненциального роста пакетов npm. В большинстве случаев операционная производительность npm ограничена сетью, а JavaScript достаточно для достижения целей производительности. Однако служба проверки подлинности, которая решает, разрешено ли пользователю публиковать пакет, является задачей, связанной с процессором, которая, как ожидается, будет узким местом в производительности.

Этот сервис, реализованный на традиционном JavaScript в Node.js, в любом случае нужно будет переписать, поэтому команда npm воспользовалась этой возможностью, чтобы рассмотреть вопрос о повторной реализации сервиса до того, как он будет понижен, как для модернизации кода, так и для повышения производительности сервиса.

Рассматриваемые решения

При рассмотрении альтернативных технологий команда NPM быстро отклонила реализации C, C ++ и Java и уделять пристальное внимание к языку и языке ржавчины.

Решение на C или C++ больше не является разумным вариантом, по мнению команды инженеров npm. «Я не верю, что смогу написать HTTP-приложение на C++ и опубликовать его в Интернете», — объясняет инженер npm Крис Дикинсон. Эти языки требуют опыта в управлении памятью, чтобы избежать ошибок, которые могут привести к катастрофическим проблемам. Даже для повышения производительности компания npm не может мириться с проблемами безопасности, системными сбоями и утечками памяти.

Java также не рассматривается, потому что для развертывания любой программы на рабочем сервере вам нужно принести JVM (Java Virtual Machine) и соответствующие библиотеки классов. Это сложная последовательность операций, требующая потребления ресурсов и столь же неприемлемая, как небезопасность C или C++.

Принимая во внимание эти требования, выбранный язык программирования должен:

  • безопасность памяти
  • Может быть скомпилирован в автономные, легко развертываемые двоичные файлы
  • Всегда превосходит JavaScript

Итак, последнее, что нужно учитывать, — это Go и Rust.

оценивать

Чтобы оценить кандидата, команда NPM переписывает авторизованные сервисы на Node.js, языке Go и языке Rust соответственно.

Сервисы, переписанные на Node.js, используются в качестве основы для оценки изменений, внесенных в Go и Rust. Как и следовало ожидать, в npm много экспертов по JavaScript. Переписывание службы авторизации на Node.js заняло около часа, а производительность была примерно такой же, как и в прошлом.

Переписывание сервиса авторизации на Go заняло 2 дня. Попутно команда npm была разочарована отсутствием решения для управления зависимостями. Компания npm стремится сделать управление зависимостями JavaScript предсказуемым и простым в использовании, и они ожидают таких же инструментов управления зависимостями мирового класса в других языковых экосистемах. Процесс глобализации установки зависимостей Go и перспектива совместного использования версий проекта (стандарт Go на момент их оценки) не были привлекательными.

Когда они начали реализовывать на Rust, они обнаружили разительный контраст в управлении зависимостями. «В языке Rust совершенно потрясающее управление зависимостями», — с энтузиазмом заявил один инженер, отметив, что стратегия управления зависимостями Rust была вдохновлена ​​npm. Инструмент командной строки Cargo, который поставляется с установкой языка Rust, аналогичен инструменту командной строки npm: Cargo координирует каждую версию зависимости в каждом проекте отдельно, так что среда, в которой создается каждый проект, не влияет на окончательный результат выполнения. . Опыт разработки на языке Rust удобен и соответствует ожиданиям команды npm, на которую повлиял JavaScript.

Язык Rust имеет совершенно потрясающее управление зависимостями.

На самом деле переписывание сервиса авторизации на Rust заняло больше времени, чем на JavaScript и Go: на знакомство с языком и его реализацию ушло около недели. Rust кажется более сложным языком программирования. В дизайн языка предварительно загружены решения об использовании памяти, которые отличаются от других распространенных языков программирования, чтобы обеспечить безопасность памяти. «Вы можете написать правильную программу, но вы должны учитывать каждый аспект программы», — сказал Дикинсон. Однако, когда у инженеров возникали проблемы, сообщество Rust любезно отвечало на вопросы и помогало. Это позволяет команде npm переписывать сервисы на Rust и развертывать их в производственных средах.

результат

Мой самый большой комплимент Rust в том, что он «скучный».

Первая программа npm на Rust не вызвала никаких тревог за полтора года использования в производственной среде. «Мой самый большой комплимент Rust заключается в том, что он «скучный», — сказал Дикинсон, — и это отличный комплимент». Процесс развертывания нового сервиса Rust прост, и вскоре о нем забывают, потому что он редко вызывает проблемы в работе . Общий опыт развертывания служб JavaScript в рабочей среде в npm заключается в том, что служба тщательно отслеживается на наличие ошибок и чрезмерного использования ресурсов, что требует отладки и перезапуска.

общественные дела

npm назвал сообщество Rust положительным фактором в процессе принятия решений. Некоторые аспекты сообщества Rust, которые они считают ценными, — это его инклюзивность, дружелюбие и надежный процесс принятия сложных технических решений. Эти аспекты облегчают изучение языка Rust и разработку решений, а также гарантируют, что язык будет продолжать улучшаться здоровым и устойчивым образом.

Минусы: поддержка нескольких технологических стеков

Каждое техническое решение требует взвешивания слабых сторон и недостатков, и это не исключение языка Rust для производства NPM. Максимальный недостаток внедрения RUST в NPM заключается в том, что существующие стеки технологий JavaScript и новые стеки технологий Rust имеют свои собственные решения для мониторинга состояния, ведения журнала и оповещения, и поддержка этих решений влечет за собой определенную нагрузку. Как молодой язык, Rust еще не использовался для завершения стандартных библиотек продуктов промышленного уровня и лучших практик, но мы надеемся, что он будет реализован в ближайшем будущем.

в заключении

Язык Rust — это расширяемое и простое в развертывании решение. Он может занимать меньше ресурсов, не влияя на безопасность памяти. Он имеет инструмент модернизации для системного программирования. Несмотря на то, что есть еще лучшие практики и инструменты, которые необходимо улучшить, создание сообщества гарантирует долгосрочный успех. По этим причинам NPM выбрал RUST, чтобы справиться с узким местом производительности ЦП.

Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.


Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.