인터넷에서 Nginx와 Apache를 비교하는 기사가 많이 있다는 것을 알았습니다. 그러나이 모든 비교는 PHP 코드를 실행하는 웹 서버에 대한 스트레스 테스트를 기반으로합니다. 이것은 주로 Apache가 일반적으로 PHP로 LAMP 아키텍처로 배포 되었기 때문입니다.Nginx와 비동기 프로그래밍 모델을 지원하는 언어를 결합해야합니까?
Nginx는 이벤트 기반 아키텍처로 C10K problem을 해결하기 위해 만들어졌습니다. 즉, Nginx는 N 개의 스레드/프로세스와 함께 M 개의 동시 요청을 처리해야합니다. N은 M보다 훨씬 적습니다. M 개의 동시 요청을 처리하기 위해 M 개의 스레드/프로세스가 필요한 Apache와는 큰 차이가 있습니다.
PHP 코드의 경우 프로그래밍 모델이 비동기 적이 아닙니다. 각 웹 요청은 PHP가 처리 할 수있는 하나의 스레드/프로세스를 차지합니다. 그래서 Nginx와 Apache를 PHP 코드와 비교하는 의미를 이해하지 못합니다.
Nginx의 이벤트 기반 아키텍처는 요청이 I/O 작업과 관련된 경우 특히 Apache를 능가해야합니다. 예를 들어 요청은 다른 여러 웹 서비스의 결과를 병합해야합니다. Apache + PHP의 경우 각 요청은 I/O 작업이 완료 될 때까지 기다리는 데 몇 초가 걸릴 수 있습니다. 그것은 많은 스레드/프로세스를 소비합니다. Nginx의 경우 비동기 프로그래밍을 사용하면 문제가되지 않습니다.
비동기 프로그래밍 모델을 지원하는 언어로 Nginx를 배포하는 것이 더 합리적입니까?
나는 어떤 프로그래밍 언어가 Nginx로부터 가장 큰 잠재력을 발굴 할 수 있는지 모르겠지만, 확실히 PHP가 아닙니다.
답장을 보내 주셔서 감사합니다.하지만 "PHP는 웹 소켓을 대량으로 배포 할 때 푸시와 관련이 있습니다"라고 분명합니다. 내 이해에서 PHP는 Comet 서버 측 구현에는 적합하지 않습니까? –
글쎄, 잘 모르겠다. 아파치에서 이것은 분명히 날지 않을 것이다. 그러나 PHP 서버의 경우, 프레임 워크는 일부 인터페이스를 통해 사용할 수 있어야합니다. 하지만 그래, 그건 비현실적이야. Comet은 구현되는 모든 것이 메시지 대기열 서버가 될 수 있습니다. 대기열에 들어간 모든 내용을 클라이언트에 다시 보냅니다. 그래서 임의의 코드, 을 눌러야 할 때, 혜성 서버에 메시지를줍니다. 독립형 서버이므로 비동기 방식으로 모든 코드를 다시 작성할 필요가 없습니다. 그게 PHP를 어쨌든 만들려고 시도한 긴 폴링 요청에 대한 것입니다. – rzab