Запуск YJIT Ruby 3.2 в продакшене на Discourse

В Discourse мы стремились внедрить YJIT с тех пор, как команда инфраструктуры Ruby on Rails из Shopify объявила его готовым для промышленного использования. После того как мы увидели многообещающие результаты локальных тестов, в начале мая 2023 года мы начали запускать наши промышленные приложения Rails с включённым YJIT в Ruby 3.2 на выбранных кластерах. Затем мы потратили некоторое время на оценку его производительности в реальных условиях. Мы рады поделиться полученными положительными результатами. На основе этих данных мы теперь включили YJIT во всех наших хостинг-сервисах, а пользователи с собственным хостингом могут при желании сделать то же самое.


Это тема-спутник для оригинальной записи на сайте https://blog.discourse.org/2023/05/running-ruby-3-2s-yjit-in-production-at-discourse/
21 лайк

Мы начали тестирование производительности Discourse с YJIT в ноябре 2022 года, а с января этого года начали запускать Meta под YJIT периодически. YJIT стал одной из причин, позволивших нам ускорить обновление с Ruby 2.7 до Ruby 3.2 всего за несколько месяцев, и я в восторге, что он наконец-то здесь. Ещё больше я рад тому, что улучшения, которые появятся в Ruby 3.3, выглядят ещё лучше!

14 лайков

Развитие Ruby впечатляет… Я думал, что все крутые ребята сейчас на Python?! :sweat_smile:

Отличная работа, команда, что вы держите темп согласно дорожной карте Ruby.

12 лайков

Наверное, глупый вопрос, но является ли «файл определения контейнера» файлом app.yml? Я раньше никогда не слышал, чтобы его так называли. Спасибо!

3 лайка

Да, всё верно. Мы использовали полное название, так как некоторые пользователи могут переименовывать файлы или иметь несколько файлов «app.yml».

5 лайков

Очень интересно было бы сравнить Ruby 2.7 и 3.2 с JIT!

2 лайка

Из моих записей от 4 января:

Только что перезапустил

Ruby Сервер p категории главная тема категории пользователь главная пользователь тема пользователь категории админ главная админ тема админ
2.7.5 Unicorn 50 34 59 36 82 112 93 67 94 72
3.1.2 Unicorn 50 34 61 36 82 112 91 67 94 70
3.2.0 Unicorn 50 33 59 36 82 111 90 68 92 72
3.2.0 +YJIT Unicorn 50 25 42 29 67 89 77 58 76 56

Ускорение от 2.7 до 3.2 + YJIT

Ускорение категории главная тема категории пользователь главная пользователь тема пользователь категории админ главная админ тема админ
1.36 1.40 1.24 1.22 1.25 1.20 1.15 1.23 1.28

7 лайков

И это без каких-либо измеренных данных, основываясь лишь на том, что чувствует и видит один или несколько пользователей.

Для меня этот форум стал медленнее уже некоторое время. Почти каждый раз при открытии темы я на короткое мгновение вижу вращающийся круг. Конечно, это может быть и почти наверняка связано с серверами и расстоянием между США и Европой. Но Meta работает медленнее, чем раньше.

Я начал использовать YJIT на своём форуме, и когда сервер находится в Германии, а пользователи из Финляндии, все говорят, что все темы открываются быстрее. Это на самом деле довольно забавно, потому что мы не замечаем изменений в чистом времени загрузки менее 200 мс.

1 лайк

Я уже довольно давно размышляю о фиксированном (или последовательном) времени загрузки страниц. Имеется в виду, чтобы время загрузки для каждой страницы и каждого пользователя было максимально стабильным.

Информация о финских пользователях интересна; она заставила меня задуматься, не стоит ли маршрутизировать пользователей на основе GEO IP или задержки на разные серверы с разной нагрузкой, просто чтобы сократить время отклика для них.

1 лайк

Эти результаты получены без учёта обращений к БД?

Я включил это на exiges.com.

Честно говоря, я не проводил тестирование производительности, но чувствую разницу в том, как открываются темы и обсуждения.

Это должно быть положительным шагом, так как пользователи пока не сообщали об обратном :slight_smile:

1 лайк

Да, мы измеряем только время выполнения кода на Ruby, исключая запросы к базе данных и команды Redis из временных меток.

1 лайк