본문 바로가기

Infrastructure/Cloud Computing

[Well-Architected] Performance Efficiency Pillar

Performance Efficiency Pillar

이번 장에서는 Well-Architected Framework의 성능 효율성 원칙(Performance Efficiency Pillar)에 대해서 알아본다.


성능 효율성 원칙

  • 성능 효율성 원칙은 IT 리소스를 효율적으로 사용할 수 있는 능력을 중심으로 하며, 중점 영역은 아래와 같다.
    • 컴퓨팅
    • 스토리지
    • 데이터베이스
    • 네트워킹에 적합한 리소스 유형
  • AWS가 새로운 리소스 유형 및 기능을 통해 혁신을 계속함에 따라 선택사항을 검토해야 한다.
  • 모니터링 및 아키텍처 절충을 통해 리소스가 어떻게 수행되고 있는지 파악하여 성능 효율성을 극대화할 수 있다.

성능 효율성 설계 원칙

기존 환경에서의 성능 효율성

  • 성능 효율성에 대해 생각할 때 기존 환경에서 가졌던 제약 조건의 종류에 대해 생각해본다.
  • 모든 것에 대해 동일한 기술 사용:
    • 모든 것에 대해 동일한 기술을 사용하려는 경향이 있었기 때문에 가지고 있는 도구가 망치 뿐일 때는 모든 문제가 못처럼 보인다.
    • 예를 들어, NoSQL과 같은 다른 대안이 해당 사례에 더 적합할 수 있는데, 기업의 모든 솔루션에 관계형 데이터베이스가 사용되는 경우를 흔히 보게 된다.
  • 로컬만 가능, 전역은 너무 어렵고 비용이 높음:
    • 전역은 너무 어렵고 비용이 많이 들기 때문에 로컬로 머물러 있다.
    • 서로 다른 국가, 법적 체계 및 언어의 공급자와 계약을 협상하는 생각조차도 여기에서 대부분의 대화를 중단하기에 충분하다.
  • 모든 서버를 관리하기 위해 직원들과 함께 많은 서버를 사용:
    • 우리는 한 가지 일을 했던 많은 서버를 사용했고, 모든 서버를 관리할 사람이 있어야 했다.
  • 실험하기 어려움:
    • 실험을 수행할 리소스를 얻기가 힘들었고, 설정하는 데 많은 시간이 걸리며 일반적이지 않았다.

클라우드 환경에서의 성능 효율성

  • 클라우드에서는 기존 환경의 제약 조건이 없기 때문에 성능 효율성에 대해 다르게 생각해야 한다.
  • 고급 기술을 대중화한다:
    • 설치를 관리하고 신속하게 시작하지 않아도 새로운 기술을 시험해 볼 수 있다.
  • 몇 분 만에 전 세계에 배포한다, 서버 아키텍처를 사용한다:
    • 전 세계 위치에 배포하는 일이 법적 절차가 아니라 버튼 클릭 한 번으로 이루어진다.
    • 완전 관리되는 솔루션을 만들 수 있기 때문에 가치를 더하는 코드에 집중할 수 있다.
  • 실험 빈도를 높인다:
    • 실험은 고객에게 만족하는 결과를 제공하기 위한 더 나은 방법을 찾기 위해 지속적으로 행하는 노력이다.
  • 기계적 동조를 고려한다:
    • 시스템의 각 구성 요소가 어떻게 작동하는지 확실히 이해함으로써 기계적인 동조를 고려해야 한다.
    • 각 구성 요소를 구축하는 방법을 알 필요는 없지만 이러한 이해로 인해 보다 나은 워크로드 설계로 이어진다.

선택

  • 특정 워크로드에 대한 최적의 서버 구성은 애플리케이션 설계, 사용 패턴 및 구성 설정에 따라 다를 수 있다.
  • 많은 “Well-Architected” 워크로드가 여러 솔루션을 사용하며 성능 개선을 위한 여러 다른 기능을 사용할 수 있다.

선택: 적절한 리소스

  • 종종 워크로드에 걸쳐 최적의 성능을 얻기 위해 여러가지 접근 방법이 요구되는 경우가 있다.
  • “Well-Architected” 시스템에서는 다양한 솔루션이 활용되며 성능 개선을 위한 여러 가지 기능을 사용할 수 있다.
  • 한 가지 주요 모범 사례는 컴퓨팅, 스토리지, 데이터베이스 및 네트워킹 리소스의 크기를 적절하게 조정하는 것이다.
  • 워크로드에 가능한 경우 먼저 “참조 아키텍처”를 활용하거나 “Amazon Builders”의 라이브러리 또는 AWS가 제공하는 “빠른 시작 배포” 중 하나를 살펴보면 좋다.
  • 벤치마킹 및 로드 테스트를 통해 다양한 크기의 리소스와 기능을 실험할 수 있으며, 이를 통해 최고의 투자 수익률로 크기와 기능의 조합을 선택할 수 있는 데이터를 얻을 수 있다.
  • 프로세스를 반복하여 새로운 크기 옵션 및 기능을 사용할 수 있게 되면 평가해야 한다.

검토

  • 워크로드 설계 시, 사용자가 선택할 수 있는 몇 가지 옵션이 있지만 시간 경과에 따라 워크로드 성능을 개선할 수 있는 새로운 기술 및 접근 방법을 사용할 수 있게 된다.
  • 클라우드에서는 인프라가 코드이기 때문에 새로운 기능과 서비스를 실험하기가 훨씬 쉽다.

