제퍼넷 로고

Ibotta는 AWS Glue를 사용하여 셀프 서비스 데이터 레이크를 구축합니다.

시간

Ibotta에서 Erik Franco가 공동으로 작성한 게스트 게시물입니다.

Ibotta는 소비자가 앱을 통해 쇼핑하고 결제할 때 일상적인 구매에 대해 실제 현금을 제공하는 무료 캐시백 보상 및 결제 앱입니다. Ibotta는 1,500개 이상의 브랜드 및 소매업체와 제휴하여 소비자가 구매 시 현금을 얻을 수 있는 수천 가지 방법을 제공합니다.

Ibotta에서는 매일 테라바이트의 데이터를 처리합니다. 우리의 비전은 데이터 과학자, 의사 결정권자, 기계 학습 엔지니어 및 비즈니스 인텔리전스 분석가가 이러한 데이터 세트를 쉽게 사용하여 비즈니스 통찰력을 제공하고 소비자 및 절약 경험을 지속적으로 개선할 수 있도록 하는 것입니다. 이러한 데이터 민주화 전략은 Ibotta가 최근 몇 년 동안 경험한 폭발적인 성장의 핵심 기둥임이 입증되었습니다.

이러한 성장은 또한 내부 기술 스택을 재고하고 재구축하도록 이끌었습니다. 예를 들어 데이터 세트가 복잡하고 중첩된 JSON 데이터 구조와 결합하여 매년 두 배로 커지기 시작하면서 데이터 웨어하우스가 더 이상 분석 팀의 요구 사항을 충족하지 못한다는 것이 분명해졌습니다. 이를 해결하기 위해 Ibotta는 데이터 레이크 솔루션을 채택했습니다. 데이터 레이크는 데이터 민주화의 사명을 계속해서 수행한 확장 가능하고 비용 효율적인 솔루션이었기 때문에 큰 성공을 거둔 것으로 입증되었습니다.

데이터 레이크로의 전환을 위한 추진력이었던 급속한 성장은 이제 업스트림 엔지니어가 모놀리스 아키텍처에서 마이크로서비스 아키텍처로 전환하도록 강요했습니다. 우리는 이제 이벤트 기반 마이크로서비스를 사용하여 이벤트 발생 시 대응할 수 있는 내결함성 및 확장 가능한 시스템을 구축합니다. 예를 들어 지불을 담당하는 마이크로 서비스가 있습니다. 지불이 발생할 때마다 서비스는 PaymentCompleted 이벤트. 다른 서비스는 다음을 들을 수 있습니다. PaymentCompleted 감사 이메일 보내기와 같은 다른 작업을 트리거하는 이벤트.

이 게시물에서는 Ibotta가 다음을 사용하여 셀프 서비스 데이터 레이크를 구축한 방법을 공유합니다. AWS 접착제. AWS Glue는 분석, 기계 학습 및 애플리케이션 개발을 위한 데이터를 쉽게 검색, 준비 및 결합할 수 있는 서버리스 데이터 통합 ​​서비스입니다.

과제: 유연하고 반구조화된 스키마를 관계형 스키마에 맞추기

이벤트 중심 아키텍처로의 전환은 가치가 높지만 몇 가지 과제를 제시했습니다. 당사 분석 팀은 사기 탐지와 같이 실시간 데이터에 대한 저지연 액세스가 예상되는 사용 사례에 이러한 이벤트를 사용합니다. 이러한 실시간 시스템은 Ibotta의 새로운 성장 영역을 촉진했으며 기존 배치 기반 데이터 레이크 아키텍처를 잘 보완합니다. 그러나 이 변경으로 인해 두 가지 문제가 발생했습니다.

  • 우리의 이벤트는 관계형 스키마로 잘 변환되지 않는 반구조화되고 깊이 중첩된 JSON 객체입니다. 이벤트도 본질적으로 유연합니다. 이러한 유연성을 통해 업스트림 엔지니어링 팀은 필요에 따라 변경할 수 있으므로 Ibotta는 시장 기회를 활용하기 위해 신속하게 이동할 수 있습니다. 불행히도 이러한 유연성으로 인해 스키마를 최신 상태로 유지하기가 매우 어렵습니다.
  • 이러한 과제에 더해 지난 3년 동안 당사의 분석 및 플랫폼 엔지니어링 팀의 규모가 두 배로 늘어났습니다. 그러나 우리의 데이터 처리 팀은 확장 가능한 파이프라인과 산업 수요를 개발하는 데 전문 기술을 보유한 자격을 갖춘 데이터 엔지니어를 고용하기가 어렵기 때문에 대체로 동일한 규모를 유지했습니다. 이는 우리 데이터 처리 팀이 새로운 데이터 소스를 온보딩하라는 분석 팀의 요청을 따라갈 수 없다는 것을 의미했습니다.

