웹 서버를 실행하는 데 더 많은 CPU 코어를 갖는 것이 더 나은가요?

웹 서버를 실행하는 데 더 많은 CPU 코어를 갖는 것이 더 나은가요?

사용자 스레드가 커널 스레드에 매핑되는 방법에 대해 읽었습니다.위키피디아. 이 기사를 통해 나는 FreeBSD가 1:1(커널 수준 스레딩)을 사용한다는 것을 이해했습니다.

따라서 애플리케이션에서 생성된 각 사용자 스레드는 커널 스레드에 매핑됩니다. 스레드에서 각각의 새로운 요청을 처리할 웹 서버를 구축하고 FreeBSD에서 실행한다고 가정하면 코어 수를 늘리면 애플리케이션의 전반적인 성능이 향상됩니까?

나는 이 질문을 읽었습니다.CPU 코어: 많을수록 좋다?, 그러나 답변의 범위가 특히 사용자 스레드와 커널 스레드 간의 1:1 매핑에 의해 영향을 받기를 원합니다.

답변1

짧은 대답은 '예'입니다.

긴 대답은 .... CPU 코어가 많다는 것은 처리 능력이 더 크다는 것을 의미합니다. PHP/Ruby/Python 등의 웹 애플리케이션의 경우 동시 연결을 처리하는 데 더 많은 리소스가 필요하다는 의미입니다. 로드가 많은 애플리케이션의 경우 더 많은 코어를 갖는 것이 실제로 차이를 만듭니다.

내 개인적인 의견은 더 많은 처리 능력과 더 많은 RAM 중 하나를 선택할 경우 대부분의 경우 더 많은 RAM을 선택한다는 것입니다. RAM을 사용하면 디스크 I/O의 병목 현상을 줄일 수 있습니다.

다음과 같은 캐시 시스템을 사용하여PHP APC,광택, 그리고MySQL 튜닝(테이블 캐시, 쿼리 캐시 등) 콘텐츠를 생성하는 데 더 많은 CPU 성능을 필요로 하지 않고도 웹 사이트 성능을 크게 향상시킬 수 있습니다.

웹사이트를 캐시할 수 있는 경우 다음을 선택하세요. 단지 CPU 코어 수를 늘리는 것은 장기적으로 볼 때 손실이 되는 선택입니다.

답변2

예.

최신 웹 서버 소프트웨어는 서버에 연결하는 각 컴퓨터에 대해 별도의 프로세스나 스레드를 사용합니다. 또한 MySQL 또는 PHP와 같은 백엔드 소프트웨어도 서비스가 필요한 각 사용자에 대해 별도의 프로세스 또는 스레드에서 실행되므로 코어가 많을수록 항상 도움이 됩니다.

물론, 보다 집약적인 환경에서는 디스크 성능, 메모리 또는 네트워크 대역폭으로 인해 병목 현상이 발생할 수 있습니다. 메모리가 많을수록 더 많은 읽기 캐싱이 허용되므로 느린 디스크 스토리지에 대한 액세스가 줄어듭니다. Biapy가 제안한 대로 초당 많은 요청을 처리하는 경우 시스템 부하를 크게 줄여주는 Varnish와 같은 특수 캐싱 소프트웨어를 살펴봐야 합니다.

답변3

늘 그렇듯, 대답은 상황에 따라 다르다는 것입니다.

예를 들어,nginx웹 서버아주 잘 수행, 스레드를 사용하지 않더라도. 대신 이벤트 기반 아키텍처를 사용합니다. 여러 작업자 프로세스를 사용할 수 있고 사용하므로 여러 코어를 사용할 수 있습니다.

연결된 성능 측정에서 볼 수 있듯이 스레드 Apache 웹 서버는 동시 연결 양이 증가하면 더 많은 스레드를 생성하고 더 많은 메모리를 사용합니다. nginx가 사용하는 메모리 양은 상당히 일정하게 유지됩니다. 그리고 초당 처리되는 요청의 양에서 nginx는 apache를 훨씬 앞섰습니다.

따라서 스레드가 항상 최선의 솔루션은 아닙니다.

성능은 데이터가 어디에 있는지에 따라 달라집니다. 하드 디스크에 저장되어 있으면 RAM에 있을 때보다 액세스 속도가 느려지므로 프로세서 캐시보다 속도가 훨씬 느려집니다. 웹 서버 속도를 높이려면 다음과 같은 가속기 사용을 고려하십시오.광택. 독서를 고려해보세요이 기사웹 서비스 성능에 대한 varnish의 주요 저자의 글입니다. 여기서 메시지는 다음과 같습니다.사용운영 체제에 내장된 채칭 메커니즘을 사용하고 동일한 작업을 직접 수행해서는 안 됩니다.

관련 정보