로드 테스트

  • 검토에서 성능 효율성 모범 사례의 예시는 로드 테스트이다.
  • “AWS CloudFormation”을 사용하여 아키텍처를 코드로 정의할 수 있어, 시간에 따른 버전 관리 및 수정이 가능하다.
  • 이러한 기능을 통해 서로 다른 환경을 제어된 방식으로 프로비저닝할 수 있지만, 더 중요한 것은 프로덕션 규모의 테스트 환경을 준비할 수 있다는 것이다.
  • 새로운 리소스 유형 또는 기능을 시험해 볼 준비가 되면, 템플릿을 분할하여 새로운 설정을 사용하도록 변경하고 수명이 짧은 테스트 환경을 준비하고 프로덕션 규모에서 로드 테스트를 수행한 다음 해당 환경을 종료하여 비용을 절감할 수 있다.
  • 이를 통해 위험도가 낮은 방식으로 기능을 실험하는 동시에 낮은 비용으로 프로덕션 규모에서 기능을 수행할 수 있다.

모니터링

  • 아키텍처를 구현한 후에는 고객에게 영향을 미치기 전에 문제를 해결할 수 있도록 성능을 모니터링 해야 한다.
  • 임계값이 초과될 때 경보를 발령하려면 모니터링 지표를 활용해야 한다.
  • “Amazon CloudWatch”를 사용하여 지표를 수집 및 추적하고, 로그 파일을 수집 및 모니터링하고, 경보를 설정할 뿐 아니라 “Amazon Kinesis”, “Amazon SQS” 및 “AWS Lambda”를 통해 조치를 트리거할 수 있다.

성능 경보

  • 모니터링에서 성능 효율성 모범 사례의 예로는 성능 경보가 있다.
  • 지표 모니터링은 임계값이 위반될 때 경보를 발생시키고, 성능이 좋지 않은 구성 요소를 해결하기 위한 자동화된 조치를 트리거하기 위해 사용해야 한다.

절충

  • 솔루션을 설계할 때, 최적의 접근 방식을 보장하기 위한 절충안에 대해 생각해본다.
  • 상황에 따라 일관성, 내구성, 공간을 시간 또는 지연과 맞바꾸어 성능을 향상시킬 수 있다.
  • AWS를 사용하면 몇 분 이내에 전 세계 시장에 진입해 여러 위치에 리소스를 배포하여 최종 사용자와 더욱 가까워질 수 있다.
  • “Y사용자”는 데이터베이스 시스템과 같은 정보 스토어에 읽기 전용 복제본을 동적으로 추가하여 기본 데이터베이스의 부하를 줄일 수 있다.
  • 워크로드를 변경할 때, 지표를 수집하고 평가하여 이러한 변경 사항의 영향을 판별한다.
  • 시스템 및 최종 사용자에게 미치는 영향을 측정하여 절충이 워크로드에 어떤 영향을 미치는지 파악한다.
  • 로드 테스트와 같은 체계적인 접근 방식을 사용하여 절충으로 인해 성능이 개선될지 여부를 탐색한다.

근접성 및 캐싱

  • 절충에서 성능 효율성 모범 사례의 예는 근접성 및 캐싱 메커니즘을 사용하는 것이다.
  • 근접성 및 캐싱은 애플리케이션과 사용자 간의 지연 시간을 줄이는 핵심이다. 예를 들어, 웹 애플리케이션에서는 글로벌 콘텐츠 배포 네트워크 서비스인 CloudFront를 사용하여 50개 이상의 엣지 로케이션 중 하나에서 최종 사용자에게 더 가까운 콘텐츠를 캐시할 수 있다.
  • 캐싱은 단지 웹 계층을 위해서만이 아니라, memcached 또는 redis에 기반한 Amazon ElastiCache 서비스를 사용하거나 심지어 기본 데이터베이스의 읽기 전용 복제본을 사용하여 데이터베이스 계층에서도 구현할 수 있다.
  • 때때로 읽기 전용 복제본이 구현하기에 가장 쉬울 수 있는데, 읽기 요청을 여러 다른 엔드포인트로 보내면 되기 때문에, 이로 인해 엄청난 개선이 이루어질 수 있다.

핵심 사항

  • 성능 효율성 원칙의 핵심 사항은 아래와 같다.
    • 컴퓨팅 리소스를 효율적으로 사용하여 시스템 요구 사항을 충족하고, 수요가 변하고 기술이 진화함에 따라 이러한 효율성을 유지하는 기능이다.
    • 적절한 리소스 유형을 선택하고 “Auto Scaling”을 활용하여 수요에 맞는 충분한 인스턴스를 보유하도록 한다.
    • 워크로드 요구에 일치하도록 테스트한다.
    • “Amazon CloudWatch” 또는 타사 모니터링 서비스를 사용하여 리소스와 시스템을 모니터링하고 전반적인 성능 및 운영 상태에 대한 가시성을 제공한다.
    • AWS가 전 세계에 분산된 리전 중에서 리소스, 데이터 및 처리를 위한 최적의 위치를 선택할 수 있고 “CloudFront”를 사용하여 사용자에게 훨씬 더 가까이에 콘텐츠를 캐시할 수 있다.

참고 자료