솔루션: 셀프 서비스 데이터 레이크

이러한 문제를 해결하기 위해 우리는 데이터 레이크가 셀프 서비스 데이터 소비 기능을 제공하는 것만으로는 충분하지 않다고 판단했습니다. 또한 셀프 서비스 데이터 파이프라인이 필요했습니다. 이는 플랫폼 엔지니어링 팀과 분석 팀 모두에게 데이터 레이크 내에서 데이터를 사용할 수 있도록 하고 최소한의 데이터 엔지니어링 개입 없이도 사용할 수 있는 경로를 제공합니다. 다음 다이어그램은 셀프 서비스 데이터 수집 파이프라인을 보여줍니다.

파이프라인에는 다음 구성 요소가 포함됩니다.

  1. Ibotta 데이터 이해 관계자 – 내부 데이터 이해 관계자는 데이터 세트를 자동으로 온보딩하는 기능을 원했습니다. 이 사용자 기반에는 플랫폼 엔지니어, 데이터 과학자 및 비즈니스 분석가가 포함됩니다.
  2. 구성 파일 – 데이터 이해 관계자는 온보딩해야 하는 데이터 세트에 대한 특정 세부 정보로 YAML 파일을 업데이트합니다. 이러한 데이터 세트의 소스에는 엔터프라이즈 마이크로서비스가 포함됩니다.
  3. Ibotta 엔터프라이즈 마이크로서비스 – 마이크로서비스는 Ibotta 플랫폼의 대부분을 구성합니다. 이러한 마이크로서비스 중 다수는 이벤트를 활용하여 중요한 정보를 비동기적으로 전달합니다. 이러한 이벤트는 분석 통찰력을 얻는 데에도 유용합니다.
  4. 아마존 키네 시스 – 구성 파일이 업데이트된 후 데이터는 즉시 다음으로 스트리밍됩니다. 아마존 키네 시스. Amazon Kinesis를 사용하면 실시간 스트리밍 데이터를 쉽게 수집, 처리 및 분석할 수 있으므로 적시에 통찰력을 얻고 새로운 정보에 빠르게 대응할 수 있습니다. 통해 데이터 스트리밍 Kinesis 데이터 스트림Kinesis 데이터 Firehose 데이터를 실시간으로 분석할 수 있는 유연성을 제공하는 동시에 데이터를 아마존 단순 스토리지 서비스 (아마존 S3).
  5. Ibotta 셀프 서비스 데이터 파이프라인 – 이것은 데이터 처리의 시작점입니다. 우리는 Apache Airflow를 사용하여 매시간 파이프라인을 오케스트레이션합니다.
  6. Amazon S3 원시 데이터 – 데이터는 변환 없이 Amazon S3에 저장됩니다. JSON의 복잡한 특성은 향후 처리 또는 유효성 검사를 위해 유지됩니다.
  7. AWS 접착제 – 이제 우리의 목표는 복잡한 중첩 JSON을 가져와 더 간단한 구조를 만드는 것입니다. AWS Glue는 이 데이터를 처리하는 데 사용하는 기본 제공 변환 세트를 제공합니다. 변환 중 하나는 관계 화—반구조화된 데이터를 가져와 Presto와 같은 엔진에서 더 쉽게 분석할 수 있는 형식으로 변환하는 AWS Glue 변환입니다. 이 기능은 당사의 분석 팀이 자신에게 익숙한 분석 엔진을 계속 사용하여 관계형 데이터 소스에서 반구조화된 이벤트 데이터 소스로의 전환에 따른 영향을 줄일 수 있음을 의미합니다. 관계화 기능은 중첩된 구조를 병합하고 여러 동적 프레임을 생성할 수 있습니다. 80줄의 코드를 사용하여 JSON 기반 마이크로서비스 메시지를 소비 가능한 테이블로 변환합니다. 우리는 이 코드 베이스를 재사용이 아닌 참조로 제공했습니다.
    // Convert to a DynamicFrame and relationalize // Convert it back to DataFrame val dynamicFrame: DynamicFrame = DynamicFrame(df, glueContext) val dynamicFrameCollection: Seq[DynamicFrame] = dynamicFrame.relationalize(rootTableName = glueSourceTable, stagingPath = glueTempStorage, options = JsonOptions.empty) val relationalizedDF: Dataset[Row] = removeColumnDotNotationRelationalize(dynamicFrameCollection(0).toDF()) // Get rid of dot-notation and repartition it val repartitionedDF: Dataset[Row] = relationalizedDF.repartition(finalRepartitionValue.toInt) // Write it out repartitionedDF .write .mode("overwrite") .option("compression", "snappy") .parquet(glueRelationalizeOutputS3Path)

  8. Amazon S3 큐레이트 – 그런 다음 관계형 구조를 Amazon S3에 Parquet 형식으로 저장합니다.
  9. AWS Glue 크롤러 - AWS Glue 크롤러 AWS Glue 데이터 카탈로그에서 스키마와 카탈로그를 자동으로 검색할 수 있습니다. 이 기능은 데이터 엔지니어가 수동으로 스키마를 생성하거나 업데이트해야 하는 요구 사항을 제거하기 때문에 셀프 서비스 데이터 파이프라인의 핵심 구성 요소입니다. 이전에는 변경이 필요한 경우 플랫폼 엔지니어, 데이터 엔지니어, 분석가를 포함하는 커뮤니케이션 경로를 통해 진행되었습니다. AWS Glue 크롤러는 이 통신 경로에서 데이터 엔지니어를 효과적으로 제거합니다. 이는 데이터 레이크 내에서 새로운 데이터 세트 또는 데이터 세트에 대한 변경 사항을 신속하게 사용할 수 있음을 의미합니다. 또한 데이터 엔지니어가 셀프 서비스 데이터 파이프라인 및 기타 데이터 포장 로드맵 기능에 대한 개선 작업을 계속할 수 있습니다.
  10. AWS Glue 데이터 카탈로그 – 증가하는 데이터 레이크의 일반적인 문제는 데이터 세트가 작업하기 점점 더 어려워질 수 있다는 것입니다. 이에 대한 일반적인 이유는 데이터 레이크 내에서 데이터의 검색 가능성이 부족하고 데이터 세트가 전달하는 내용에 대한 명확한 이해가 부족하기 때문입니다. 그만큼 AWS 글루 카탈로그 AWS Glue 크롤러와 함께 작동하여 데이터 레이크 사용자에게 다양한 데이터 레이크 데이터 세트에 대한 검색 가능한 메타데이터를 제공하는 기능입니다. AWS Glue 크롤러가 새로운 데이터 세트 또는 업데이트를 발견하면 데이터 카탈로그에 기록됩니다. 그런 다음 이러한 데이터 세트에 대한 테이블 또는 필드 수준에서 설명을 추가할 수 있습니다. 이는 다양한 데이터 레이크 소비자 사이에 존재하는 부족 지식 수준을 줄이고 이러한 사용자가 데이터 레이크에서 셀프 서비스를 쉽게 할 수 있도록 합니다.
  11. 최종 사용자 데이터 소비 – 최종 사용자는 1단계에서 호출한 내부 이해 관계자와 동일합니다.

