皆さんこんにちは、ビビッドガーデンCTOの西尾です。
食べチョクでは2024年5月23日より、Ruby3.3.1とYJITの運用を開始しました。 その結果、サイト全体のレスポンスが10%ほど高速化されましたので、詳細をご報告いたします。
サイト全体のパフォーマンスが10%高速化
以下は食べチョクの商品詳細ページのパフォーマンスです。
食べチョクはECサイトであり、商品詳細ページが最もよく見られるページとなっています。 このページのレスポンスが150〜160msだったところが、140ms程度まで改善しました。
最もよく見られるページが10%高速化したことは、すなわちサイト全体のパフォーマンスが10%高速化したということです!
商品一覧ページのレスポンスも改善
商品一覧ページのレスポンスも改善しました。 もともと300ms近くだったレスポンスタイムが、Ruby3.3.1 + YJITの導入により250〜270msまで改善しました。
ただし、食べチョク社内ではGETレスポンスタイムを200ms以下にしようという取り組みを続けており、このページのレスポンスタイムはまだ満足のいくものではありません。 引き続きパフォーマンス改善に努めてまいります。
導入にあたり発生したあれこれ
YJITの導入は以前から社内インフラチームで検討しており、Ruby3.3系になったら導入しようと計画していました。 しかし、Ruby3.3.0では動作が不安定になるという問題が発覚したため、導入を見送っていたのがあります。
この問題の関連Issueは https://bugs.ruby-lang.org/issues/20085 や https://github.com/ruby/ruby/pull/9371 です。
2024年4月23日にリリースされたRuby3.3.1でこの問題は修正されましたが、今度はbootsnapに関する不具合が発覚し、Railsが立ち上がらないという問題に直面しました。 関連Issueは https://bugs.ruby-lang.org/issues/20450 です。
このコメントにあるようにパッチを適用することでRuby3.3.1でも動作するようになりました。 具体的には以下コマンドでRubyのインストールをしなおしました。
rbenv install -v --patch 3.3.1 < <(curl -s https://raw.githubusercontent.com/havenwood/rvm-1/696d4f652864109a0cffff62e30a9e405fb0636a/patches/ruby/3.3.1/fix_bootsnap.patch)
パッチを当てることでRuby3.3.1でも動くようになったのですが、このままパッチをあててまで本番リリースするのか、急いでリリースしなくても次のリリースまで待てばいいんじゃないの? といった声はメンバーからあがりました。
ただ、今回はYJITを有効化するとサイトのパフォーマンスが10%向上する! みたいな記事をちらほらみかけ、Rubyを変えるだけでパフォーマンスがあがるんだから導入しない理由はない! という話をしたところ社内エンジニアの納得も得られたので、Ruby3.3.1 + YJIT導入に踏み切りました。
パフォーマンスがあがるといったわかりやすい理由があると、バージョンアップのモチベーションにつながるのだなと感じました。
まとめ
Ruby3.3.1 + YJITを有効化することで、食べチョクのパフォーマンスは10%高速化しました。 Railsを使っている皆さまも、ぜひYJITの導入を検討してみてください。
これからも食べチョクのさらなるパフォーマンス改善に取り組んでまいります。