[2022 AWS re:Invent] How Samsung modernized architecture for real-time analytics

세션 유형

Break out

세션명

How Samsung modernized architecture for real-time analytics

강연자

Jewon Lee
Head of SmartThings Cloud Engineering, Samsung Electronics

세션요약자

안종규(Jonggyu Ahn)

핵심내용 요약
  • 실시간 분석을 위해 스트리밍 데이터 분석 아키텍처를 현대화한 방법을 공유
  • Apache Flink용 Amazon Kinesis Data Analytics를 사용하여 자체 관리형 Apache Spark에서 완전 관리형 스트림 처리 플랫폼으로 전환한 방법과 완전 관리형 Kinesis Data Streams 및 Amazon MSK를 사용하여 규모에 맞게 데이터를 안전하게 스트리밍
키워드
  1. 자체 관리형 Apache Spark
  2. 완전관리형 데이터 스트리밍 아키텍처 AWS Kinesis
  3. 데이터 분석 Apache Flink J1
상세내용

Samsung SmartThings

  • 수억 명 이상의 사용자와 장치를 지원하는 홈 IoT 플랫폼
  • 삼성 Smart TV, 냉장고 같은 직접 연결된 장치 / 허브 연결 장치 / Cloud to Cloud (C2C)로 연결
  • IoT 장치에서 전송되는 모든 데이터는 클라우드를 통해 전송

Before Samsung SmartThings 데이터 플랫폼

  • 데이터 플랫폼이 데이터 처리를 담당하며, 하루 평균 약 30테라바이트의 데이터를 처리
  • Apache Spark 프레임워크를 Apache Hadoop 클러스터 위에서 데이터 처리 엔진으로 사용했으며 이 모든 것은 ec2에서 실행되는 자체 관리형 서비스
  • 분산 이벤트 스트리밍 플랫폼은 Spark 앱이 Kafka 또는 Kinesis와 같은 여러 센서 또는 소스에서 데이터를 가져와 ETL을 처리
  • 데이터베이스로 Hbase 사용
  • SmartThings 사용자의 급격한 증가로 프로세스가 획기적으로 증가하여 챌린지 필요
  • 단일 ec2 인스턴스의 동일한 노드에서 원사를 사용하여 Hadoop 클러스터 위에서 실행하는 것은 매우 어렵고, 데이터를 처리하는 동안 지연 및 성능 저하가 발생 
  • Hadoop 클러스터의 노드 수 증가 및 Spark 오토 스케일링 등 결과적으로 비용 증가
  • 한 달 동안 받은 하루 평균 5회 이상의 즉각적인 경고 및 Livy 또는 Yarn 같은 Spark 구성 요소의 오류로 인해 Hadoop에서 중단된 경우의 수치
  • 데이터 플랫폼 아키텍처 개선 필요

데이터 플랫폼 이전 프로젝트로 세 가지 목표를 설정

  • 비용 효율성 향상
  • 안정성과 가용성 개선
  • 운영 효율성 향상

인허브, 인 하우스 Hadoop 클러스터 보다 비용이 적게 들고 더 나은 운영 효율성 및 안정성을
보장하는 대안 필요

대체 솔루션 주요 고려 사항

  • 초당 수십만 건의 요청을 수신하므로 실시간으로 대규모 처리 가능
  • 고가용성으로 쉬운 클러스터 유지 관리. 완전 관리형 솔루션
  • 로드 및 애플리케이션이 워크로드에 따라 자동으로 확장 가능. 즉 Auto Scaling 가능
  • 고려 사항에 따라 대안 솔루션으로 Apache Spark와 Apache Flink 후보 선정

Apache Flink용 Kinesis 데이터 분석 선택

  • 데이터 플랫폼은 실시간으로 데이터를 처리하는 애플리케이션이 대부분이기 때문에 Apache Spark의 마이크로 비트 처리보다 Apache Flink의 실시간 데이터 처리 모델이 더 적합
  • 서버리스, 완전 관리형 솔루션, 독립적 작동, 주기적 저장 지점 생성 가능
  • Apache Spark to Apache Filnk 마이그레이션

