트래픽이 매우 많은 웹사이트의 nginx 서버로 사용할 서버를 구성 중입니다. 동시에 많은 수의 IP 주소로부터 트래픽을 수신할 것으로 예상됩니다. 최소 2천만 개의 고유 IP가 연결되어 초당 500Req를 얻을 것으로 예상됩니다.
내 previos 서버에서 발견한 문제 중 하나는 iptables / ipconntrack과 관련이 있었습니다. 나는 이 동작을 알지 못하며 서버에서 최대 성능을 얻으려면 ubuntu/debian(32/64) 비트 시스템의 모든 매개 변수를 조정해야 하는지 알고 싶습니다. 서버에 많은 RAM을 넣을 수 있지만 미션 크리티컬 작업은 응답 시간입니다. 우리는 이상적으로 연결이 중단되거나 시간 초과되거나 대기하는 것을 원하지 않으며 전체 응답 시간을 최대한 낮추기를 원합니다.
답변1
실제로 iptable이 필요합니까? 단일 상자에서 그 정도의 성능을 얻으려면 상자를 완전히 제거하는 것이 좋습니다. nginx를 제외한 모든 서비스를 제거하고 비공개 인터페이스(VPN, LAN 등)에서 수신하도록 SSH를 구성하여 시스템을 신중하게 구성하면 방화벽 없이도 벗어날 수 있습니다. 그러면 적어도 한 가지 문제가 해결될 것입니다.
이 작업을 수행하려고 하시나요?하나웹 서버, 아니면 그 중 몇 개? 간단한 DNS 라운드 로빈이라도 부하를 몇 가지 다른 시스템으로 분산시키는 데 도움이 됩니다. 안정성을 위해서도 여러 대의 서버가 필요할 것입니다.
답변2
이 질문은 꽤 광범위합니다. 제가 드릴 수 있는 최선의 조언은 한 걸음 물러서서 애플리케이션을 어떻게 확장할 것인지 생각해 보라는 것입니다. 확장(대규모 서버 몇 개) 또는 축소(소형 서버 다수) 또는 조합을 원하십니까? 확장 전략을 파악한 후에는 이를 중심으로 HA 전략을 설계할 수도 있습니다.
나는 사이트가 두 번째로 시작되는 순간 20MM 고유 항목을 보게 될 것이라고 매우 의심합니다. (단순한 관점을 제공하기 위해 최소한 상위 200개 웹사이트가 될 것입니다.)
트래픽에 맞춰 확장할 수 있는 좋은 계획을 세우고, 서버 성능의 가장자리에서 실행하지 말고, 급증에 대비해 여유 공간을 확보하고, 트래픽이 증가함에 따라 새 장비를 도입하세요.
우리는 때때로 이런 질문을 받습니다. 미래를 생각하는 것은 좋지만 20MM/60MM/100MM 고유 항목을 즉시 처리할 수 있는 인프라를 계획하지 마십시오. 돈을 낭비하는 것이며 대부분 거기에 머무르는 인프라를 갖게 될 것입니다. 게으른.
이제 귀하의 질문에 답하기 위해 Stack Overflow(현재)에서는 iptable을 사용하고 있으며 문제 없이 프런트 엔드 라우터에서 conntrack 모듈을 실행하고 있습니다. 로드 상태에서 iptables/*conntrack*을 실행할 때 나타나는 정확한 문제에 대한 세부 정보가 포함된 새 질문을 게시하는 것이 좋습니다.
그리고 마지막으로 좋은 독서를 하세요
답변3
초당 500개의 요청은 실제로 그다지 많지 않습니다. 수행 중인 작업이 상대적으로 작은 정적 파일을 제공하는 것뿐이라면 말이죠. 반면에 규모가 크거나 복잡한 경우(예: 세션 기반 또는 DB 종속) 이는 상당한 작업 부하입니다.
이 솔루션 앞에 Varnish와 같은 역방향 프록시를 설치하고 malloc 풀을 캐시로 사용하도록 설정하는 것을 고려해보세요. 적절하게 조정된 VCL을 사용하면 대부분의 사이트를 메모리에 버퍼링할 수 있습니다. 즉, nginx는 소수의 선택 비트만 제공하면 됩니다. 또한 파일 시스템에 noatime을 설정했는지 확인하십시오.