장점

우리가 설명한 AWS Glue 기능은 이를 셀프 서비스 데이터 파이프라인 구축의 핵심 구성 요소로 만듭니다. AWS Glue를 처음 도입했을 때 이전 데이터 파이프라인에 비해 OPEX 비용이 200배 감소했습니다. AWS Glu가 초당 청구 방식으로 전환하면 이 기능이 더욱 향상되었습니다. 지금까지 AWS Glue를 통해 OPEX 비용을 XNUMX배 절감할 수 있었습니다. 또한 AWS Glue는 XNUMX개가 넘는 복잡한 JSON 객체를 수집하고 처리하기 위해 수동 개입이 거의 또는 전혀 필요하지 않습니다. 이를 통해 Ibotta는 매일 AWS Glue를 조직의 성장하는 분석 및 플랫폼 엔지니어링 팀에 실행 가능한 데이터를 제공하는 핵심 구성 요소로 활용할 수 있습니다.

우리는 셀프 서비스 데이터 플랫폼을 구축할 때 다음과 같은 교훈을 얻었습니다.

결론 및 다음 단계

우리가 구축한 셀프 서비스 데이터 레이크를 통해 비즈니스 팀은 속도와 민첩성의 이점을 실현하고 있습니다. 다음 단계로 다음 기능으로 셀프 서비스 파이프라인을 개선할 것입니다.

  • AWS 글루 스트리밍 – 실시간 관계화를 위해 AWS Glue 스트리밍을 사용합니다. AWS Glue 스트리밍을 사용하면 잠재적으로 오케스트레이션 계층을 제거하는 동시에 데이터를 데이터 레이크에 더 빨리 가져옴으로써 셀프 서비스 파이프라인을 단순화할 수 있습니다.
  • ACID 트랜잭션 지원 – ACID 트랜잭션을 허용하는 데이터 레이크에서 데이터 형식을 구현합니다. 이 ACID 계층의 이점은 스트리밍 데이터를 데이터 레이크 데이터 세트로 병합하는 기능입니다.
  • 데이터 전송 계층 단순화 – 업스트림 플랫폼 엔지니어링 도메인과 데이터 도메인 간의 데이터 전송 계층을 통합합니다. Ibotta에서 이벤트 기반 아키텍처를 처음 구현한 때부터 현재까지 AWS는 다음과 같은 새로운 서비스를 제공했습니다. 아마존 이벤트 브리지Apache Kafka 용 Amazon Managed Streaming (Amazon MSK) 셀프 서비스 및 데이터 파이프라인의 특정 측면을 단순화할 수 있는 잠재력이 있습니다.