데이터 플랫폼 현재 아키텍처

  • 데이터 처리 부분과 데이터 제공 부분
  • 이전 아키텍처와 달리 Apache Flink용 Kinesis 데이터 분석으로 대체되고, 들어오는 트래픽은
    먼저 Kafka가 관리하고 Apache Flink용 Kinesis 데이터 분석에서 소비
  • 데이터베이스와 데이터베이스에 액세스하는 마이크로 서비스에 집계 및 저장
  • eks로 컨테이너화되어 데이터 플랫폼의 마이크로서비스 운영

CI/CD 개선

  • CI/CD를 단일 워크플로로 결합
  • 애플리케이션 코드가 git에 등록되면 CI 도구를 활용하여 자동으로 빌드를 시작
  • CI 도구는 배포 작업을 호출하고 Spinnaker는 각 애플리케이션의 Jenkins 작업을 호출하여 Jenkins 서비스가 실행될 때 배포
  • 마지막으로 다운로드한 서버 및 구성 파일을 사용하여 Flink 애플리케이션 생성 및 업데이트

개선 사항을 통해 여러 애플리케이션에 동시에 구성을 적용하고, Spinnaker 기반 CD 인프라를
활용하여 배포를 추적

극복해야 하는 세 가지 주요 과제

  • Apache Flink용 Kinesis 데이터 분석이 스마트 데이터 플랫폼에 적합하기 때문에 마이그레이션을 결정했지만 마이그레이션까지 이어지는 프로세스가 상당히 복잡
  • 1. CPU 사용량에 따라 빠르게 변경되는 Auto Scaling
  • 2. Spark와 Flink의 성능 차이
  • 3. 스트리밍 데이터의 오프셋을 적절하게 관리

Challenge 1. CPU 사용량에 따라 빠르게 변경되는 Auto Scaling

  • 애플리케이션이 15분 동안 CPU를 75% 이상 사용하면 확장하고 6시간 동안 CPU를 10%
    미만으로 사용하면 축소하는 로직으로 스케일 인을 결정하는데 시간이 너무 오래 걸리고, 애플리케이션 기반으로 요구 사항을 스케일 아웃할 수 없거나 확장할 수 없다고 생각됨
  • 문제를 극복하기 위해 사용자 지정 Auto Scaling을 구축
  • Amazon Cloud watch는 CPU 사용을 추적하고 AWS Lambda는 애플리케이션 병렬 처리 값을 변경
  • CPU가 스케일 인 또는 스케일 아웃 조건을 놓치는 경우 이러한 구성 요소 및 스케일링 정책을 관리하기 위해 terraform을 사용
  • 병렬화 최소 최대 CPU 임계값 등과 같은 쿨다운 값을 설정하여 각 애플리케이션에 대해 서로 다른 확장 정책을 설정 가능. 적합한 자체 확장 정책 설정
  • 이벤트 볼륨에 맞게 자동으로 확장할 수 있는 덕분에 궁극적으로 운영 비용을 절감

Challenge 2. Spark와 Flink의 성능 차이

  • Apache Flink용 Kinesis 데이터 분석은 Kinesis 처리 장치(kpu)라는 리소스 할당 단위를 사용
  • 단일 kpu는 1 코어 4GB의 메모리와 50GB의 트리를 제공
  • Apache Flink는 일반적인 스트리밍 데이터 처리 측면에서 Spark에 비해 더 나은 성능을 보이지만 애플리케이션 속성에 따라 Spark 보다 낮은 성능을 보여 후속 조치를 구현
  • 첫번째 후속 조치는 Async I/O. Apache Flink는 하나의 이벤트를 차례로 처리하기 때문에 IO
    외부 시스템과의 상호 작용이 필요한 경우 비동기 IO를 적용하는 것이 좋음
  • SmartThings 데이터 플랫폼이 데이터를 처리하기 위해 다른 마이크로 서비스와 자주 상호 작용하는 것을 고려하여 비동기 IO를 적용
  • 두번째는 Flink가 데이터를 하나씩 처리하는 완전한 스트리밍 데이터 처리 방법으로 작동하기 때문에 데이터베이스 일괄 읽기 및 쓰기 적용. SmartThings 데이터 플랫폼은 hbase를 데이터베이스로 사용
  • 성능테스트 결과 메모리와 체크포인트 용량이 약간 증가하더라도 각 베이스는 배치 쓰기가 절대적으로 필요하다는 결론

