Discourse에서 Ruby 3.2의 YJIT를 프로덕션 환경에서 실행하기

Discourse에서는 Shopify의 Ruby on Rails 인프라 팀이 YJIT가 프로덕션 환경에서 사용 가능하다고 발표한 이후 YJIT 도입에 큰 관심을 가져왔습니다. 유망한 로컬 벤치마크 결과를 확인한 후, 2023년 5월 초 일부 클러스터에서 Ruby 3.2의 YJIT를 활성화하여 프로덕션 Rails 애플리케이션을 실행하기 시작했습니다. 이후 실제 환경에서의 성능을 측정하기 위해 시간을 보냈습니다. 관찰한 긍정적인 결과를 공유하게 되어 기쁩니다. 이러한 발견을 바탕으로 현재 모든 호스팅 환경에서 YJIT를 활성화했으며, 자체 호스팅 사용자들도 이를 선택적으로 활성화할 수 있습니다.


이것은 https://blog.discourse.org/2023/05/running-ruby-3-2s-yjit-in-production-at-discourse/의 원본 게시물을 위한 동반 토론 주제입니다.
21개의 좋아요

2022년 11월부터 Discourse+YJIT 벤치마킹을 시작했으며, 올해 1월부터는 Meta를 YJIT로 간헐적으로 실행하기 시작했습니다. YJIT는 Ruby 2.7에서 Ruby 3.2까지의 업그레이드를 몇 달 만에 빠르게 완료할 수 있었던 이유 중 하나이며, 마침내 YJIT가 정식 도입되어 정말 기쁩니다. Ruby 3.3에 적용될 개선 사항이 더 인상적인 것 같아 더욱 기대가 큽니다!

14개의 좋아요

Ruby의 발전 속도가 정말 인상적입니다… 요즘은 쿨한 개발자분들이 전부 Python으로 넘어간 줄 알았는데요?! :sweat_smile:

Ruby 로드맵을 꾸준히 따라가고 있는 팀에게 박수를 보냅니다.

12개의 좋아요

아마도 멍청한 질문일 수도 있지만, "컨테이너 정의 파일"이 app.yml 파일을 말하는 건가요? 그전까지는 그렇게 불린다는 말을 들어본 적이 없거든요. 감사합니다!

3개의 좋아요

네, 맞습니다. 일부 사용자가 “app.yml” 파일을 이름 변경하거나 여러 개를 보유할 수 있으므로 긴 이름을 사용했습니다.

5개의 좋아요

JIT를 사용하여 Ruby 2.7과 3.2를 비교하면 매우 흥미로울 것 같습니다!

2개의 좋아요

1월 4일 메모에서:

방금 다시 실행했습니다

Ruby Server p categories home topic categories user home user topic user categories admin home admin topic admin
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로 향상된 속도

Speedup categories home topic categories user home user topic user categories admin home admin topic admin
1.36 1.40 1.24 1.22 1.25 1.20 1.15 1.23 1.28

7개의 좋아요

측정된 데이터 없이, 단지 한 명이나 몇몇 사용자의 느낌과 시각적 인식에만 의존하고 있습니다.

저에게 이 포럼은 한동안 느려진 것 같습니다. 주제를 열 때마다 짧은 순간이지만 거의 매번 로딩 중 표시가 보입니다. 물론 미국과 유럽 간의 서버와 거리 문제에서 비롯된 것일 수 있고, 실제로 그럴 가능성이 높습니다. 하지만 Meta는 예전보다 느려졌습니다.

저는 포럼에서 YJIT를 사용하기 시작했는데, 서버가 독일에 있고 사용자가 핀란드인일 때 모든 주제가 더 빠르게 열린다고 합니다. 이는 사실 꽤 재미있는 일입니다. 순수한 로딩 시간의 변화가 200ms 미만이면 우리는 그 차이를 알아차릴 수 없기 때문입니다.

1개의 좋아요

저는 고정된(또는 일관된) 페이지 로딩 시간에 대해 꽤 오랫동안 생각해 왔습니다. 모든 페이지와 모든 사용자의 로딩 시간이 가능한 한 일관되도록 하는 것이죠.

핀란드 사용자에 대한 정보는 흥미롭습니다. 이 때문에 사용자의 GEO IP나 지연 시간을 기준으로 다른 서버로 라우팅하여 응답 시간을 절약할 수 있는지 궁금해졌습니다. 각각의 서버에는 다른 부하가 걸릴 수 있겠지만요.

1개의 좋아요

DB 접근까지 포함하지 않은 결과인가요?

exiges.com에서 이 기능을 활성화했습니다.

솔직히 벤치마크를 수행하지는 않았지만, 토픽과 스레드가 열리는 방식에 차이가 느껴집니다.

사용자들이 다른 의견을 제시하지 않았으므로 긍정적인 변화라고 생각합니다 :slight_smile:

1개의 좋아요

네, 타이밍 측정에서는 DB 쿼리와 Redis 명령을 제외하고 Ruby 코드 실행에 걸린 시간만 측정하고 있습니다.

1개의 좋아요