ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS]Amazon Redshift 알아보기
    데이터 2024. 10. 27. 16:56

    이전 회사에서 데이터웨어하우스를 구축하며 Amazon Redshift 를 이용했었는데, 오늘은 그와 관련하여 간단하게 몇 가지 내용들을 정리를 해보려고합니다.

    Amazon Redshift란?

    AWS에서 제공하는 클라우드 데이터 웨어하우징을 위한, 완전관리형 데이터 웨어하우스 서비스입니다. 대용량 병렬 처리로 페타바이트 급의 데이터 처리가 가능하고,  PostgreSQL을 기반으로 하고있습니다. (다만, Amazon Redshift는 대용량 데이터 집합을 대상으로 복잡한 쿼리가 필요한 온라인 분석 처리(OLAP) 또는 비즈니스 인텔리전스(BI) 애플리케이션 전용으로 설계되었기에 둘 사이에 차이가 존재합니다. 이부분은 추후에 다시!)

     

    Amazon Redshift Architecture

    데이터 웨어하우스 시스템 아키텍처(출처: aws-documentation > Amazon Redshift > 데이터베이스 개발자 안내서)

     

    클라이언트 애플리케이션(Client applications)

    클러스터(Clusters)

    • Amazon Redshift 데이터 웨어하우스의 핵심 인프라 구성 요소로, 하나 이상의 컴퓨팅 노드로 구성
    • 클라이언트 애플리케이션은 리더 노드와만 직접 상호작용하며, 컴퓨팅 노드는 외부 애플리케이션에서 인식

     

    리더노드(Leader Node)

    • 클라이언트 프로그램과 일어나는 통신 및 컴퓨팅 노드와 일어나는 모든 통신을 관리
    • 구문을 분석하여 데이터베이스 작업인 실행 계획을 작성하고 이를 기반으로 코드 컴파일, 컴퓨팅 노드로 배포  후 데이터 구간을 각 컴퓨팅 노드로 할당하는 작업을 진행
    • 쿼리가 컴퓨팅 노드에 저장된 테이블을 참조할 때만 SQL 문을 컴퓨팅 노드에 배포 - 쉽게는 유저가 구축한 DB를 생각하시면 될 듯합니다.
    • 리더노드에서만 실행 가능한 특정 SQL 기능이 존재(ex) CURRENT_SCHEMA, SUBSTR, FACTORIAL() 등

    *쿼리가 컴퓨팅 노드의 테이블을 참조할 때 current_schema() 함수를 함께 사용할 경우 아래와 같이 메세지를 볼 수 있습니다.

    INFO:  Function "current_schema()" not supported.
    ERROR:  Specified types or functions (one per INFO message) not supported on Amazon Redshift tables.

     

    컴퓨팅 노드(Compute Node)

    • 병렬로 쿼리 수행: 리더 노드는 코드를 컴파일하여 각 컴퓨팅 노드에 할당 > 컴퓨팅 노드가 컴파일 코드를 실행 > 최종 집계를 위한 중간 결과를 리더 노드에 반환
    • 각 컴퓨팅 노드마다 전용 CPU와 메모리가 따로 존재하며, 노드 유형에 따라 결정
    • 노드 수 자체를 늘리거나, 노드 유형을 업그레이드(vCPU, RAM(GiB), 노드당 기본 슬라이스, 노드당 관리형 스토리지 한도, 클러스터 생성을 사용한 노드 범위, 총 관리형 스토리지 용량 등 영향)하는 방식으로 클러스터의 컴퓨팅 용량을 늘릴 수 있습니다.(하지만 역시 비용이..)

    *노드 유형 참고

    Redshift 관리형 스토리지

    • 데이터 웨어하우스 데이터는 별도의 스토리지 계층 Redshift 관리형 스토리지(RMS)에 저장
      • *RMS: Amazon S3 스토리지를 사용하여 스토리지를 페타바이트로 확장가능한 기능을 제공
    • 필요한 경우 Amazon S3로 자동으로 스케일링 처리

    노드 슬라이스(Node slices)

    • 각 컴퓨팅 노드는 다수의 슬라이스 조각으로 분할되어 있음
    • 개별 슬라이스는 노드의 메모리, 디스크 공간으로 할당되고, 여기서 할당된 워크로드를 처리
      • 리더노드가 각 슬라이스로 데이터 분산, 쿼리 워크로드 및 기타 데이터베이스 작업 워크로드를 배분하여, 각 슬라이스에서 병렬 방식으로 작업 처리
      • 노드별 슬라이스 개수는 클러스터의 노드 사이즈에 따라 결정됩니다.

    * Redshift에서 테이블을 생성할 때, 컬럼 1개를 분산 키(distribution key)로 지정할 수 있는데, 정의된 분산 키에 따라 행이 노드 슬라이스로 분산됩니다. 어떤 컬럼을 분산키로 지정하느냐에 따라 쿼리 성능 차이가 꽤나 많이 달라집니다(+분산 방식(distribution style)도 설정가능) 이 부분에 대해서는 추후 따로 다뤄볼 예정입니다!


    데이터베이스(Database)

    • 클러스터에는 하나 이상의 데이터베이스를 포함 / 유저 데이터는 컴퓨팅 노드에 저장됩니다.(우리가 구축하고 밀어넣는 데이터들)
    • 관계형 데이터베이스 관리 시스템(RDBMS)로 다른 RDBMS 애플리케이션과 호환 가능.
    • 데이터 삽입 및 삭제와 같은 OLTP 기능을 포함한 일반적인 RDBMS와 유사한 기능을 제공하지만 위에서 언급했듯이 설계 목적이 다른 관계로 차이는 있습니다)
    • PostgreSQL을 기반으로 합니다. 

     

    참고: Amazon Redshift > 데이터베이스개발자안내서

     

    코멘트

    회사에서 Amazon Redshift를 처음 접했을 때, 자료가 별로 없어서 공식문서를 있는데로 뒤져봤었는데요. 오늘은 처음 찾아볼 때 가장 많이 보였던 내용들을 중심으로 Overview 같은 느낌으로 글을 작성해봤습니다. 대충 읽고 이해하고 넘겼던 걸 다시 글로 쓰려니 확실히 고민도 어려움더 더 많은 것 같네요. 

Designed by Tistory.