분석 패키지를 구축 중이며 프로젝트 요구 사항에 따르면 하루에 10 억 건의 조회수를 지원해야합니다. 그래, "십억". 다시 말해, 초당 12,000 회의 적중이 지속되고, 바람직하게는 파열 될 여지가있다. 이를 위해 여러 개의 서버가 필요하다는 것을 알고 있지만 "더 많은 하드웨어를 던지기"전에 각 노드에서 최대 성능을 얻으려고합니다.
현재 조회수 추적 부분이 완료되었으며 최적화되었습니다. 요청을 Redis에 바로 저장합니다 (나중에 Hadoop으로 처리하기 위해). 이 응용 프로그램은 게이트웨이 용 gunicorn이있는 Python / Django입니다.
내 2GB Ubuntu 10.04 랙 공간 서버 (프로덕션 머신 아님)는 초당 약 1200 개의 정적 파일을 제공 할 수 있습니다 (단일 정적 자산에 대해 Apache AB를 사용하여 벤치 마크 됨). 비교를 위해 정적 파일 링크를 내 추적 링크와 교체하면 초당 약 600 건의 요청이 발생합니다. 동일한 정적 자산을 제공하는 것보다 2 배 더 느리기 때문에 추적기가 잘 최적화되어 있음을 의미합니다 자꾸.
그러나 수백만 건의 히트로 벤치마킹 할 때 몇 가지 사항이 있습니다.
- 디스크 사용량 없음-모든 Nginx 로그를 해제했으며 사용자 정의 코드는 아무것도하지 않고 요청 세부 정보를 Redis에 저장하기 때문에 예상됩니다.
- 일정하지 않은 메모리 사용-아마도 Redis의 메모리 관리로 인해 메모리 사용량이 점차 증가하고 감소하지만 한 번도 병목 현상이 발생하지 않았습니다.
- 시스템로드는 2-4 정도이며, 가장 무거운 벤치 마크에서도 시스템이 여전히 응답하며, 다른 서버가 600 건의 요청을 수행하는 동안 눈에 띄게 지연되지 않고 http://mysite.com/tracking/pixel 을 수동으로 볼 수 있습니다 둘째.
- 짧은 테스트를 실행하면 50,000 개의 조회 (약 2m 소요)가 초당 안정적인 600 건의 요청을받습니다. 더 긴 테스트 (지금까지 3.5m까지 시도)를 실행하면 r / s가 약 250으로 저하됩니다.
내 질문들-
ㅏ. 이 서버를 아직 최대로 사용하고있는 것 같습니까? 1,200 / s 정적 파일 nginx 성능은 다른 사람이 경험 한 것과 비슷합니까?
비. 이러한 대용량 애플리케이션에 공통적 인 nginx 튜닝이 있습니까? 작업자 스레드가 64로 설정되고 gunicorn 작업자 스레드가 8로 설정되었지만이 값을 조정해도 크게 도움이되지는 않습니다.
씨. 들어오는 연결을 제한 할 수있는 리눅스 수준의 설정이 있습니까?
디. 장기 실행 테스트에서 성능이 250r / s로 저하되는 원인은 무엇입니까? 다시 말하지만이 테스트 중에는 메모리가 최대치가 아니며 HDD 사용량이 없습니다.
미리 감사드립니다. :)
편집은 여기 내 nginx를 설정 - http://pastie.org/1450749 - 명백한 지방이 밖으로 손질로는 주로 바닐라입니다.