2009-02-08 5 views
3

많은 동시 연결 (아마도 수천 개)을 처리하기 위해서는 확장 성이 뛰어난 웹 서비스를 개발할 계획입니다. 이 서비스는 API로 작동합니다. 반응이 빨라야하며 요청과 응답 사이에 3 초의 지연이 너무 많이 고려됩니다.많은 연결을 사용하는 웹 서비스

로드 관리 게이트웨이가 플로우 관리 역할을하는 서비스가 많은 내부 서버에 분산 될 수 있으므로 서비스가 실제로 처리 할 때 게이트웨이 서버가 늘어나지 않습니다. Amazon EC2를 사용할 것을 고려하고 있지만, 좋은 서버를 사용할 수있는 한 사내 서버 배열을 사용할 수도 있습니다. 데이터베이스는 아마도 MySQL이 될 것입니다 (당신이 더 좋은 아이디어가 없다면).

최상의 솔루션은 내 웹 서버를 개발하는 것이지만 너무 많은 시간이 걸릴 것이고 내가 잘 모르는 다른 웹 서버보다 더 나은 작업을 수행 할 수 있을지는 의문입니다.

또한 현재 영구 연결 사이를 결정하려고 시도하고 있지만 실제로는 후자를 고수 할 것입니다.

그렇다면 좋은 확장 가능한 솔루션에 대한 권장 사항은 무엇입니까?

답변

1

Amazon EC2는 잘 작동하지만 $ 0에 가격을 책정하지 마십시오.10 인스턴스 - 그들은 매우 힘이 부족합니다. 나는 적어도 c1.mediums로 시작하는 것이 좋습니다. 나는 c1.medium 웹 서버 인스턴스의 m1.small의 infront에서 nginx 인스턴스를로드 균형으로 사용하고 싶습니다. (최근에 작성한 모든 응용 프로그램은 CPU 바인딩 및 메모리 바인딩이 아닙니다.)

3 초가 길다. 필자는 일반적으로 성능 목표를 위해 200ms-400ms를 사용합니다. 물론이 변화는 앱이 얼마나 시간에 민감하고 얼마나 많은 작업을해야하는지에 달려 있습니다.

실제로 수행해야 할 작업이 3 초있는 경우 백엔드 그리드 전처리 데이터가있을 수 있습니다. 그런 다음 대부분 미리 만들어진 데이터를 반환하기 때문에 더 적은 수의 웹 서버가 필요할 것입니다.

제가 신발을 신은다면, 내가 가장 편안하게 사용하는 언어/플랫폼에서 프로토 타입을 만들 수 있습니다. 그러면 어디에서 가져 가야할지 생각해 볼 수 있습니다.

고성능 웹 앱을 만드는 데 시간이 걸리는 것을 잊지 마십시오. 벤치마킹, 벤치마킹, 반복 반복 및 응답 시간 단축이 필요합니다.

웹 서버를 직접 작성해야하는 경우가 매우 적습니다. 이것은 그들 중 하나가 아닙니다. 선택할 수있는 것들이 많이 있습니다. nix 기반 플랫폼을 가정 할 때 Apache, nginx 또는 lighttpd를 사용할 수 있습니다. 다른 것들이 많이 있지만, 그들은 일반적으로 응용 프로그램 서버 (바람둥이, zope, 잡종 등)로 사용되며 그들 앞에 아파치/nginx/lighttpd/오징어 프록시가 있습니다.

나는 웹 애플 리케이션을 구축하기위한 선반 플랫폼 (솔루션)을 사용하지 않았다. (나는 당신이 자바 스택이나 닷넷 스택을 의미한다고 가정한다). 나는 너를 거기 실제로 도울 수 없다. 내가 작업하는 대부분의 도구 (LAMP 타입의 것들)는 컴포넌트 화되어 스택의 모든 부분에서 대체물을 허용합니다. 한 구성 요소를 초과하여 다른 구성 요소로 교체해야하는 경우는 드뭅니다.

예를 들어로드 밸런서 -> 소프트웨어로드 밸런서 -> 버퍼링 할 수있는 소프트웨어로드 밸런서 -> 하드웨어로드 밸런서가 없습니다. 이 모든 것은 다양한 규모의 비용면에서 효과적입니다.

3

나는 자신의 웹 서버를 개발하는 것이 "최선의 해결책"이라고 동의하지 않습니다. 존재하는 것을 사용하십시오. 웹 서비스를 배포하기 위해 서버를 작성하지 않아도됩니다.

.NET과 Java EE는 모두 웹 서비스를 만들고 배포하는 방법을 제공합니다. 원하는 언어가 무엇인지 말하는 것은 아니지만 Java EE에서 웹 서비스를 작성하고 사용자 정의 웹 서버를 작성하지 않고도 Tomcat에 웹 서비스를 전개 할 수 있습니다.

로드 밸런싱에 관한 한 여유가 있다면 F5은 좋은 하드웨어 솔루션입니다.

3

프로토콜에 대해 언급하지 않았습니다. RESTful 접근법을 사용하면이 코드를 작성하는 것이 매우 쉽다. SOAP 접근법을 사용하는 경우, 이것은 더 복잡합니다.

Apache + FastCGI가이 작업을 수행하지만 서비스는 CGI 프로그램이됩니다. 불쾌 할 수있는 C 또는 C++로 작성해야합니다. Apache + mod_wsgi와 Python 프레임 워크 중 하나를 사용할 수 있습니다. 그것은 빠르지는 않지만 매우 빠르며 많은 코드를 작성할 필요가 없습니다.

글래스 피시가 이것을 수행하면 Java로 작성하게됩니다.

상용 제품 (Sun의 JCAPS)이이를 수행합니다.

수많은 웹 서비스 프레임 워크가 있습니다. 자신의 발명은 좋은 생각이 아닙니다.

"MaxClients"문제.

웹 서비스 요청은 빠른 것이어야합니다. 리소스입니다. 캐시 또는 데이터베이스에서 가져 와서 응답합니다. 제한 요소는 MaxClients가 아니며 성공적으로 공존 할 수있는 스레드이며 소켓 협상입니다.

GET 요청이 멱등 원이라면, squid (또는 다른 리버스 프록시 서버)에 캐싱 할 수 있습니다. 당신은 이것들을 많이 가질 수 있습니다. 역방향 프록시 서버를 사용하면 웹 서비스와 아무런 관련이 없음을 유의하십시오. 그 자체로; 그러나 전반적인 처리량과 관련이 있습니다.

+0

예, REST를 사용할 계획입니다. Apache + FastCGI를 사용하면 Apache MaxClients에 문제가 없습니까? – idevelop

+0

MaxClients 설정은 많은 항목에 따라 다릅니다. 얼마나 많은 RAM과 얼마만큼의 CPU를 가진 머신이 얼마나 많은지에 대해 Apache의 인스턴스가 얼마나 필요합니까? –

관련 문제