AWS Redshift with Spring JPA on Docker #2
<개요>
- 이번 글에서는 AWS Redshift를 사용한 경험에 대해서 주로 작성하였습니다.
- AWS Redshift 는 AWS 에서 제공하는 데이터 웨어하우스 솔루션입니다.
https://icthuman.tistory.com/m/entry/AWS-Aurora-vs-RedShift
- 비슷한 제품으로는 GCP BigQuery, Azure SQL Datawarehouse 등이 있습니다.
<내용>
간단히 두 제품을 비교해보면
AWS Redshift | GCP BigQuery | |
구분 | Columnar databases | Columnar databases |
성능 | 쿼리의 유형과 규모에 따라 다양하게 분표된다. | |
제공방식 | on clusters and nodes ds(storage), dc(compute) |
serverless full-managed |
비용 | 인스턴스 타입 (허용 저장공간내에서 추가요금 없음) For dc2.large with 160GB/node storage, the cost is $0.25/node/hour, that is $180/month + no cost for processing queries. |
저장공간 BigQuery charges $20/TB/month for storage and $5/TB for queries. |
인터페이스 | JDBC / ODBC | JDBC / ODBC (일부기능/ Simba드라이버) RESTful API |
Max columns | 1,600 columns | 10,000 columns |
- 사실 성능이라는 것은 비지니스 유스케이스와 밀접한 연관이 있습니다.
- 과거 Hadoop Eco에서도 Hive, Impala, Presto와 같은 다양한 소프트웨어가 있었는데, 수년간 시스템을 구축해본 결과 같은 생태계 내에서 동등한 발전속도를 가지고 있다는 전제라면 자신의 케이스와 매칭이 잘 되는 솔루션을 선택하는 것이 매우 중요합니다.
- 반대로 이야기하면 생태계의 규모가 크고, 발전속도가 빠른 (자주 릴리즈 되는) 소프트웨어는 다 이유가 있다로 설명할 수 있습니다. (다양한 케이스를 흡수하면서, 기존 케이스의 확장성을 보완하는 경우들입니다.)
- 두 제품의 성능 비교는 생략하고 Redshift내에서 선택하는 Node 타입에 대해서만 비교를 해보았습니다.
(실무에서 그렇게 까지 사용해 볼만한 비용이나 시간여유가 없었습니다. 다음에 GCP를 사용하게 될 기회가 생기면 비교해보겠습니다.)
<고밀도 컴퓨팅 DC2 vs 고밀도 스토리지 DS2>
고밀도 컴퓨팅 DC2 | |||||
vCPU | 메모리 | 스토리지 용량 | I/O | 요금 | |
dc2.large | 2 | 15 GiB | 0.16TB SSD | 0.60 GB/s | 0.30 USD per Hour |
dc2.8xlarge | 32 | 244 GiB | 2.56TB SSD | 7.50 GB/s | 5.80 USD per Hour |
고밀도 스토리지 DS2 | |||||
vCPU | 메모리 | 스토리지 용량 | I/O | 요금 | |
ds2.xlarge | 4 | 31 GiB | 2TB HDD | 0.40 GB/s | 1.15 USD per Hour |
ds2.8xlarge | 36 | 244 GiB | 16TB HDD | 3.30 GB/s | 9.05 USD per Hour |
- 저장 공간이 많이 필요하다면 DS2, 연산속도가 필요하다면 DC2를 선택하면 됩니다. (클러스터 생성 후 변경가능)
- 개발목적의 경우 large, 스테이징 / 운영의 목적으로 8xlarge를 선택하였습니다.
- RedShift의 경우 노드의 수는 x2 형태로 지정가능합니다.
- large 와 8xlarge의 경우 개당 노드로 단순하게 비용을 비교하면 약 20배 정도 차이가 납니다. (large(40) vs 8xlarge(2))
<속도 및 저장공간>
- dc2.large(4) vs dc2.8xlarge(2) 의 성능을 비교해 보았습니다. 소요된 Cost는 약 10배정도 입니다.
- dc2.large(4)의 경우 640GB 저장공간이 제공되며, dc2.8xlarge(2) 의 경우 5.1TB가 제공됩니다.
- 쿼리별 수행 속도 (캐시, 네트워크/CPU 상황등 고려해야하는 변수들이 있기 때문에 단순참고로만 보시길 바랍니다.)
쿼리 유형 | dc2.large(4) | dc2.8xlarge(2) |
#1 | 1.2초 | 0.01초 |
#2 | 6.5초 | 0.5초 |
#3 | 7.1초 | 1초 |
#4 | 7.2초 | 0.9초 |
#5 | 8.5초 | 1.2초 |
#6 | 1분30초 | 10초 |
#7 | 3분 | 16초 |
- 대략 300개의 쿼리를 수행하는데 dc2.large(4) 에서 19분정도 소요되던 작업이 dc2.8xlarge(2)내에서 약1분30초 정도에 완료되는것을 확인할 수 있었습니다.
- 정리해보면 제공되는 저장공간은 약 8배, 처리속도는 약 9.5배정도에 근접합니다.
(들어간 비용대비 정직한 결과를 보여줍니다.)
<정리>
AWS Redshift
- 클러스터 생성 후 노드타입을 변경하는 것도 가능합니다. 단, 적재되어 있는 데이터량에 따라서 다운타임이 존재
- Scale out 을 통해서 얻어지는 성능향상 효과도 있으나, 대규모 분산/병렬처리가 필요한 쿼리에만 해당하며
일반적인 쿼리에서는 Scale up을 통한 vCPU, 메모리, I/O 의 성능향상 효과가 눈에 보입니다.
일반적인 선택가이드
- 대량의 비정형/반정형 데이터의 단순 가공의경우 S3로 Pipeline을 구축하고 Athena 로 검색하는 것이 가장 효율적
- Join이 없으며 수천만건 이상의 대량의 데이터를 쉽게 Scale out할 수 있는 구조를 원한다면 NoSQL
- Join이 필요하며 대규모 분석쿼리 및 표준SQL, 다양한 인터페이스가 필요한 경우 OLAP
- 트랜잭션처리가 가장 중요한 경우면 OLTP
<각 Public Cloud에 대한 개인적인 의견 + 동향>
- AWS의 경우 IaaS로 출발했던 구조로 인하여 상대적으로 Azure, GCP 에 비해서 Full manage, serverlees 솔루션이 부족
- GCP의 경우 BigTable, BigQuery가 뛰어난 성능을 가지고 있기 때문에, 최근 데이터처리에 특화된 어플리케이션이 필요한 경우 선택하는 수요가 늘고 있음
<참고사이트>
https://blog.panoply.io/a-full-comparison-of-redshift-and-bigquery
https://rudderstack.com/blog/aws-redshift-vs-google-bigquery-open-source-analytics/
https://www.xplenty.com/blog/redshift-vs-bigquery-comprehensive-guide/
https://db-engines.com/en/system/Amazon+Redshift%3BGoogle+BigQuery