프로덕션 서버로서의 Webrick vs. Thin 또는 Unicorn?


117

Webrick을 프로덕션 서버로 사용해서는 안된다는 것이 당연한 것처럼 보이지만 그 이유를 언급하는 곳은 어디에도 없습니다. 합의는 다음과 같습니다. "Webrick은 개발에 적합하지만 Thin 또는 Unicorn은 생산, 기간에 대한 선택입니다."

Thin 서버의 홈페이지를 검색했는데 초당 요청에 대해 이야기했지만 주석이 없기 때문에 그래프를 실제로 이해하지 못합니다.

Webrick과 비교하여 Thin 또는 Unicorn을 사용해야하는 이유를 알려 주실 수 있습니까? Webrick을 개발에 사용하면 어떤 이점이 있습니까? 저는 Webrick이 레일과 함께 제공되기 때문에 사용해 왔으며 이것이 기본값 인 이유가 있어야한다고 생각합니다.

그런데 Heroku를 사용하고 있습니다.


Mongrel과 같은 다른 사람들과 비교할 때 느립니다.
uday

38
켄, 나는 정말 아무것도 토론하기 위해이 질문을하지 않았습니다. 모든 사람이 당연한 Webrick이 열등하다고 생각할 때 어디서나 실제 통계를 찾을 수 없기 때문에 진심으로 답을 알고 싶습니다. 나는 그 어느 당사자와도 관련이 없으며 당신이 언급 한 논쟁은 내가 진정한 호기심에서 묻는 질문입니다. 질문이 그렇게 보이지 않도록 어떻게 바꿀 수 있습니까?
Vlad 2012-06-02

24
이것은 좋은 질문입니다.
저 스팅 고든

29
이와 같은 질문은 닫히면 안됩니다. 유용하고 도움이됩니다. 모든자가 임명 콘텐츠 경찰은 물러서야합니다.
켄 스미스

22
"왜 WEBrick을 프로덕션에 사용하지 않습니까?" 제가 대답하고 싶은 질문이기 때문입니다. WEBrick을 프로덕션에 사용하려는 것은 아니지만 모든 사람들이 "당연히 For Production®이 아니기 때문에"라고 말하는 것이 성가신 것 같습니다. 그다지 분명하지 않습니다. @Vlad가 그랬던 것처럼 사람들이 마지막으로 StackOverflow에 질문하기 전에 질문을 조사하지 않을 것입니다. 받아 들여진 대답은 도움이됩니다. 적어도 몇 가지 누락 된 기능을 지적합니다. 당연히, 자신의 답변을 제공하지 않고 문제가 있다고 생각하여 질문을 닫아야한다고 주장하는 것은 도움이되지 않습니다.
Justin Force

답변:


42

몇 가지 중요한 이유

  1. Ruby로 작성되었습니다. http://github.com/ruby/ruby/tree/trunk/lib/webrick 참조 )
  2. 수정 됨 은 (특히, 수명주기 관리, 비동기 처리 등 포크 (fork)를 사전), 리디렉션, 재 작성 등 생산 웹 사이트는 일반적으로 다수의 노동자처럼, 필요로하는 많은 기능을 가지고 있지 않습니다

리디렉션 / 재 작성에 대해 언급 할 때 Webrick을 사용하면 다른 레이어 (Rack, Sinatra, Rails, 사용자 지정 Webrick 코드 등)에서 재 작성을 처리해야한다는 사실을 언급하고 있습니다. 재 작성 코드를 수행하려면 추가 루비 "핸들러"를 가동해야합니다. 트래픽이 적은 사이트의 경우 사전 예열 된 프로세스가 이미 아무 작업도 수행하지 않을 수 있으므로 괜찮을 수 있습니다. 그러나 트래픽이 더 많은 사이트의 경우 이는 프런트 엔드 서버 (Apache, Nginx 등)가 Ruby *를 가동하지 않고도 처리 할 수있는 서버에 대한 추가 부하이며 아마도 훨씬 더 빠를 것입니다.

