클라이언트 어플리케이션
Redshift는 DW로서 다양한 클라이언트 어플리케이션과 통합이 가능하다. 다른 DB로의 ETL 또는, BI 툴과의 통합이 대표적인 예시이다.
클러스터
클러스터(Cluster)는 Redshift 아키텍쳐에서 최상위의 개념이다. 클러스터는 한 개 이상의 컴퓨팅 노드로 구성된다. 두개 이상의 컴퓨팅 노드부터는 한 개의 리더 노드가 추가된다.
클러스터는 DW의 용량에 따라서 리사이징/스케일 업이 가능하다. 클러스터의 종류에 따라서, Redshift의 크기를 조정할 수 있다.
클러스터는 스냅샷으로 S3에 백업이 가능하다.
리더노드
리더노드는 클라이언트 프로그램과 일어나는 통신을 비롯해 컴퓨팅 노드와 일어나는 모든 통신을 관리한다. 또한 리더노드에는 메타데이터가 저장되어 있으며 쿼리 구문을 분석하여 쿼리 실행 계획을 작성한다. 리더노드에서 작성된 실행 계획에 따라서 컴파일된 코드는 컴퓨팅 노드로 배포 및 할당된다. 다만, 리더 노드에서 컴퓨팅 노드로 배포되는 쿼리는 컴퓨팅 노드에 저장된 테이블을 참조하는 경우에 한정된다. 즉, 컴퓨팅노드를 거치지 않고 리더노드에서만 실행되는 SQL 함수들도 존재한다.
컴퓨팅 노드
리더노드가 할당한 컴파일 코드는 각 컴퓨팅 노드에서 실행된 이후 그 결과값을 리더 노드로 다시 보낸다. 리더 노드에서는 각 컴퓨팅 노드의 결과물들을 종합하여 통신하는 client로 결과를 전달한다.
각 컴퓨팅 노드는 전용으로 할당된 CPU,메모리,디스크,스토리지가 있다. 클러스터의 리사이징에 따라서 각 컴퓨팅 노드에 할당되는 용량 조절이 가능한 것이다.
각 컴퓨팅 노드에는, 분산키에 따라서 테이블의 데이터가 분해되어 저장된다. 따라서, 특정 컴퓨팅 노드에 데이터가 밀집하여 적재되지 않도록 분산키를 적절하게 설정하는 것이 중요하다. (분산키 설정 방식 :https://velog.io/@qja1357/AWS-Redshift-02-Distkey)
노드 슬라이스(조각)
각 컴퓨팅 노드는 다수의 슬라이스로 분할된다. 분할된 슬라이스는 다시 각 컴퓨팅 노드의 메모리 및 디스크 공간을 할당 받는다. 즉 각 슬라이스가 실질적으로 데이터를 처리하는 주체이며, Redshift 아키텍쳐의 최하위 개념이다.
컴퓨팅 노드에 할당된 각 분산키에 따라서 테이블의 Row는 각 슬라이스에 저장된다.
내부 네트워크
Redshift는 고 대역폭으로 연결된, 통신 프로토콜을 활용하여 리더노드와 컴퓨팅 노드 사이에 고속 네트워크 통신을 제공한다. 다만, 내부 네트워크를 통해서 데이터가 통신되는 것은 불필요한 경우 쿼리 비용으로 산정된다. 내부 네트워크 비용을 분석하기 위해서는 쿼리 플랜을 면밀하게 분석하여, 쿼리튜닝 또는 테이블 재설계를 하는 것이 중요하다.
(쿼리 계획, Explain 분석 : https://velog.io/@qja1357/AWS-Redshift-03-QueryExplain)