[database] 데이터베이스와 웹 서버를 같은 머신에 두지 않는 것이 왜 바람직하지 않습니까?

Scott Hanselman의 Stack Overflow 팀 ( 1 부2 부 ) 과 의 인터뷰를 듣고 그는 SQL 서버와 응용 프로그램 서버가 별도의 컴퓨터에 있어야한다는 것을 강력히 확신했습니다. 이것은 하나의 서버가 손상된 경우 두 시스템 모두에 액세스 할 수 없도록하기위한 것입니까? 보안 문제가 두 대의 서버 (추가 비용, 두 대의 전용 네트워크 연결, 더 많은 유지 관리 등)의 복잡성을 능가 하는가, 특히 CPU 나 메모리를 너무 많이 사용하지 않는 소규모 응용 프로그램의 경우보다 중요합니까? 한 대의 서버가 손상된 두 대의 서버를 사용하더라도 공격자는 데이터베이스를 삭제하거나 응용 프로그램 코드를 망쳐 서 심각한 피해를 입을 수 있습니다.

성능이 문제가되지 않는 이유는 무엇입니까?



답변

  1. 보안. 귀하의 웹 서버는 DMZ에 있으며 공용 인터넷에 액세스 할 수 있으며 익명 사용자의 신뢰할 수없는 입력을받습니다. 웹 서버가 손상되어 DB 연결에 대한 최소 권한 규칙을 따랐다면 데이터베이스 API를 통해 앱이 수행 할 수있는 작업이 최대로 노출됩니다. 그 사이에 비즈니스 계층이있는 경우 공격자와 데이터 사이에 한 단계 더 있습니다. 반면에 데이터베이스가 동일한 서버에있는 경우 공격자는 이제 데이터와 서버에 대한 루트 액세스 권한을 갖습니다.
  2. 확장 성. 웹 서버를 상태 비 저장 상태로 유지하면 웹 서버를 거의 수평 적으로 쉽게 확장 할 수 있습니다. 데이터베이스 서버를 수평으로 확장하는 것은 매우 어렵습니다.
  3. 공연. 2 개의 상자 = CPU의 2 배, RAM의 2 배, 디스크 액세스를위한 스핀들의 2 배.

말한대로, 나는 그 요점이 실제로 중요하지 않은 합리적인 사례를 확실히 볼 수 있습니다.


답변

실제로는 중요 하지 않습니다 (동일한 컴퓨터에서 웹 / 데이터베이스를 사용하여 사이트를 행복하게 운영 할 수 있음).

StackOverflow는 IIS / SQL Server를 실행하는 단일 컴퓨터에서 시작하여 정확하게로드 된 후 두 번째 서버를 구입하여 SQL Server를 그 서버로 옮겼습니다.

성능이 문제가되지 않으면 두 대의 서버를 구매 / 유지하는 비용을 낭비하지 마십시오.


답변

반면에 다른 블로그 스콧 (Telligent의 Watermasyck)을 참조하면 대부분의 사용자는 데이터베이스를 웹 사이트와 동일한 시스템에 배치하여 (Telligent 커뮤니티 서버를 사용하여) 웹 사이트 속도를 높일 수 있다는 것을 알았습니다. 그러나 고객의 경우 일반적으로 db & 웹 서버가 해당 시스템의 유일한 응용 프로그램이며 웹 사이트는 시스템에 많은 부담을주지 않습니다. 그런 다음 네트워크를 통해 데이터를 전송할 필요가없는 효율성으로 인해 증가 된 부담을 보완 할 수 있습니다.


답변

큰 요소는 성능이라고 생각합니다. 웹 서버 / 앱 코드와 SQL Server는 일반적으로 요청 된 데이터를 메모리에 캐시하므로 동일한 메모리 공간에서 캐시 성능을 실행하여 캐시 성능을 저하시킵니다.


답변

Tom이 이것에 맞습니다. 다른 이유는 비용 효율적이지 않으며 추가적인 보안 위험이 있기 때문입니다.

웹 서버는 데이터베이스 서버와 다른 하드웨어 요구 사항이 있습니다. 데이터베이스 서버는 많은 메모리와 매우 빠른 디스크 어레이로 더 나은 서비스를 제공하는 반면 웹 서버는 파일 및 빈번한 DB 요청을 캐시하기에 충분한 메모리 만 필요합니다 (설정에 따라 다름). 비용 효율성과 관련하여 두 서버가 반드시 저렴할 필요는 없지만 리소스와 경쟁하는 다른 응용 프로그램이 필요하지 않기 때문에 성능 / 비용 비율이 높아야합니다. 이러한 이유로 두 서버를 모두 수용하고 2 개의 특수 서버에 동등한 성능을 제공하는 하나의 서버에 더 많은 비용을 지출해야 할 것입니다.

보안 문제는 단일 시스템이 손상되면 웹 서버와 데이터베이스가 모두 취약하다는 것입니다. 두 대의 서버를 사용하면 두 번째 서버는 여전히 안전합니다 (적어도 잠시 동안).

또한 다양한 웹 응용 프로그램에서 사용하는 데이터베이스 서버를 몇 개만 유지하면되므로 확장 성 이점이 있습니다. 이렇게하면 업그레이드 또는 패치 적용 및 성능 조정 작업이 줄어 듭니다. 이러한 작업을보다 쉽게 ​​수행 할 수있는 서버 관리 도구가 있다고 생각합니다 (단일 시스템의 경우).


답변

보안은 주요 관심사입니다. 데이터베이스 서버는 데이터 액세스를 수행하는 데 필요한 포트만있는 방화벽 뒤에 있어야합니다. 웹 응용 프로그램은 응용 프로그램이 작동하기에 충분한 권한을 가진 SQL 계정으로 데이터베이스 서버에 연결해야합니다. 예를 들어 개체를 삭제할 수있는 권한을 제거해야하며 ‘sa’와 같은 계정을 사용하여 연결해서는 안됩니다.

웹 서버를 가로 채서 (즉, 관리자 권한으로 전체 권한 상승) 웹 서버를 잃어버린 경우 최악의 시나리오는 응용 프로그램의 데이터베이스가 손상 될 수 있지만 전체 데이터베이스 서버가 아니라는 것입니다 ( 데이터베이스 서버와 웹 서버는 동일한 시스템이었습니다). 데이터베이스 연결 문자열을 암호화하고 해커가 해독하기에 정통하지 않은 경우 웹 서버 만 손실됩니다.


답변

아직 언급되지 않은 한 가지 요소는로드 밸런싱입니다. 웹 서버와 데이터베이스를 별도의 시스템으로 생각하기 시작하면 네트워크 왕복 횟수를 줄이면서 필요에 따라 두 번째 웹 서버 또는 두 번째 데이터베이스 엔진을 추가하는 것이 더 쉬워집니다.