Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

MongoDB 인스턴스를 확장해야 할 때, 그 시점을 아는 방법

이전 블로그 포스트에서 MongoDB를 활용한 대규모 확장(scaling)의 기본 개념을 소개한 바 있습니다. 확장은 대체로 사후 대응적인 성격을 띠기 때문에 애플리케이션 성능 저하, 심한 경우 서비스 전면 중단 같은 문제로 이어지곤 합니다. 이런 문제는 결국 고객 경험을 악화시키고 비즈니스에도 부정적인 영향을 미칩니다. 그렇다면 수익에 타격을 주지 않으려면 언제 MongoDB 데이터베이스를 확장해야 할까요?

애플리케이션에 맞는 임계값 찾기

애플리케이션 사용량 증가와 트래픽 급증 속에서도 안정적으로 운영되려면, 프로덕션 시스템에 확장 같은 변경 사항을 적용하기 전에 반드시 부하 테스트(load test)를 통해 시스템이 감당할 수 있는 임계값을 파악해야 합니다. 하지만 이 과정은 종종 간과되고, 트래픽이 늘면서 문제가 발생했을 때야 비로소 소방 훈련처럼 허둥대는 결과를 낳습니다.

성공적인 MongoDB 부하 테스트를 위해서는 다음 사항들을 고려해야 합니다:

  • 병목 지점을 찾기 위해 어떤 지표를 모니터링해야 하는가?
  • 확장을 결정하는 기준이 되는 임계값은 무엇인가?
  • 지표를 분석하는 데 어떤 도구를 사용해야 하는가?
  • 부하 테스트는 어디에서 실행해야 하는가?

병목 지점을 찾으려면 어떤 지표를 모니터링해야 할까?

먼저 자신의 애플리케이션이 어떤 요소에 의해 제약을 받는지 판단할 기준을 정해야 합니다. 모든 애플리케이션은 서로 다르기 때문에, 이러한 요구 사항을 명확히 알면 데이터베이스 측에서 모니터링할 적절한 지표를 결정할 수 있습니다.

몇 가지 예시는 다음과 같습니다:

  • 트래픽이 증가할 때 초당 X건의 insert 처리가 필요합니다.
  • 사용자에게 데이터를 100밀리초 이내에 반환해야 합니다.
  • 동시 연결 수에 제한이 있습니다.
  • CPU 사용률이나 로드 애버리지 같은 서버 리소스에 한계가 있습니다.

애플리케이션 측 지표를 정했다면, 이제 데이터베이스 측에서 무엇을 모니터링할지 결정할 차례입니다.

예를 들어 일정 수준의 insert 요청 처리가 요구 사항이라면, 다음과 같은 쓰기 관련 지표에 집중해야 합니다:

  • 서버 I/O
  • 데이터베이스 락(locking)
  • 활성 쓰기 기준의 opcounters
  • WiredTiger 스토리지 엔진 사용 시 사용 가능한 쓰기 티켓(write tickets)

지표 분석에 활용할 도구

모니터링할 지표를 정했다면, 이제 데이터베이스 측에서 데이터를 수집해야 합니다. 부하 상태를 분석하는 데 활용할 수 있는 유틸리티는 다음과 같습니다:

  • mongostat: 락, 읽기/쓰기 큐 등 데이터베이스 지표를 실시간으로 보여줍니다.
  • db.currentOp(): 현재 활성 중인 작업(operation)을 확인합니다.
  • mongotop: 가장 활발하게 사용되는 컬렉션을 확인할 수 있습니다.
  • top, sar, iostat 같은 서버 유틸리티: CPU 사용률, 디스크 처리량 등의 지표를 보여줍니다.

실시간 분석 외에도 MongoDB 로그를 분석하면 데이터베이스 활동과 오류 조건에 대한 추가 정보를 얻을 수 있습니다. MongoDB는 기본적으로 실행에 100ms 이상 걸리는 쿼리를 로그에 기록하므로, 성능이 좋지 않은 쿼리를 찾아내는 데 유용한 도구입니다.

부하 테스트를 실행할 환경 정하기

데이터 수집 도구를 정했다면 이제 부하 테스트를 시작할 준비가 된 것입니다. 상식적으로 프로덕션 환경에서 부하 테스트를 해서는 안 됩니다. 하지만 테스트 환경을 충분히 빠르게 구축하기 어려워 이것이 발목을 잡는 경우도 있습니다. 다행히 ObjectRocket 플랫폼을 사용하지 않더라도 MongoDB 테스트 클러스터를 매우 신속하게 구축할 수 있습니다.

도움이 필요하신가요?

MongoDB 환경의 확장 시점을 판단하는 일은 생각보다 복잡할 수 있습니다. ObjectRocket 고객은 업계 최고 수준의 확장 및 샤딩(sharding) 지원을 누릴 수 있습니다. 저희 DBA가 클러스터 확장의 모든 과정을 도와드리며, 이러한 지원은 기본적으로 포함되어 있습니다. 지금 바로 문의하세요.

이제 MongoDB 인스턴스의 확장 시점을 판단할 준비가 되셨습니다. 다음 블로그에서는 MongoDB 인스턴스를 실제로 확장하는 방법을 다룰 예정입니다.