별도의 mysql 서버와 웹 서버 및 결과

별도의 mysql 서버와 웹 서버 및 결과

웹 애플리케이션이 있습니다. 그것을 위해 꽤 강력한 서버를 구입했습니다. 서버 사양은 다음과 같습니다: CPU: DUAL E5-2620 RAM: 32GB DDR3 HDD: 2 x 300GB SAS 10K 네트워크: 100mbps/10TB 인터넷.

웹서버 사양: Apache/nginx/PHP 데이터베이스: MySQL

이제 내 사용자는 날마다 높아지고 있습니다. 내 서버는 이러한 압력을 용납하지 않습니다. 대기 시간이 점점 늘어나고 있어요. 그래서 CPU 부하의 균형을 맞추기 위해 MySQL과 웹 서버를 두 개의 동일한 서버에 분리하는 방법을 생각했습니다. 이제 mysql과 php를 분리하면 아래에 또 다른 문제가 있다는 것을 알았습니다!

  • 네트워크 전송을 기다리는 중: 다음과 같은 MySQL 쿼리가 있습니다. "SELECT * FROM table" 테이블에 500MB 이상의 데이터가 있는 경우. 내 연결 속도로는 네트워크를 통해 이러한 테이블을 가져오는 데 몇 초가 걸립니다. 이는 하나의 연결을 가진 한 명의 사용자에게만 해당되지만 한 명의 사용자와 100명 이상의 온라인 사용자로부터의 연결이 10배로 늘어납니다.

위의 예는 단지 예일 뿐이지만 실제 데이터는 동시에 100명의 온라인 사용자에 대한 정보를 표시합니다.

교통량 + ø + 시간당

받았다+ 14.7GiB + 201.4MiB

전송된+ 429.4GiB + 5.7GiB

+ 444.2GiB + 5.9GiB


그래서 내 웹 애플리케이션에서는 분리가 불가능한 것 같습니다. 이제 이렇게 큰 문제를 겪지 않고 이 두 서버에 로드 균형을 맞추려면 어떻게 해야 할지 막혔습니다. 대기 시간 문제 없이(적어도 문제는 덜하면서) CPU 로드 균형을 맞추는 대체 방법은 무엇입니까?

*****주의사항: 쿼리는 예시입니다. 내 쿼리는 충분히 최적화되었지만 내 애플리케이션은 훨씬 더 복잡하므로 데이터베이스와 상호 작용이 매우 많습니다. 그러나 mysql 정보에는 여전히 6GiB 데이터가 전송된 것으로 표시됩니다.

답변1

터무니없을 정도로 비효율적인 SQL 쿼리를 사용하지 않도록 웹앱을 최적화했다면 훨씬 낮은 로드로 두 쿼리를 동일한 상자에 다시 배치할 수 있을 것입니다. 모든 사용자가 매번 전체 테이블을 읽어야 할 이유는 없습니다. 적절한 쿼리와 인덱스는 아마도 더 많은 하드웨어를 투입하는 것보다 훨씬 더 큰 향상을 제공할 것입니다.

현재 이더넷 어댑터를 최소 10Gb/s로 만드는 데 실패했습니다. 좀 더 이국적인 유형의 경우 훨씬 더 빠릅니다. 서버 간의 링크가 더 빨라지면 도움이 될 것입니다. 그러나 적절한 SQL 쿼리만큼은 아닙니다.

관련 정보