Challenge 3. 스트리밍 데이터의 오프셋 관리

  • 일반적으로 SmartThings 데이터 플랫폼에서 Kafka를 사용하여 가져오지만 경우에 따라 kubernetes 및 Kinesis 데이터 스트림을 사용하여 데이터 수집
  • Apache에서 Kinesis 데이터 스트림의 데이터를 검색하는 경우 오프셋은 dynamodb에서 관리되지만 Apache Flink에서 개체를 관리하는 것은 Apache Spark를 수행하는 것과 다르기 때문에 주의 필요
  • Apache Flink의 Kafka 커넥터는 체크포인트가 저장될 때마다 미리 예약된 Kafka Topic에 옵션을 저장. 오프셋은 Apache Flink의 포인트를 사용하는 경우 세이브 포인트에 저장
  • 포인트가 사용되지 않을 때 Kafka 주제의 값 Apache Flink의 클래스 커넥터는 저장 포인트에 완전히 의존하며 dynamodb에 오프셋을 저장하지 않음
  • 따라서 Kinesis 데이터 스트림에 대한 데이터를 검색할 때 Apache Flink의 저장 지점 기능을 사용하려면 Apache Flink용 Kinesis 데이터 분석의 스냅샷을 활성화 필요

Impact 1 : 확장성

  • 수십 개의 데이터 처리 애플리케이션에 모두 Auto Scaling을 적용하여 트래픽이 4배 증가하더라도 트래픽 증가를 관리할 수 있는 시스템을 구축
  • 응용 프로그램 kpu가 사용하는 차트에서 볼 수 있듯이 운영을 위한 인적 자원이 이벤트의 트래픽 패턴에 따라 이동
  • 데이터 처리를 위한 리소스가 자동으로 동적으로 확장 및 축소됨을 의미

Impact 2 : 안정성과 가용성

  • SmartThings 데이터 플랫폼 실시간 데이터 처리 구성 요소를 서버리스로 마이그레이션하거나 실시간 데이터 처리 구성 요소를 구성하여 작동법의 문제를 해결, 계단식 오류의 근본적인 원인을 제거
  • 각 애플리케이션에 대한 독립적인 클러스터로 인시던트가 발생해도 다른 애플리케이션에 영향을 미치지 않아 클러스터가 다운되더라도 안정성을 크게 향상

Impact 3 : 효율성

  • 클러스터 노드를 직접 관리할 때 오류 복구에 1시간 이상 걸렸지만 이제는 Application에 할당된 클러스터를 몇 분 안에 복구 가능
  • 데이터 처리에 대한 알림이 40% 미만으로 감소했으며, 마이그레이션 후 장애 복구 및 수동 클러스터 복구 사례가 없고, 총 소유 비용 감소
  • 컴퓨팅 리소스가 500kpu에서 600kpu로 증가했음에도 불구하고 이러한 효율성 개선으로 전체 운영 리소스를 약 80%까지 크게 감소
  • Apache Flink용 Kinesis 데이터 분석을 통해 데이터 플랫폼을 현대화

기대사항

  • 과거 Spark 앱을 배포하는데 1분이 걸렸다면, Kinesis 데이터 분석을 사용하면 2~4분이 소요.
    Flink 애플리케이션을 훨씬 빠르게 배포할 수 있다면 효율성을 높이는데 많은 도움이 될 듯함
  • apache flink용 Kinesis 데이터 분석은 아직 로거 및 kpu 지표에 대해 다른 로그 수준 사용을 지원하지 않음. 이러한 기능의 대부분은 AWS 서비스 팀에서 개발 중으로 알고 있음
Bespin’s Comment
  1. 유지관리 및 효율성이 중요한 데이터 플랫폼 관련하여 AWS의 서버리스, 완전 관리형 서비스를 활용한 마이그레이션 모범 사례를 확인할 수 있었습니다.
  2. IoT 및 실시간 데이터 수집 및 분석에 대한 확장성, 고가용성을 확보하고, 비용 절감까지 이룬 사례로써 활용 가능합니다.

Leave a Comment