Data Platform 구축시 비용효율적/관리용이한 AWS Products
Data Platform 을 구축하면서 경험한 AWS Products 에 대한 개인적인 의견입니다. 틀린 부분이 있을수 있습니다
S3
평가 : 가격은 저장비용 0.025$/GB/Month + Transfer 비용으로, 대용량 데이터를 저장하고 분석하는 경우에 아주 적은 금액은 아니지만 다른 서비스에 비해 저렴합니다.
신뢰도 99.999999999% 의 높은 신뢰도와 여러가지 다양한 기능의 Storage Class, 보안적용이 가능함
동시성 문제에 대해서는 물음표이지만, EMR/Presto/Athena/Redshift spectrum 등의 bigdata solution의 source가 되어 데이터플랫폼 구축에서 DataLake역할에 적합합니다.
추천 : 👍👍👍
EKS
평가 : Kubernetes 는 여러가지 다양한 서비스를 구축하고 안정적으로 운영하는데 있어서, 자동화/배포/운영등을 할수 있는 플랫폼입니다. kubernetes 를 실제로 ec2에 구척하고자한다면 수십개의 docker container가 필요하고 HA를 위해서는 aws AZ마다 설치 및 구성이 필요하지만, EKS를 사용하면 그런것들에 대해서 관리이슈 없고 가격은 한달에 50$정도(100$정도였는데 2020/3월에 50%인하) 이며 실제로 설치해야한다면 필요한 ec2가격(ec2가격*AZ숫자), 쉬운 kubernetes version upgrade 를 생각하면 kubernetes가 필요할 경우 자체적으로 구축하는것 보다 비용/운영측면에서 메리트가 있는 서비스입니다.
GKS에 비해서 자세한 옵션, 보안등에서 약간 부족함이 있기는 하지만 주로 쓰는기능에 부족함은 없습니다.
추천 : 👍👍
Glue metastore
평가 : AWS에서 관리해주는 hive metastore. 공짜(?) 임. EMR만 사용한다면 hive, presto, spark에서 database/table을 동일한 시점으로 사용할수 있도록 지원하므로 안쓸 이유가 없습니다.
EMR을 사용하지 않고 HIve, Presto, Spark을 사용한다면 glue metastore를 지원하는 version의 solution을 사용해야합니다. Presto같은경우는 prestosql.io version의 경우 aws glue metastore를 지원하고 Spark의 경우에는 databrick cloud에서는 지원가능한것 같은데 ec2에서 바로 적용이 되는지는 테스트 필요하며 aws library 를 포함시킬경우 glue metastore 활용가능합니다.
추천 : 👍👍
Kinesis
평가 : AWS Streaming platform. Kinesis streaming, Kinesis firehose, Kinesis analytics 가 있으며 (Kafka도 AWS managed service가 있기는) 다른 streaming service(Kafka 등)를 설치/운영하는데 매우 많은 리소스가 소비가 되기때문에 설치/관리용이하고 scalable한 kinesis를 사용해서 운영에 대한 부담을 줄일수 있습니다.
추천 : 👍👍
Athena
평가 : 따로 emr이나 presto 설치 없이 s3나 glue metastore 테이블들을 query해볼수 있고, 성능면에서도 AWS에서 보장하는 부분이 있어 데이터 분석/조회시에 유용한 제품입니다.
데이터량에 따라 비용이 증가하기 때문에 데이터가 크거나 비슷/동일한 쿼리를 여러번 실행할 경우에는 비용이 부담될수 있어 다른 방법(emr이나 presto등)이 더 비용효율적일수 있습니다.
추천 : 👍
EC2
평가 : computing resource가 필요할때 바로 사용할수 있으니 cloud환경에서 기본이되는 product입니다. Lambda나 Fargate등의 serverless 방식이 서버관리등의 이슈가 없어서 많은 부분이 전환되고 있지만, 개발초기나 serverless를 지원하지 않는 solution등의 사용할수 밖에 없는 환경이 있을수 있습니다.
추천 : 👍
RDS
평가 : AWS에서 제공하는 managed rdb service. mysql, maria, postgresql, aurora, oracle, sqlserver 를 지원하고 알아서 설치,운영,backup,monitoring 해줍니다. 관리는 편하지만 세부적인 disk관리나 , process, memory등을 linux 환경에서 모니터링, 관리하는데에는 제약이 있습니다.
Aurora RDS의 경우는 aws에서 자제적으로 만든 database로 mysql과는 호환되지만 replication 측면에서 내부구조는 mysql계열과는 많이 다르고 cloud환경에 더 적합해보입니다. aws환경에서 안쓰기는 어려운 제품입니다.
추천 : 👍👍
EMR
평가: aws에서 제공하는 hadoop관련 제품의 managed service. hadoop/hive/spark/presto/zeppelin/jupyter 등을 본인이 직접설치하고 관리하지 않아도 되기때문에 분석플랫폼 구축시 매우 편리하고 필수적인 제품입니다. emr자체의 문제발생시에 emr설치구조를 파악해야해서 다른 native solution(cloudera같은) 을 설치했을때보다 좀 더 복잡할수도 있지만 emr의 편이성을 생각하면 감수해야할 부분인듯 합니다.
최근들어 spark, presto + glue metastore 환경에서는 hadoop, hive 를 사용할일이 없어서, kubernetes master로 spark 를 실행하거나 kubernetes에 presto를 설치하는게 더 비용효율적인듯 합니다. kubernetes로 data platform 구성시에 많은 참고가 되는 시스템이므로 계속 개선되었으면 좋겠습니다.
추천 : 👍
Redshift
평가 : 기존 on-premise 환경에서의 netezza, greenplum등의 MPP방식의 분석전용DB를 cloud에서 제공하는 solution으로 대량데이터를 query를 활용해서 분석할수 있습니다.
기존 MPP에 비해 비싸고 (한두달사용하거 말거면 싸겠지만 2~3년동안 계속사용한다면) 느립니다(rds에는 분석못하는 크기의 데이터를 빠르게 분석할수 있다는 면에서는 이점이 있지만, 기존 MPP와 비교입니다). 접속Session에 대한 제약이 있고, 체감상 매우 작습니다.(https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) 에는 50으로 나오는데 실제로 무거운 쿼리는 10개미만으로 동시사용할수 있는 정도입니다.
Update 문제만 해결이 된다면(업무적으로나 기술적[apache hudi, delta lake 등]으로) spark/presto사용하는게 비용효과적입니다.
추천 : X
Glue ETL
평가 : glue ETL은 python, spark(pyspark, scala), spark-streaming 이 있습니다. ETL은 그 이름에 맞게 2가지 용도가 있는데, ods를 적재하거나 mart나 summary 를 만드는 작업입니다. ods적재에서 spark은 source db에 부하를 주기 때문에 python을 이용하려고 했으나 기본설치된 libary가 적은데 더 설치도 안되서 다양한 db나 기능을 이용할수가 없었습니다. spark의 경우에는 glue spark instance 자원을 받는데 10분가량 걸리고(이 문제는 언젠가는 해결될거라 생각합니다), emr보다도 비쌉니다. kubernetes master로 하는 spark + spot instance/fargate 를 사용하는게 비용면이나 성능에 대한 튜닝면에서 유리해보입니다. 나온지 얼마되지 않은 서비스라서 기능이 더 추가되기를 기대해봅니다.
추천 : 아직까지는 X