2009-11-28 3 views
5

내가 선택한 언어는 루비이지만, 루비가 많은 요청을 처리 할 수 ​​없다는 트위터 때문에 알고있다. 소켓 개발에 사용하는 것이 좋습니다. 또는 erlang이나 haskell과 같은 기능적 언어를 사용하거나 twitter 개발자처럼 scala를 사용해야합니까?소켓 프로그래밍에 루비를 사용하는 것이 좋습니다.

+3

"나는 루비가 많은 요청을 처리 할 수 ​​없다는 트위터 때문에 알고있다." 극단적으로 비정형 인 회사의 특정 상황을 기반으로 기술을 결정해서는 안됩니다. –

+1

흠. 트위터 때문에 Ruby *가 많은 요청을 처리 할 수 ​​있다는 것을 알아야하지 않습니까? 트위터는 인터넷에서 가장 인기있는 웹 사이트 중 하나입니다 (Alexa에 따르면 # 14). 확장 성 문제는 사용자가 경험하게 될 수준을 훨씬 뛰어 넘을 수 있으며 사용하는 언어 및 프레임 워크에 관계없이 발생합니다. 트위터가 지금까지 커지고 빨랐다는 사실은 때로는 몇 가지 문제가 있더라도 실제로 많은 일을하고 있다고 말합니다. –

+0

실제로 소켓 레벨에서 코드를 작성 하시겠습니까? 아니면 단순히 소켓을 사용하는 라이브러리/프레임 워크를 사용 하시겠습니까? – Jim

답변

15

저는 회사에서 Ruby를 사용하고 있습니다. 우리는 지금까지 34,000,000,000 이상의 히트를 처리했습니다. 우리는 하루에 약 10,000,000 건의 조회수를 처리하는 데 아무런 문제가 없습니다. 피크 히트는 하루 40,000,000 히트를 초과했습니다.

확장 성은 많은 요인에 따라 달라집니다. 우리의 데이터베이스는 읽기와 비교하여 쓰기의 비율이 너무 높습니다. 대부분의 웹 사이트는 약 90 %의 읽음 값으로 10 %의 글을 쓰지만, 우리는 50-50 %에 가깝습니다. 제 요점은 확장 성이 많은 요인에 의해 영향을 받는다는 것입니다. 웹 응용 프로그램의 경우처럼 데이터베이스가 제한되어있는 경우 사용하는 언어가 중요하지 않아 데이터베이스를 기다리는 중입니다.

대형 저울을 다룰 때 고려해야 할 사항이 많습니다. Sharding 데이터베이스, memcached, 등등 등. 당신이 당신의 어플리케이션을 위해 사용하는 언어는 하나의 측면 일 뿐이고, 확장 성의 작은 부분 일 수도 있습니다.

루비가 당신에게 좋은 옵션 일지 모르지만 다른 언어에서는 좋아할만한 것이 많이 있습니다. 얼랭 (Erlang)은 예를 들어 오류를 쉽게 복구 할 수 있도록 노력합니다.

3

루비가 가장 좋아하는 언어 인 경우 예. 좋습니다. 항상 알고있는 것과 좋아하는 것을 사용하는 것이 더 좋습니다.

+0

왜 downvoting? 제발 – luc

0

키는 소켓 멀티플렉싱을 수행하는 C/C++의 저급 라이브러리를 갖는 것입니다. 소켓 멀티플렉싱은 TCP 서버 프로세스를 진정한 다중 사용자 프로세스로 만듭니다. C에서 라이브러리 (당신이 원하는)는 libevent/libev가 될 수 있으며, C++ boost :: asio에서도 사용 가능합니다. 파이썬은 뒤죽박죽이다.

그런 라이브러리를 가져 와서 루비에서 사용한다면 대부분의 소켓 프로그램을 상당히 잘 구현할 수 있어야합니다. 멀티 프로세스에서 멀티 스레딩을 선호하는 유닉스 환경에서는 특히 그러하다.

+0

트위스트는 그것이 주장하는 것들 중 하나를하지 않는다는 것을 설명하십시오, 그것은 평범한 파이썬 소켓을 사용합니다. 그것은 멀티 코어 프로세서가 표준이 아닌 현재 쓰레드에서 모든 것을 수행합니다. 또한 ASIO가 어떻게 나아갈 수 없는지에 대한이 기사를 읽으십시오. http://www.metabrew.com/article/rewriting-playdar-c-to-erlang-massive-savings/ –

+0

소켓 멀티플렉싱은 종종 서버에 특별한 데이터 구조가 필요합니다. 이것은 종종 모든 서버에 대해 반복적으로 구현됩니다. 이러한 데이터 구조는 프리 포트 큐 (힙), 빨강 - 검정 트리 및 링크 된 목록 인 경향이 있습니다. 저수준 라이브러리에서 꼬임을 만들지 않으면 비 블로킹 소켓 멀티플렉싱을위한 사용자 공간 코드를 구현하기 위해 파이썬 기본 해시 테이블을 사용해야합니다. 당신은 나의 저급 게시물에 당신의 고귀한 순진한 견해로 대답했습니다. 여러분이 인용 한 기사는 Erlang과 ASIO가 소켓 플랙 싱을 구현하는 방법에 관해서 이야기하지 않기 때문에 완전히 논쟁의 여지가 없습니다. –

1

Erlang과 같은 기능 언어에서 성능이 향상되는 반면, Ruby의 적합성은 실제로 달성하려는 대상에 따라 달라집니다. 예를 들어, 처리 할 요청의 수는 아마도 첫 번째 질문 일 것입니다. Erlang을 사용하여 얻는 성능상의 이점이 여러분이 편안하게 사용하는 것을별로 중요시하지 않는다면, 왜 새로운 언어를 배울 필요가 없습니까?

13

트위터 팀이 루비 (특히 레일즈)에 대해 알게 된 모든 "교훈"과 스케일링이 프로젝트에 적용될지는 모르겠습니다. 그들은 대부분의 사람들이 합리적으로 볼 수있는 것보다 더 많은 교통량을보고 있습니다.

소켓과 루비에 관한 한, I like Unicorn because it's Unix을 확인하십시오. 루비에서 소켓을 다루는 것에 대해 꽤 흥미로운 내용입니다.

+0

+1 유니콘 기사에 대한 흥미로운 링크입니다. 고마워요. – ChrisInEdmonton

+1

@Chris : 그 기사가 마음에 들면,이 후속 조치 목록을 확인하십시오. - http://jacobian.org/writing/star-is-unix/ – Telemachus

1

하스켈, 얼랭 (Erlang) 또는 스칼라 (Scala)와 같은 빠르고 동시적인 언어를 사용하는 경우 적어도 원하는 고급 언어로 머물 수있는 옵션이 있습니다. Ruby를 사용하면 성능 병목 현상은 컴파일 된 C (또는 Haskell, 또는 ...)로 전환하여 어쨌든 속도를 의미합니다.

루비는 좋은 프론트 엔드 프레임 워크의 장점이 있습니다.

4

먼저 약간의 컨텍스트를 제공하고 싶습니다. 저는 스칼라 커뮤니티에서 활발히 활동하고 있습니다. 은 모든 프로젝트에서 Scala over Ruby를 선택합니다.

그래서, 실제로는 장벽을 치지 않으면 Ruby를 계속 사용하십시오. 루비가 당신이 선택한 언어라면, 당신이 언급 한 선택, 특히 정적으로 타이핑 된 것에 만족하지 않을 수도 있습니다.

새로운 언어를 배우고 대안이 필요한 경우 다시 사용할 수있는 것이 좋을 수도 있습니다. 귀하의 경우 Clojure 또는 Erlang을 권하고 싶습니다. 스칼라는 함수형 프로그래밍에 특화된 정적이고 정적 인 OO 언어이다. 다른 사람들보다 배우기는 쉽지만 실제로 동적 타이핑을 좋아하는 사람들은 정적 타이핑으로 쉽게 변환하지 않습니다.

하스켈은 가장 훌륭한 언어 중 하나입니다. (그리고 똑같이 멋진 대안보다 훨씬 더 잘 지원되고 인기가 있습니다.) 다른 것처럼 마음을 열 수 있습니다. 마스터하기가 어렵습니다.

1

저는 최근에 스칼라로 옮겼지만 꽤 많이 좋아졌지만 많은 프로젝트에서 루비를 사용했습니다. Ruby에서 네트워크 작업에 대해 좋은 점을 들었지만 (결코 시도하지 않았 음) 한 가지는 EventMachine입니다. 그것은 반응기 패턴을 뒤틀린 것처럼 사용하며 매우 견고합니다.

0

루비와 자바로 소켓을 사용하는 프로젝트가 최근에 썼다. 기본 블로킹 채팅 서버를 작성하지 않는다면 루비 소켓 구현은 문서화가 잘되어 있지 않습니다. C 또는 Java로 작성하는 것이 더 간단하다는 것을 알았습니다. 루비는 네이티브 소켓을 마무리했고, 지금은 어떻게 사용하는지 궁금합니다. 이전에 Windows, Linux 및 C의 다른 플랫폼에 많은 스트레스를 쏟아 소켓 코드를 많이 작성했습니다.

루비 코드는 매우 작아서 잘 작동합니다. 그 시점으로가는 것은 정말 고통 스럽습니다.

+0

소켓 프로그래밍에 Github Repo가 있습니까? 너라면 나에게 알려줘. 채팅 응용 프로그램을 개발하고 있습니다. 감사 – TheMouseMan

관련 문제