View a markdown version of this page

성능 효율성 요소 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

성능 효율성 요소

AWS Well-Architected Framework의 성능 효율성 원칙은 데이터를 수집하거나 쿼리하는 동안 성능을 최적화하는 방법에 중점을 둡니다. 성능 최적화는 다음과 같은 점진적이고 지속적인 프로세스입니다.

  • 비즈니스 요구 사항 확인

  • 워크로드 성능 측정

  • 성능이 낮은 구성 요소 식별

  • 비즈니스 요구 사항에 맞게 구성 요소 튜닝

성능 효율성 원칙은 고성능 데이터 모델을 선택하는 데 도움이 되는 지침을 제공합니다. 성능 효율성 원칙에는 쿼리 및 쓰기 최적화 모범 사례가 포함됩니다.

성능 효율성 원칙은 다음 주요 영역에 중점을 둡니다.

  • Influx 데이터 모델링 및 쿼리 최적화

  • 쓰기 최적화

Influx 데이터 모델링 및 쿼리 최적화

InfluxDB에서 시계열 데이터의 성능을 최적화하고 기능을 쿼리하려면 효과적인 스키마를 설계하는 것이 중요합니다. 먼저 올바른 태그와 필드를 선택합니다. InfluxDB는 태그를 인덱싱하므로 쿼리 엔진이 태그 값을 찾기 위해 측정의 모든 레코드를 스캔할 필요가 없습니다. 즉, 필드 쿼리보다 태그 쿼리가 더 효율적입니다. 스토리지 엔진은 데이터를 압축하고 저장하기 위해 시리즈 키별로 필드 값을 그룹화한 다음 시간별로 해당 필드 값을 정렬합니다. 시리즈 키는 측정, 태그 키 및 값, 필드 키로 정의됩니다. 데이터 설계에 대한 자세한 내용은 InfluxDB 설명서를 참조하세요.

스토리지 엔진은 TSM(Time-Structured Merge Tree) 데이터 형식을 사용합니다. TSM 데이터 형식에 대한 자세한 내용은 InfluxDB 설명서를 참조하세요.

DevOps 사용 사례의 일부로 데이터(timestamp, host_id, region, cpu, memory, network_in_bytes, network_out_bytes, , disk_io)를 수집하고 있다고 가정해 보겠습니다. 레코드 타임스탬프를 포함한 태그는 레코드의 사람, 대상, 시간 및 위치를 식별하는 데 도움이 되는 컨텍스트를 제공합니다. 태그는 데이터를 구성 및 분류하고 쿼리의 일부로 데이터를 필터링하는 데 사용됩니다.

host_idregion 태그는 DevOps 사용 사례를 구성하고 분류하는 데 이상적인 태그입니다. 이러한 열은 특정 호스트에 대한 데이터를 필터링하거나 리전 열을 기반으로 분석을 실행하는 데 도움이 됩니다.

측정값은 데이터에 대한 수학적 계산(예: 총계, 평균, 변화율 차이 계산) 및 정량적 분석을 수행하기 위한 기반을 제공합니다. 따라서 cpu, memory, network_out_bytes, network_in_bytes및는 시간이 지남에 따라 변경되는 DevOps와 관련된 중요한 지표를 disk_io 캡처합니다. 이러한 지표를 사용하여 여러 호스트의 CPU 및 메모리 계산과 같은 다양한 분석을 수행할 수 있습니다. 이러한 지표 값을 사용하여 프로덕션 중단을 방지하고 인프라 계획을 수행하는 데 도움이 되는 데이터 기반 결정을 내릴 수 있습니다.

카디널리티는 고유한 태그 값의 조합입니다. 카디널리티를 최대한 낮게 유지하는 것을 목표로 합니다. 애플리케이션에 각 데이터 포인트에 고유한 식별자가 필요한 경우 태그 값 대신 필드 값을 사용합니다. 이렇게 하면 쿼리 지연 시간이 크게 향상됩니다. 스키마 설계가 양호하면 시리즈 카디널리티가 높아지지 않아 쿼리 성능이 향상될 수 있습니다. 데이터 읽기 및 쓰기 속도가 느려지거나 카디널리티가 성능에 미치는 영향을 알아보려면 Timestream for InfluxDB 설명서를 참조하세요.

애플리케이션에서 JSON 객체를 내보내는 경우 개별 열(태그 또는 필드)로 변환하고 열을 InfluxDB로 로드합니다. InfluxDB는 시계열 데이터용으로 설계되었으므로 개별 열로 데이터를 구성하는 것이 서비스의 기능을 최대한 활용하는 모범 사례입니다.

