다음을 통해 공유


다중 테넌트 솔루션의 비용 관리 및 할당을 위한 아키텍처 접근 방식

다중 테넌트 솔루션은 비용을 측정, 할당 및 최적화할 때 특별한 고려 사항이 필요한 경우가 많습니다. 이 문서에는 다중 테넌트 애플리케이션을 사용하는 솔루션 설계자로서 비용을 효과적으로 평가하고 관리하는 데 도움이 되는 주요 지침이 포함되어 있습니다.

주요 고려 사항 및 요구 사항

솔루션에서 사용량을 측정하기 위해 요구 사항을 고려합니다. 이러한 요구 사항은 각 테넌트 사용량 측정에 자세히 설명되어 있습니다.

측정 목적

목표가 무엇인지 결정하는 것이 중요합니다. 다음 예제 목표를 고려합니다.

  • 각 테넌트에 대해 판매되는 상품의 대략적인 비용을 계산합니다. 예를 들어 많은 수의 공유 리소스를 배포하는 경우 각 테넌트에 대해 발생하는 비용의 대략적인 근사치만 필요할 수 있습니다.

  • 각 테넌트가 발생하는 정확한 비용을 계산합니다. 예를 들어 테넌트에게 발생하는 정확한 소비량에 대해 요금을 청구하는 경우 각 테넌트의 리소스 비용에 대한 정확한 정보가 있어야 합니다.

  • 다른 테넌트보다 훨씬 많은 비용이 드는 이상값 테넌트 식별 예를 들어 고정 요금 가격 책정 모델을 제공하는 경우 공정한 사용 정책을 적용할 수 있도록 테넌트가 프로비전된 용량의 불균형한 양을 사용하는지 여부를 확인해야 할 수 있습니다. 대부분의 시나리오에서 이 사용 사례는 비용을 정확하게 측정할 필요가 없습니다.

  • 솔루션에 대한 전체 Azure 비용을 줄입니다. 예를 들어 모든 구성 요소의 비용을 평가한 다음 워크로드에 대해 과도하게 프로비전했는지 여부를 결정할 수 있습니다.

테넌트별 사용량 측정 목표를 이해하면 비용 할당이 대략적인지 정확한지 여부를 확인할 수 있습니다. 이러한 구분은 사용할 수 있는 특정 도구와 따라야 하는 관행에 영향을 줍니다.

공유 구성 요소

테넌트를 공유 인프라로 이동하여 다중 테넌트 솔루션의 비용을 줄일 수 있습니다. 그러나 테넌트가 시끄러운 이웃 문제를 경험하기 시작하는지 여부와 같이 리소스 공유의 영향을 신중하게 고려해야 합니다.

공유 구성 요소의 비용을 측정하고 할당하는 방법도 고려해야 합니다. 예를 들어, 공유 구성 요소를 사용하는 각 테넌트 간에 비용을 균등하게 나눌 수 있습니다. 또는 각 테넌트의 사용량을 측정하여 공유 구성 요소의 소비량을 보다 정확하게 측정할 수 있습니다.

고려해야 할 접근 방식 및 패턴

다중 테넌트 아키텍처에서 비용 할당을 계획할 때 투명성, 공정성 및 확장성을 보장하기 위해 다음 전략 및 디자인 패턴을 고려합니다.

리소스 태그를 사용하여 비용 할당

Azure를 사용하면 리소스에 태그를 적용할 수 있습니다. 태그는 키-값 쌍입니다. 태그를 사용하여 사용자 지정 메타데이터를 추가합니다. 태그는 많은 관리 작업에 유용하며 Azure 사용량의 비용을 분석하는 데도 유용합니다. 태그를 적용한 후 각 태그와 관련된 비용을 확인할 수 있습니다.

다중 테넌트 솔루션에서 태그를 사용하는 방법은 아키텍처에 따라 달라질 수 있습니다.

일부 솔루션에서는 각 테넌트에 대한 전용 리소스를 배포할 수 있습니다. 예를 들어 각 테넌트에 대한 전용 배포 스탬프를 배포할 수 있습니다. 이러한 시나리오에서는 해당 리소스와 연결된 모든 Azure 사용량을 해당 테넌트에 할당해야 합니다. 이 방법을 지원하기 위해 테넌트 ID를 사용하여 Azure 리소스에 태그를 지정할 수 있습니다.

