2010-06-05 3 views
0

페이지로드에 약간의 시간이 걸리거나 서블릿이 HTTP의 '베어 메탈'위에 추상화 프레임 워크를 가지거나 Jave-EE의 '엔터프라이즈'때문인 것만 알면 알 수 없습니다. 내 머리 속에 서블릿 기반 앱은 본질적으로 단순히 소켓을 직접 다루는 자바 애플리케이션에 비해 오버 헤드를 추가한다는 개념이있다.서블릿 기반 스택에 상당한 오버 헤드가 있습니까?

웹 페이지는 잊어 버리십시오. 대신 HTTP 요청을 통해 질문을 보내고 메모리에서 응답을 검색하고 응답에 응답을 반환하는 Java 서버 앱을 상상해보십시오. 이 작업을 수행하는 Java 소켓 기반 응용 프로그램을 쉽게 작성할 수 있습니다. 서블릿 접근 방식을 사용하여 소켓의 "베어 메탈 (Bare Metal)"에서 벗어날 수도 있습니다.

커스텀 소켓 기반 HTTP 수신 대기 응용 프로그램이 아닌 서블릿을 사용하여 동일한 접근 방식을 구현할 때 예상되는 성능 영향은 있습니까?

그리고 예, HTTP 요청에서 보낸 정확한 데이터가 흐릿하고 애매한 질문입니다. 서블릿 구현이 간접적 인 계층을 포함하고 있는지 또는 호출 당 상당한 오버 헤드를 추가하는 다른 요소가 있는지 여부에 대한 것입니다. 여기서 중요한 것은 0.1 초 이상을 의미 할 수 있습니다.

+1

너무 막연합니다. 측정하지 않았다면 존재하지 않습니다. – bmargulies

+2

미안하지만 바보 같은 반응입니다. 다중 사용자 응용 프로그램을 설계 할 때 _architecture_ 성능에 대해 생각해야합니다. "조숙 한 최적화"에 대한 유명한 인용문은 설계 단계에서 최적화 할 필요가 없다는 것을 의미하지는 않습니다. –

+1

그 주제에 대해 _asking_ 질문을 작성한 경우 ... –

답변

1

물론 약간의 오버 헤드가 있습니다. 정의하기 어렵다는 것은 측정하기가 어렵지 않기 때문에가 아니라 깨지기 쉽고, 버그가없고, 확장 성이 떨어지는 위험을 안겨주는 대안을 찾는 것이 어렵 기 때문에 얼마나 많이 정의해야하는지입니다.

다른 말로하면, 당신이 정말로 성능이 떨어지고 있다고 가정하면 ... 서버를 소유 할 것입니까? 동시 요청 관리 (같은 포트에 모두 충돌)는 어떻게 처리됩니까? HTTP 요청에 대한 파서를 직접 작성 하시겠습니까? 모든 브라우저에서 올바르게 작동 할 수 있습니까? 주어진 고객으로부터 세션을 어떻게 인식합니까?

다른 말로하면 "관계형 데이터베이스는 아무도 아직 작성하지 않은 상상의 사용자 지정 데이터 스토어에 대해 측정 할 때 상당한 오버 헤드가 발생하지만 원시 속도에 유리하게 모든 불필요한 기능을 제거 할 것입니까?"라는 질문과 조금 다릅니다.

내 대답 : 예, 물론입니다. 여전히 작동하기 때문에 DB를 사용하고 개발자가 당연한 것으로 여기는 많은 것들을 위해 조정되었지만 응용 프로그램에 필요할 때마다 재발견하는 것은 대단히 비효율적입니다.


난 당신이 Jetty 한 번 봐 가지고, 이미하지 않은 경우 강력하게 제안하고, 특히 WebSockets 구현을.

+0

질문을 다시 읽으십시오. 이것은 웹 페이지가 아닌 일반적인 서버 응용 프로그램에 대한 것이므로 클라이언트 간의 실시간 통신에 대해 더 많이 생각하십시오. –

+0

그리고 내 자신의 서버를 롤업하지 않아도됩니다. 동시 클라이언트의 경우 소켓 랩핑 라이브러리가 있습니다. 서블릿이 이런 종류의 것에 적합한 지 묻습니다. –

+0

"페이지"를 언급하지 않았습니다. 나는 당신처럼 HTTP 요청을 언급했다. 그리고 "브라우저"레퍼런스는 Ajax, Flex, Silverlight와 같은 것들에 대한 것이었다. Selenium과 같은 것을 사용하여 서버를 테스트 할 수 있다는 것은 말할 필요도 없습니다. –

2

물론 모든 추상화는 오버 헤드를 추가합니다.

많은 자바 기반 웹 응용 프로그램이 존재한다는 판단에 따라 성능면에서는 완벽합니다.

그래서 짧게 - 걱정하지 마십시오. 귀하가 javax.servlet보다 덜 최적의 솔루션을 생성 할 가능성이 있습니다. 성능 문제는 주로 빈약 한 코드에서 발생합니다.

+0

전체 웹 페이지를 작성하고 제공하는 것과 비교하여 작은 오버 헤드에 대해 이야기하고 있습니까? 아니면 원시 소켓을 숨기려고하는 간단한 프레임 워크와 비교하여 일반적인 클라이언트 - 서버 통신에 대해서도 작습니다. –

+0

그것은 어디에서 봐도 과실입니다 :) 실시간, 시간에 민감한 데이터 전송을 제외하고는 아마도. 그러나 그것은 HTTP가 무엇인지에 대한 것이 아닙니다. – Bozho

+0

무엇이 그것이 무엇이며 무엇이 가능한지는 매우 다를 수 있습니다. 그들이 HTML을 왜곡 시켰는지 살펴 보라 :) –

0

오버 헤드가 너무 많을 것이라고 생각하지 않습니다. HTTP 메시지는 매우 작으며 파싱하기 매우 쉽습니다. 서블릿 아키텍처는 베어 본 (bare bone) http 메시지보다 많은 추상화를 가지고 있지 않습니다.

순진한 서블릿 구현 일지라도 클라이언트가 http 요청 메시지를 서버로 보내는 데 소요되는 시간 만 소요됩니다. 즉, 오버 헤드는 눈에 띄지 않습니다.

0

서블릿을 초기화하기 위해 수행해야하는 작업에는 약간의 오버 헤드가 있습니다. 이것은 서블릿이 첫 번째 요청을 수신 할 때 한 번 발생합니다.

관련 문제