은 총알이 없습니다
실제로 그것은 달려있다 ...
tl; dr-쉬운 해결책, nginx 사용 ...
블로킹:
예를 들어, Apache는 기본적으로 모든 연결에 대해 프로세스가 분기되는 차단 체계를 사용합니다. 즉, 모든 연결에는 자체 메모리 공간이 필요하며 연결 수가 증가함에 따라 컨텍스트 전환 오버 헤드의 양이 증가합니다. 그러나 일단 연결이 닫히면 컨텍스트를 삭제하고 모든 / 모든 메모리를 쉽게 검색 할 수 있다는 이점이 있습니다.
멀티 스레드 방식은 연결 수에 따라 컨텍스트 전환의 오버 헤드가 증가하지만 공유 컨텍스트에서 메모리 효율성이 더 높다는 점에서 비슷합니다. 이러한 접근 방식의 문제점은 안전한 방식으로 공유 메모리를 관리하기 어렵다는 것입니다. 메모리 동기화 문제를 극복하기위한 접근 방식에는 종종 자체 오버 헤드가 포함됩니다. 예를 들어 잠금은 CPU를 많이 사용하는로드에서 기본 스레드를 정지시킬 수 있으며 변경 불가능한 유형을 사용하면 불필요한 불필요한 데이터 복사가 추가됩니다.
AFAIK는 블로킹 HTTP 서버에서 다중 프로세스 접근 방식을 사용하는 것이 일반적으로 안전합니다. 안전한 방식으로 메모리를 관리 / 복구하는 것이 더 안전하고 간단합니다. 메모리 복구가 프로세스 중지만큼 간단 할 때 가비지 콜렉션은 문제가되지 않습니다. 장기 실행 프로세스 (예 : 데몬)의 경우이 특성이 특히 중요합니다.
소수의 작업자에게는 컨텍스트 전환 오버 헤드가 미미한 것처럼 보일 수 있지만, 부하가 수백에서 수천에 이르는 동시 연결로 확장됨에 따라 단점이 더욱 중요해집니다. 기껏해야 상황 전환은 O (n)을 현재 존재하는 작업자 수로 확장하지만 실제로는 그보다 더 나쁩니다.
차단을 사용하는 서버가 IO로드가 많은 경우에 이상적인 선택이 아닌 경우 CPU를 많이 사용하는 작업에 이상적이며 메시지 전달은 최소한으로 유지됩니다.
비 차단 :
비 차단은 Node.js 또는 nginx와 같은 것입니다. 이는 특히 IO 집약적로드에서 노드 당 훨씬 더 많은 연결로 확장하는 것으로 알려져 있습니다. 기본적으로 사람들이 처리 할 수있는 스레드 / 프로세스 기반 서버의 상한선에 도달하면 대체 옵션을 찾기 시작했습니다. 이를 C10K 문제 (예 : 10,000 개의 동시 연결 처리 기능) 라고도합니다 .
비 차단 비동기 서버는 일반적으로 메인 스레드를 오버로드하지 않기 때문에 CPU 집약적로드를 피해야한다는 점에서 멀티 스레드 잠금 방식과 많은 특성을 공유합니다. 컨텍스트 전환으로 인해 발생하는 오버 헤드가 본질적으로 제거되고 하나의 컨텍스트 메시지 만 전달하면 문제가되지 않습니다.
많은 네트워킹 프로토콜에서 작동하지 않을 수 있지만 HTTP 비 상태 유지 특성은 특히 비 블로킹 아키텍처에서 잘 작동합니다. 리버스 프록시와 여러 비 차단 HTTP 서버의 조합을 사용하면로드가 많은 노드를 식별하고 라우팅 할 수 있습니다.
노드가 하나 뿐인 서버에서도 처리량을 최대화하기 위해 프로세서 코어 당 하나의 서버를 설정하는 것이 일반적입니다.
양자 모두:
'이상적인'사용 사례는이 둘의 조합입니다. 전면의 역방향 프록시는 상단의 라우팅 요청을 전담 한 다음 차단 및 비 차단 서버를 혼합 한 것입니다. 정적 컨텐츠, 캐시 컨텐츠, html 컨텐츠 제공과 같은 IO 작업에 대한 비 차단. 이미지 / 비디오 인코딩, 콘텐츠 스트리밍, 번호 크 런칭, 데이터베이스 쓰기 등과 같은 CPU가 많은 작업을 차단합니다.
귀하의 경우 :
헤더를 확인하고 실제로 요청을 처리하지 않는 경우 본질적으로 설명하는 것은 리버스 프록시입니다. 그런 경우에는 분명히 비동기 방식으로 갈 것입니다.
nginx 내장 리버스 프록시 문서를 확인하는 것이 좋습니다 .
곁에:
제공 한 링크에서 글을 읽었으며 비동기가 특정 구현에 적합하지 않은 것으로 이해됩니다. 이 문제는 한 문장으로 요약 될 수 있습니다.
클라이언트 간 전환시 값 / 상태 저장 및 복원을위한 코드가 어렵다는 것을 발견했습니다.
그들은 상태 기반 플랫폼을 구축하고있었습니다. 이 경우 비동기 방식은 컨텍스트가 전환 될 때마다 (예 : 이벤트가 발생할 때) 상태를 지속적으로 저장 /로드해야한다는 것을 의미합니다. 또한 SMTP 측면에서 많은 CPU 집약적 인 작업을 수행하고 있습니다.
그들은 비동기에 대한 이해력이 상당히 좋지 않은 것처럼 들리고 결과적으로 많은 나쁜 가정을 만들었습니다.