내가 선택한 언어는 루비이지만, 루비가 많은 요청을 처리 할 수 없다는 트위터 때문에 알고있다. 소켓 개발에 사용하는 것이 좋습니다. 또는 erlang이나 haskell과 같은 기능적 언어를 사용하거나 twitter 개발자처럼 scala를 사용해야합니까?소켓 프로그래밍에 루비를 사용하는 것이 좋습니다.
답변
저는 회사에서 Ruby를 사용하고 있습니다. 우리는 지금까지 34,000,000,000 이상의 히트를 처리했습니다. 우리는 하루에 약 10,000,000 건의 조회수를 처리하는 데 아무런 문제가 없습니다. 피크 히트는 하루 40,000,000 히트를 초과했습니다.
확장 성은 많은 요인에 따라 달라집니다. 우리의 데이터베이스는 읽기와 비교하여 쓰기의 비율이 너무 높습니다. 대부분의 웹 사이트는 약 90 %의 읽음 값으로 10 %의 글을 쓰지만, 우리는 50-50 %에 가깝습니다. 제 요점은 확장 성이 많은 요인에 의해 영향을 받는다는 것입니다. 웹 응용 프로그램의 경우처럼 데이터베이스가 제한되어있는 경우 사용하는 언어가 중요하지 않아 데이터베이스를 기다리는 중입니다.
대형 저울을 다룰 때 고려해야 할 사항이 많습니다. Sharding 데이터베이스, memcached, 등등 등. 당신이 당신의 어플리케이션을 위해 사용하는 언어는 하나의 측면 일 뿐이고, 확장 성의 작은 부분 일 수도 있습니다.
루비가 당신에게 좋은 옵션 일지 모르지만 다른 언어에서는 좋아할만한 것이 많이 있습니다. 얼랭 (Erlang)은 예를 들어 오류를 쉽게 복구 할 수 있도록 노력합니다.
키는 소켓 멀티플렉싱을 수행하는 C/C++의 저급 라이브러리를 갖는 것입니다. 소켓 멀티플렉싱은 TCP 서버 프로세스를 진정한 다중 사용자 프로세스로 만듭니다. C에서 라이브러리 (당신이 원하는)는 libevent/libev가 될 수 있으며, C++ boost :: asio에서도 사용 가능합니다. 파이썬은 뒤죽박죽이다.
그런 라이브러리를 가져 와서 루비에서 사용한다면 대부분의 소켓 프로그램을 상당히 잘 구현할 수 있어야합니다. 멀티 프로세스에서 멀티 스레딩을 선호하는 유닉스 환경에서는 특히 그러하다.
트위스트는 그것이 주장하는 것들 중 하나를하지 않는다는 것을 설명하십시오, 그것은 평범한 파이썬 소켓을 사용합니다. 그것은 멀티 코어 프로세서가 표준이 아닌 현재 쓰레드에서 모든 것을 수행합니다. 또한 ASIO가 어떻게 나아갈 수 없는지에 대한이 기사를 읽으십시오. http://www.metabrew.com/article/rewriting-playdar-c-to-erlang-massive-savings/ –
소켓 멀티플렉싱은 종종 서버에 특별한 데이터 구조가 필요합니다. 이것은 종종 모든 서버에 대해 반복적으로 구현됩니다. 이러한 데이터 구조는 프리 포트 큐 (힙), 빨강 - 검정 트리 및 링크 된 목록 인 경향이 있습니다. 저수준 라이브러리에서 꼬임을 만들지 않으면 비 블로킹 소켓 멀티플렉싱을위한 사용자 공간 코드를 구현하기 위해 파이썬 기본 해시 테이블을 사용해야합니다. 당신은 나의 저급 게시물에 당신의 고귀한 순진한 견해로 대답했습니다. 여러분이 인용 한 기사는 Erlang과 ASIO가 소켓 플랙 싱을 구현하는 방법에 관해서 이야기하지 않기 때문에 완전히 논쟁의 여지가 없습니다. –
Erlang과 같은 기능 언어에서 성능이 향상되는 반면, Ruby의 적합성은 실제로 달성하려는 대상에 따라 달라집니다. 예를 들어, 처리 할 요청의 수는 아마도 첫 번째 질문 일 것입니다. Erlang을 사용하여 얻는 성능상의 이점이 여러분이 편안하게 사용하는 것을별로 중요시하지 않는다면, 왜 새로운 언어를 배울 필요가 없습니까?
트위터 팀이 루비 (특히 레일즈)에 대해 알게 된 모든 "교훈"과 스케일링이 프로젝트에 적용될지는 모르겠습니다. 그들은 대부분의 사람들이 합리적으로 볼 수있는 것보다 더 많은 교통량을보고 있습니다.
소켓과 루비에 관한 한, I like Unicorn because it's Unix을 확인하십시오. 루비에서 소켓을 다루는 것에 대해 꽤 흥미로운 내용입니다.
+1 유니콘 기사에 대한 흥미로운 링크입니다. 고마워요. – ChrisInEdmonton
@Chris : 그 기사가 마음에 들면,이 후속 조치 목록을 확인하십시오. - http://jacobian.org/writing/star-is-unix/ – Telemachus
하스켈, 얼랭 (Erlang) 또는 스칼라 (Scala)와 같은 빠르고 동시적인 언어를 사용하는 경우 적어도 원하는 고급 언어로 머물 수있는 옵션이 있습니다. Ruby를 사용하면 성능 병목 현상은 컴파일 된 C (또는 Haskell, 또는 ...)로 전환하여 어쨌든 속도를 의미합니다.
루비는 좋은 프론트 엔드 프레임 워크의 장점이 있습니다.
먼저 약간의 컨텍스트를 제공하고 싶습니다. 저는 스칼라 커뮤니티에서 활발히 활동하고 있습니다. 은 모든 프로젝트에서 Scala over Ruby를 선택합니다.
그래서, 실제로는 장벽을 치지 않으면 Ruby를 계속 사용하십시오. 루비가 당신이 선택한 언어라면, 당신이 언급 한 선택, 특히 정적으로 타이핑 된 것에 만족하지 않을 수도 있습니다.
새로운 언어를 배우고 대안이 필요한 경우 다시 사용할 수있는 것이 좋을 수도 있습니다. 귀하의 경우 Clojure 또는 Erlang을 권하고 싶습니다. 스칼라는 함수형 프로그래밍에 특화된 정적이고 정적 인 OO 언어이다. 다른 사람들보다 배우기는 쉽지만 실제로 동적 타이핑을 좋아하는 사람들은 정적 타이핑으로 쉽게 변환하지 않습니다.
하스켈은 가장 훌륭한 언어 중 하나입니다. (그리고 똑같이 멋진 대안보다 훨씬 더 잘 지원되고 인기가 있습니다.) 다른 것처럼 마음을 열 수 있습니다. 마스터하기가 어렵습니다.
저는 최근에 스칼라로 옮겼지만 꽤 많이 좋아졌지만 많은 프로젝트에서 루비를 사용했습니다. Ruby에서 네트워크 작업에 대해 좋은 점을 들었지만 (결코 시도하지 않았 음) 한 가지는 EventMachine입니다. 그것은 반응기 패턴을 뒤틀린 것처럼 사용하며 매우 견고합니다.
루비와 자바로 소켓을 사용하는 프로젝트가 최근에 썼다. 기본 블로킹 채팅 서버를 작성하지 않는다면 루비 소켓 구현은 문서화가 잘되어 있지 않습니다. C 또는 Java로 작성하는 것이 더 간단하다는 것을 알았습니다. 루비는 네이티브 소켓을 마무리했고, 지금은 어떻게 사용하는지 궁금합니다. 이전에 Windows, Linux 및 C의 다른 플랫폼에 많은 스트레스를 쏟아 소켓 코드를 많이 작성했습니다.
루비 코드는 매우 작아서 잘 작동합니다. 그 시점으로가는 것은 정말 고통 스럽습니다.
소켓 프로그래밍에 Github Repo가 있습니까? 너라면 나에게 알려줘. 채팅 응용 프로그램을 개발하고 있습니다. 감사 – TheMouseMan
- 1. MFC를 사용하는 것이 좋습니다?
- 2. * 이것을 사용하는 것이 좋습니다.
- 3. gzcompress를 사용하는 것이 좋습니다.
- 4. activerecord를 모델로 사용하는 것이 좋습니다.
- 5. GAE 유형을 사용하는 것이 좋습니다?
- 6. 인증에 REST를 사용하는 것이 좋습니다.
- 7. std :: size_t를 사용하는 것이 좋습니다.
- 8. 분산 시스템 용 RPC 기능을위한 IP 소켓을 사용하는 것이 좋습니다.
- 9. mysql_free_result ($ result)를 사용하는 것이 좋습니다.
- 10. 리포지토리 및 비즈니스 개체를 사용하는 것이 좋습니다.
- 11. C에서 중첩 된 함수를 사용하는 것이 좋습니다.
- 12. 이 예제는 인덱스를 사용하는 것이 가장 좋습니다
- 13. 코드에서 플래그를 자주 사용하는 것이 좋습니다?
- 14. ADO.NET 명령 개체를 다시 사용하는 것이 좋습니다?
- 15. 정규식을 입력 유효성 검사에 사용하는 것이 좋습니다.
- 16. 웹 양식에 ContentEditable을 사용하는 것이 좋습니다?
- 17. Apache 모듈에서 COM을 사용하는 것이 좋습니다.
- 18. 클래스가 아닌 구조체를 사용하는 것이 좋습니다.
- 19. 단위 테스트에서 RowTest를 사용하는 것이 좋습니다
- 20. 이미지/스크립트의 절대 경로를 사용하는 것이 좋습니다.
- 21. 대용량 데이터에 제네릭을 사용하는 것이 좋습니다.
- 22. ViewState 또는 hiddenfield를 사용하는 것이 가장 좋습니다
- 23. 반환 유형으로 인터페이스를 사용하는 것이 좋습니다?
- 24. 오류 로그에 계정 정보를 사용하는 것이 좋습니다.
- 25. ANTLR과 같은 파서를 사용하는 것이 가장 좋습니다.
- 26. 옵저버의 약한 참조를 사용하는 것이 좋습니다.
- 27. UINavigationController보기와 모달보기에서 동일한 xib를 사용하는 것이 좋습니다?
- 28. Visual Studio에서 Git을 사용하는 것이 가장 좋습니다.
- 29. 부울 검사에 xor 연산자를 사용하는 것이 좋습니다.
- 30. 플렉스 - 여러 웹 서비스를 사용하는 것이 좋습니다?
"나는 루비가 많은 요청을 처리 할 수 없다는 트위터 때문에 알고있다." 극단적으로 비정형 인 회사의 특정 상황을 기반으로 기술을 결정해서는 안됩니다. –
흠. 트위터 때문에 Ruby *가 많은 요청을 처리 할 수 있다는 것을 알아야하지 않습니까? 트위터는 인터넷에서 가장 인기있는 웹 사이트 중 하나입니다 (Alexa에 따르면 # 14). 확장 성 문제는 사용자가 경험하게 될 수준을 훨씬 뛰어 넘을 수 있으며 사용하는 언어 및 프레임 워크에 관계없이 발생합니다. 트위터가 지금까지 커지고 빨랐다는 사실은 때로는 몇 가지 문제가 있더라도 실제로 많은 일을하고 있다고 말합니다. –
실제로 소켓 레벨에서 코드를 작성 하시겠습니까? 아니면 단순히 소켓을 사용하는 라이브러리/프레임 워크를 사용 하시겠습니까? – Jim