단일 InfluxDB v2.7 OSS 인스턴스는 모든 조직에 활발하게 작성되거나 쿼리되는 약 20개의 InfluxDB 버킷을 지원합니다. 20개 이상의 버킷이 성능에 부정적인 영향을 미칠 수 있습니다. 일부 InfluxDB 구성 옵션에는 제한이 있으며 사용 사례에 따라 구성할 수 있는 몇 가지 옵션이 있습니다. 테스트 단계에서 애플리케이션 워크로드를 기반으로 구성을 검증합니다. 데이터 보존은 버킷 수준에서 구성되므로 데이터 보존 요구 사항이 서로 다른 데이터를 서로 다른 버킷에 저장해야 합니다. 구성 옵션에 대한 자세한 내용은 Timestream for InfluxDB 설명서를 참조하세요.

태그 키, 필드 키 또는 측정값이 아닌 태그 값 또는 필드 값에 데이터를 저장합니다. 태그 및 필드 값에 데이터를 저장하도록 스키마를 설계하면 쿼리를 더 쉽게 작성하고 효율성을 높일 수 있습니다. 데이터 모델링에 대한 자세한 모범 사례는 성능 설계를 참조하세요.

InfluxDB 작업을 사용하여 데이터를 사전 집계하고, 데이터를 다른 측정값 또는 버킷에 로드하고, 대시보드 및 시각화를 위한 데이터를 생성합니다.

InfluxDB OSS는 Prometheus 일반 텍스트 노출 형식의 성능, 리소스 및 사용량 지표를 반환하는 /metrics 엔드포인트를 노출합니다. InfluxDB 템플릿을 사용하여 높은 쿼리 지연 시간, 쓰기 처리량 저하 또는 리소스 사용량 급증과 같은 문제를 사전에 감지하도록 모니터링 및 알림을 설정할 수 있습니다.

InfluxDB용 Timestream은 Influx IO 포함 스토리지를 제공합니다. 적절한 IOPS 크기를 선택하면 쿼리 실행 속도가 크게 빨라질 수 있습니다. 이는 대량의 데이터를 스캔하거나 높은 범위의 요청을 처리해야 하는 쿼리에 특히 유용합니다. 경우에 따라 원하는 성능 개선을 달성하려면 인스턴스를 확장하고 IOPS를 향상하는 조합이 필요할 수 있습니다.

개발 및 생산 환경(인스턴스 클래스, 스토리지 유형, 구성)을 일치시키는 것이 좋습니다. 프로덕션으로 이동하기 전에 모든 릴리스에 대해 하위 환경의 변경 사항을 테스트합니다. Influx IO 포함 스토리지 볼륨에서 Timestream for InfluxDB는 다양한 유형의 워크로드에 필요한 최적의 IOPS(3,000, 12,000, 16,000) 및 처리량으로 사전 구성된 세 가지 스토리지 계층을 제공합니다. 대부분의 사용 사례에는 3,000 IOPS 미만이 필요합니다. 성능 테스트에서 높은 IOPS가 필요한 경우에만 12,000 또는 16,000을 선택합니다. 자세한 내용은 Timestream for InfluxDB 설명서의 설정 섹션을 참조하세요.

쓰기 최적화

InfluxDB에 대한 쓰기를 최적화하려면 네트워크 오버헤드를 최소화하기 위해 요청당 5,000줄의 라인 프로토콜 배치로 데이터를 작성하는 것이 좋습니다. 성능을 높이려면 데이터 포인트를 쓰기 전에 어휘 순서로 키를 기준으로 태그를 정렬합니다. 나노초 대신 타임스탬프에 대해 가능한 가장 대략적인 시간 정밀도를 사용하면 성능도 향상될 수 있습니다. gzip 압축을 활성화하면 쓰기 속도를 높이고 네트워크 대역폭을 줄일 수 있습니다. telegraf.conf 파일의 influxdb_v2 출력 플러그인 구성에서 content_encoding 옵션을 로 설정합니다gzip. 이러한 최적화를 구현하면 InfluxDB에 데이터를 쓰는 성능과 효율성을 크게 개선할 수 있습니다. InfluxDB 쓰기 모범 사례에 대한 자세한 내용은 Optimize writes to InfluxDB를 참조하세요.

InfluxDB의 쓰기 성능은 종종 사용 가능한 IOPS와 밀접하게 연결되어 있습니다. 데이터를 쓸 때 InfluxDB는 데이터를 저장하기 위해 상당한 수의 I/O 작업을 수행해야 합니다. IOPS를 늘리면 InfluxDB가 초당 더 많은 쓰기를 처리할 수 있습니다.