이 블로그 게시물을 통해 조직에서 서버리스 기술을 사용하여 셀프 서비스 데이터 레이크를 구축하여 비즈니스 목표를 가속화할 수 있기를 바랍니다.


저자에 관하여

에릭 프랑코 Ibotta의 데이터 설계자이며 Ibotta의 차세대 데이터 플랫폼 구현을 주도하고 있습니다. Erik은 낚시를 즐기고 열렬한 등산객입니다. 그의 사랑스러운 아내 Marlene과 멋진 개 Sammy와 함께 콜로라도의 많은 트레일 중 하나를 하이킹하는 것을 종종 볼 수 있습니다.

시브 나라야난 AWS의 데이터 레이크 및 분석 솔루션에 대한 글로벌 비즈니스 개발 관리자입니다. 그는 전 세계의 AWS 고객과 협력하여 최신 데이터 플랫폼을 전략화, 구축, 개발 및 배포합니다. Shiv는 음악, 여행, 음식 및 신기술 시도를 좋아합니다.

매트 윌리엄스 AWS Enterprise Support의 수석 기술 계정 관리자입니다. 그는 고객에게 클라우드 여정을 안내하고 복잡한 문제에 대한 혁신적인 솔루션을 구축하는 데 열정을 가지고 있습니다. 여가 시간에 Matt는 기술 실험, 야외 활동, 새로운 장소 방문을 즐깁니다.

출처: https://aws.amazon.com/blogs/big-data/ibotta-builds-a-self-service-data-lake-with-aws-glue/

spot_img

최신 인텔리전스

spot_img