다른 시나리오에서는 공유 리소스 집합이 있을 수 있습니다. 예를 들어 분할 패턴을 적용할 때 여러 데이터베이스를 배포하고 테넌트에 분산할 수 있습니다. 테넌트 그룹에 대한 식별자를 사용하여 리소스에 태그를 지정하는 것이 좋습니다. 단일 테넌트에 비용을 쉽게 할당하지 못할 수 있습니다. 그러나 이 방법을 사용하여 정의된 테넌트 그룹으로 비용을 좁힐 수 있습니다. 특정 분할된 데이터베이스가 다른 분할된 데이터베이스보다 더 높은 비용을 발생시키는 것을 알면 소비 정보를 사용하여 분할된 데이터베이스 간에 테넌트의 균형을 재조정하는 데 도움이 될 수도 있습니다.

비고

리소스에 적용할 수 있는 태그 수에는 제한이 있습니다. 공유 리소스를 사용하는 경우 리소스를 공유하는 모든 테넌트에 대한 태그를 추가하지 않는 것이 가장 좋습니다. 대신 분할된 데이터베이스 ID를 사용하거나 테넌트 그룹을 식별하는 다른 방법으로 태그를 추가하는 것이 좋습니다.

배포 스탬프 패턴 및 세로로 분할된 테넌트 모델을 사용하여 빌드된 다중 테넌트 솔루션의 예를 생각해 보세요. 각 배포 스탬프에는 공유 웹 서버 및 분할된 데이터베이스가 포함됩니다. 다음 다이어그램과 같이 각 Azure 구성 요소에 태그를 적용할 수 있습니다.

각 구성 요소에 태그가 추가된 두 개의 스탬프를 보여 주는 다이어그램

다음 태그 지정 전략을 고려합니다.

  • 모든 리소스에는 stamp-id 태그가 있습니다.
  • 모든 분할된 데이터베이스에는 shard-id 태그가 있습니다.
  • 특정 테넌트에 전용된 모든 리소스에는 태그가 있습니다 tenant-id .

이 태그 지정 전략을 사용하면 비용 정보를 단일 스탬프로 쉽게 필터링할 수 있습니다. 또한 테넌트 C의 총 데이터베이스 비용과 같은 테넌트별 리소스의 비용을 쉽게 찾을 수 있습니다. 공유 구성 요소에는 tenant-id 태그가 없지만 스탬프에 대한 공유 구성 요소의 비용은 해당 스탬프 또는 분할된 데이터베이스를 사용하도록 할당된 테넌트 간에 나눌 수 있습니다.

애플리케이션 계측

Azure 리소스와 테넌트 간에 직접적인 관계가 없는 시나리오에서는 원격 분석을 수집하도록 애플리케이션을 계측하는 것이 좋습니다.

애플리케이션 계층은 이미 계량에 대한 질문에 답변하는 데 도움이 되는 로그 및 메트릭을 수집할 수 있습니다. 다음 사용 특성을 고려합니다.

  • 시간에 따라 각 테넌트에 대해 만들어진 API 요청 수입니다.
  • 하루 종일 특정 테넌트에 대한 최대 활동 기간입니다.
  • 테넌트 A와 테넌트 B 간의 사용 패턴 차이입니다.

Azure에서 Application Insights는 종종 이러한 메트릭을 캡처합니다. 원격 분석 이니셜라이저를 사용하면 Application Insights가 캡처하는 원격 분석을 보강하여 테넌트 식별자 또는 기타 사용자 지정 데이터를 포함할 수 있습니다.

그러나 Application Insights 및 기타 로깅 및 모니터링 솔루션은 정확한 비용 측정 또는 계량 목적에 적합하지 않습니다. Application Insights는 특히 애플리케이션에 요청이 많은 경우 데이터를 샘플링하도록 설계되었습니다. 샘플링은 원격 분석의 모든 부분을 캡처하는 데 비용이 많이 들 수 있으므로 솔루션 모니터링 비용을 줄이기 위해 설계되었습니다.

청구 목적으로 사용량에 대한 정확한 세부 정보를 추적해야 하는 경우에는 필요한 데이터를 로그하기 위해 사용자 지정 파이프라인을 빌드해야 합니다. 그런 다음, 요구 사항에 따라 데이터를 집계해야 합니다. 이 용도에 도움이 될 수 있는 Azure 서비스에는 대량의 원격 분석을 캡처하는 Azure Event Hubs 와 실시간으로 처리할 수 있는 Azure Stream Analytics 가 포함됩니다.

Azure 예약 및 Azure 절감 계획을 사용하여 비용 절감

Azure 예약을 사용하면 특정 수준의 지출을 미리 커밋하여 Azure 비용을 줄일 수 있습니다. 예약은 많은 Azure 리소스 유형에 적용됩니다.