* 예를 들어로드 밸런서 뒤에서 실행중인 경우 모든 재 작성 트래픽을 Ruby가 설치되지 않은 서버로 라우팅하고 주 서버가 기본 트래픽 만 관리하도록 할 수 있습니다. 이 재 작성 트래픽은 SEO 또는 이와 유사한 사이트 변경으로 인한 것일 수 있습니다. 또 다른 경우는 여러 구성 요소가있는 사이트 일 수 있습니다. 한 섹션은 Rails이고 다른 섹션은 PHP이며 둘 다에 대해 다시 작성해야합니다 (예 : 이전 PHP 경로를 Rails에 다시 작성).


어떤 서버를 사용하든 delayed_job을 사용하여 Heroku에서 여러 작업자를 처리 할 수 ​​없습니까?
Vlad

예, 작업이 Webrick API를 사용하지 않는 한 delayed_job은 Webrick과 관련이 없습니다 (솔직히 결합되는 코드 냄새).
Jim Deville 2012 년

Ruby 스택 외부의 리디렉션을 언급하고 있습니다. mod_rewrite 스타일 리디렉션과 같습니다. 기술적으로, 당신은 랙의 내부 리디렉션, 또는 레일, 또는, 어쩌면에 WEBrick (내가 잘못 될 수있다), 그러나 그것은 아파치 또는 Nginx에 대 비교적 저속 인 시작 루비를 필요로 할 수 있습니다
짐 년식

1
@JimDeville - 유니콘은 루비로 작성
Yarin

1
github.com/defunkt/unicorn/tree/master/ext/unicorn_http Unicorn의 상당 부분이 C에 있습니다
Jim Deville

4

WEBrick은 또한 더 긴 URI를 처리 할 수 ​​없습니다. 2083자를 초과하면 충돌이 발생합니다. Thin에는 이러한 문제가 없으므로 이미 개발 중입니다.


또한 Webrick은 내 경험상 소프트웨어를 개발 중이고 Heroku PaaS에서 WeBRICK을 선택할 때 연결이 끊어지고 자동으로 꺼집니다. 자동 꺼짐은 고속 자동 켜짐으로 보상됩니다 (Heroku의 자동 아키텍처를 통해 실행 됨). )
Daniel Antonio Nuñez Carhuayo

3

저는 단순한 일과 조기 최적화를 복잡하게 만드는 것을 좋아하지 않습니다. WEBrick은 트래픽이 적은 웹 사이트 라면 프로덕션 에 사용할 수 있습니다 . 대부분의 응용 프로그램이 있습니다.

사이트에서 이메일을 보내거나 PDF 파일을 생성하는 등 시간이 걸리는 작업을 수행 하는 경우 WEBrick을 다중 스레드로 만들어야 합니다. 한 번에 여러 요청을 처리하려고합니다.


1

과거에는 보안 문제가 있었지만 큰 이유는 프로덕션 용 서버에 비해 정말 느리기 때문입니다.


4
통계 비교를 보셨습니까? 나는 또한 사람들이 (그리고 아마도 사실 일 것입니다) 말하는 것을 듣습니다. 그러나 웹상 어디에서도 실제 통계 비교를 찾을 수 없습니다 ...
Vlad

3
Webrick은 프로덕션 서버가 아니기 때문에 누구도 실제로 Webrick을 벤치마킹하지 않는다고 생각합니다. 유니콘, 얇은 또는 승객는 잘 지원하고 더 나은 옵션이 있습니다
짐 년식

0

프로덕션 모드에서 실행할 때 webrick의 가장 큰 약점은 단일 스레드, 단일 프로세스 웹 서버라는 것입니다. 즉, 한 번에 하나의 단일 http 요청 만 처리 할 수 ​​있습니다.


단일 스레드가 아닙니다. 또는 최신 스크립트 언어가 구현되는 것과 같은 방식입니다 (GIL 사용). 그러나 webrick의 데이터베이스 액세스 및 IO는 완전히 다중 스레드입니다.
Lothar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.