2013-12-13 3 views
2

질문 : 들어오는 HTTP 요청을 비동기 방식으로 처리하는 사용자 정의 스레드를 만들면 너무 많은 스레드가 도입되어 성능이 실제로 저하됩니까?요청 처리 스레드 대 비동기 처리를위한 사용자 정의 스레드 대 웹 서버 성능

통찰력 : 들어오는 요청에 대해 수행해야 할 과중한 데이터베이스 작업이 있습니다. 웹 서버에 부하가 많이 걸리고 주어진 순간에 요청 처리 스레드가 끊임없이 요청 처리 중입니다. 서버에는 10 개의 코어가 있으므로 코어 당 1 개의 스레드가 실행 중이라고 가정합니다.

요청은 동기식으로 처리되며 각 요청 처리 스레드는 도착에서 완료까지 작업을 처리합니다. 데이터베이스에 약간의 대기 시간이 필요합니다.

가능한 "개선"은 전체 요청을 처리하는 요청 처리 스레드 대신 약간의 흐름을 변경하는 것입니다. 추가 스레드는 무거운 데이터베이스 작업을 처리하고 처리 스레드 요청을 일찍 릴리스합니다.

이 문제가 발생하면 - 이제 10 개 이상의 코어에 10 개 이상의 스레드가 필요합니다. - 컨텍스트 스위칭 성능이 저하됩니다

내가 요청 처리 스레드에 의해 무엇을 의미 : http://docs.oracle.com/cd/E19146-01/821-1834/geeie/index.html

내가 정의 스레드에 의해 무엇을 의미 :

void handleHttpMethod(){ 
    //request processing thread running here 
    executorService.submit(new DBTask()) 
    //request processing thread exits here 
} 

나는 이것이 약간 질문을 열었 알고 있지만 나는 정말 귀하의 의견과 의견에 관심.

[편집] 더욱 세부 정보 : 나는 ~ 1,000 요청/초를 처리 Glassfish3 서버에 배포 된 웹 응용 프로그램을 실행하고 있습니다. 각 요청에는 요청 내에서 수행되는 다른 로직과 비교하여 무거운 일부 DB 조작 (일부 데이터 저장 및 결과 기다림 필요 없음)이 포함됩니다. 요청 처리 스레드가 DB 조작을 처리하기 위해 작성된 사용자 정의 스레드와 CPU를 공유해야하므로 비동기가 웹 서버 성능에 어떤 영향을 줄 수 있는지 이해하려고합니다.

+0

전적으로 당신이하는 일에 달려 있습니다. 그러나 대답은 적절한 언어 (예 : Java가 아닌)를 사용하고 비 차단 IO를 사용하는 것입니다. – SLaks

+1

@Slaks 종종 기업은 개발자에게 언어/환경 요구 사항을 부과합니다. 분명히 우리는 단순히 다른 언어를 요구하지 않고 그를 도우려고 할 수 있습니다. – BlackVegetable

+0

@BlackVegetable : 자세히 설명하지 않고 ... – SLaks

답변

1

참고 : 아래의은 DB가 다른 호스트에서 실행된다고 가정하므로 DB 쿼리는 웹 서비스 스레드에서 CPU를 사용하지 않습니다.

DB 쿼리 시간이 클라이언트에 따라 다르면 DB 요청을 "사용자 지정"스레드로 분산하여 처리량 (처리 된 요청 수)을 확실히 향상시킬 수 있습니다. client1Query 10 초 동안 실행하고 완료하는 데 1 초 필요 여유 스레드, client2Query이없는 경우

예컨대, 어느 client1Query가 완료, 또는 다른 스레드를 사용할 수있을 때까지 기다려야합니다.

+0

Victor에게 감사하지만 DB 작업이 다른 호스트에서 실행 되더라도 완료를 기다려야하는 스레드를 차단합니다. – Mark

+0

@Mark 내 대답이 명확하지 않은 경우 유감스럽게 생각하지만, 정확히 말하면 - "사용자 정의"스레드 (가장 간단하게, executor.submit (새 DBTask())를 실행하여 DB 쿼리를 오프로드하여 웹을 비울 것입니다. DB 요청을 비동기 적으로 (예 : 일부 BlockingQueue를 통해) 선택해야합니다. –

+0

그러면 사용자 지정 스레드 풀을 만들고이 스레드 풀 내에서 db 작업을 스레드에 제출하는 것이 좋습니다. 그리고이 디자인이 웹 서버 성능에 미치는 영향은 제가 여기에서 논의하려고하는 것입니다. 여러분의 의견을 들어 주셔서 감사합니다. 더 이상의 피드백이 있는지 확인해보십시오. – Mark

관련 문제