Reservations는 다중 테넌트 솔루션에서 효과적으로 사용할 수 있습니다. 다음 사항을 고려합니다.

  • 공유 리소스를 포함하는 다중 테넌트 솔루션을 배포하는 경우 워크로드에 필요한 기준 사용량 수준을 고려해야 합니다. 해당 기준 소비에 대한 예약을 고려한 다음 예측할 수 없는 피크 동안 더 높은 소비에 대한 표준 요금을 지불할 수 있습니다.

  • 각 테넌트에 대한 리소스를 배포할 때 특정 테넌트에 대한 리소스 사용량을 미리 커밋할 수 있는지 또는 테넌트 포트폴리오 전체에서 미리 커밋할 수 있는지를 고려합니다.

Azure 예약을 사용하면 리소스 그룹, 구독 또는 구독 집합에 적용할 예약 범위를 지정할 수 있습니다. 이 기능은 여러 구독에 워크로드를 분할한 경우에도 예약을 활용할 수 있음을 의미합니다.

테넌트에 예측할 수 없는 워크로드가 있는 경우에도 예약 범위가 유용할 수 있습니다. 예를 들어 테넌트 A에는 특정 리소스의 인스턴스가 하나만 필요하지만 테넌트 B와 C에는 각각 두 개의 인스턴스가 필요한 솔루션을 고려합니다. 그런 다음 테넌트 B는 사용량이 적어지므로 인스턴스 수를 줄이고 테넌트 A는 더 바빠지므로 인스턴스 수를 증가시킵니다. 예약은 해당 예약이 필요한 테넌트에 적용됩니다.

컴퓨팅에 대한 Azure 절감 계획은 종량제 가격에 비해 상당한 절감액을 생성하는 유연한 비용 절감 계획입니다. 1년 또는 3년 계약에 동의하고 적격 컴퓨팅 서비스에 대한 할인을 받습니다. 이러한 서비스에는 가상 머신, 전용 호스트, 컨테이너 인스턴스, Azure 프리미엄 함수 및 Azure App Services가 포함됩니다. 절감액은 지역, 인스턴스 크기 또는 운영 체제에 관계없이 이러한 컴퓨팅 서비스에 적용됩니다. 자세한 내용은 Azure 저축 계획 개요Azure 저축 계획 설명서를 참조하세요.

예약 및 절감 계획을 결합하여 비용 및 유연성을 더욱 최적화합니다.

피해야 할 안티패턴

  • 비용 추적을 완전히 무시합니다. 발생하는 비용과 각 테넌트가 솔루션 제공 비용에 미치는 영향에 대한 대략적인 아이디어를 갖는 것이 중요합니다. 그렇지 않으면 시간이 지남에 따라 비용이 변경되는 경우 비교할 기준이 없습니다. 또한 테넌트 증가가 비용과 수익성에 어떤 영향을 미칠 수 있는지 예측하지 못할 수도 있습니다.

  • 데이터 없이 가정하거나 추측합니다. 비용 측정이 실제 정보를 기반으로 하는지 확인합니다. 정확한 측정은 필요하지 않을 수 있지만 실제 데이터에 대한 예상을 기반으로 합니다.

  • 정밀도를 위한 오버엔지니어입니다. 모든 테넌트가 발생하는 모든 비용에 대한 자세한 회계가 필요하지 않을 수도 있습니다. 불필요하게 정확한 비용 측정 및 최적화 프로세스를 빌드하는 것은 엔지니어링 복잡성을 추가하고 부서지기 쉬운 프로세스를 만들기 때문에 비생산적일 수 있습니다.

  • 실시간으로 비용을 측정합니다. 대부분의 솔루션에는 최신 비용 측정이 필요하지 않습니다. 계량 및 사용량 데이터는 처리가 복잡할 수 있으므로 필요한 데이터를 로그한 다음, 나중에 데이터를 비동기적으로 집계하고 처리해야 합니다.

  • 청구에 모니터링 도구를 사용합니다. 비용 모니터링 및 계량용으로 설계된 도구를 사용해야 합니다. 애플리케이션 모니터링 솔루션은 일반적으로 이러한 유형의 데이터에 적합한 후보가 아니며, 특히 정밀도가 높은 경우에 적합합니다.

기여자

Microsoft는 이 문서를 유지 관리합니다. 다음 기여자는 이 문서를 작성했습니다.

대표 저자:

  • John Downs | 주요 소프트웨어 엔지니어, Azure 패턴 및 사례

기타 기여자:

LinkedIn 비공개 프로필을 보려면, LinkedIn에 로그인하세요.