Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Airbnb Minerva

Airbnb Minerva

Minerva

Buzzvil

June 03, 2022
Tweet

More Decks by Buzzvil

Other Decks in Programming

Transcript

  1. Airbnb’s Metric Platform
    raf kim

    View Slide

  2. Metric Platform
    Metric
    - 1일당 unique user 수
    - 한달동안 unit에서 발생한 매출 합계
    - 1시간동안 찍힌 impression 수
    Metric Platform
    - 위의 Metric들을 매번 유저가 직접 쿼리/코드로 만드는 것이 아니라,
    Metric을 정의하여 언제나 일관된 방식으로 플랫폼을 사용하는 모든 사람이
    일관된 값을 볼 수 있도록 만들어주는 서비스

    View Slide

  3. Metric Consistency
    같은 Metric을 만들 때 “일관된” 한 방법만 사용하도록 하자

    View Slide

  4. A Brief History of Analytics at Airbnb
    “core_data” 라는 주요한 table set을 만들고 분석을 활성화 시켰음
    - Experimental Reporting Framework
    - Democratizing Data at Airbnb
    - Superset: Airbnb’s Data Exploration Platform
    - How Airbnb Democratizes Data Science With Data University
    - Scaling Knowledge at Airbnb

    View Slide

  5. Growing Pains
    core data를 기반으로 생성되는 테이블들이 너무 복잡하게 엮여있음

    View Slide

  6. Example
    INSERT INTO table_b (
    SELECT
    DATE_TRUNC(‘day’, P.created_at) AS data_at,
    P.unit_id,
    P.resource_id,
    P.resource_type,
    SUM(amount) AS reward
    FROM prod_pointsvc.g_vw_point P
    WHERE
    P.resource_type in (‘feed’, ‘lottery’)
    GROUP BY 1, 2, 3, 4
    );
    SELECT SUM(amount) FROM table_b
    roulette이 추가된 것을 반영하지 못함
    INSERT INTO TABLE_A (
    SELECT
    DATE_TRUNC(‘day’, P.created_at) AS data_at,
    P.unit_id,
    P.resource_id,
    P.resource_type,
    SUM(amount) AS reward
    FROM prod_pointsvc.g_vw_point P
    WHERE
    P.resource_type in (‘feed’, ‘roulette’, ‘lottery’)
    GROUP BY 1, 2, 3, 4
    );
    SELECT SUM(amount) FROM table_a

    View Slide

  7. Overcoming Our Growing Pains with Minerva
    Metric을 모두 Minerva라는 플랫폼에서 만들고 제공

    View Slide

  8. Data Production in Minerva
    Minerva는 raw data로부터 일관성있는 metric을 만들어주는 Platform

    View Slide

  9. Design Principles for Standardized Metric
    Minerva를 통해 표준화된 Metric을 서빙하기 위해 필요한 Design Principle

    View Slide

  10. Minerva is Standardized
    Event와 Dimension으로 분류하여 denormalize 하는 것으로 일반화
    Event
    - impression
    - click
    - …
    Dimension
    - unit
    - lineitem
    - ad_group
    - device
    - …

    View Slide

  11. Minerva is Declarative
    어떻게 dataset을 만드는지 유저가 신경쓰지 않아도 된다
    dataset을 만드는 모든 과정은 자동화 되어있다

    View Slide

  12. Minerva is Scalable
    Ingestion
    Data Check
    Join
    Post-Processing and Serving

    View Slide

  13. Minerva is Scalable - Self-healing
    Error가 발생해서 실패하게되는경우
    1. data asset owner에게 실패 알림을 전달함
    (manual re-execution이 필요한 작업)
    2. 처리하지 않는다면 다음 DAG run에서 자동으로 같이 처리
    (물론 재시도한다고 성공한다는 보장은 없음) >>>

    View Slide

  14. Minerva is Scalable - Automated Backfill
    2020년 데이터 전체를 backfill해야 하는 데, 하루씩 수행하면 너무 느리므로
    monthly batch로 실행
    (underlying infrastructure가 받쳐줘야 함)

    View Slide

  15. Minerva is Consistent
    Dimension Source 1이 업데이트 되면,
    Dimension Set A123, B123의
    data version이 업데이트 됨
    data version이 업데이트 되면,
    backfill 동작

    View Slide

  16. Minerva is Highly Available
    production data를 바탕으로 staging data 생성
    현재 시점까지 staging data가 모두 만들어지면 production data로 승격

    View Slide

  17. Minerva is Well Tested

    View Slide

  18. Minerva is Well Tested - Design Spec

    View Slide

  19. Minerva is Well Tested - Design Spec

    View Slide

  20. Consistent Data Consumption
    Minerva Consumer들이 Metric을 조회하는 방법

    View Slide

  21. A Metric-Centric Approach
    General use case
    - 유닛(dimension)에 따른 CTR (metric)을 대시보드/서비스 등으로 저장
    - 쿼리할 테이블을 찾고, 조인/필터를 한 뒤, 집계
    Challenges
    1. Where: 테이블을 찾는 것
    2. How: 조인/필터, 집계
    3. Downstream Application과 통합

    View Slide

  22. Minerva API

    View Slide

  23. Metadata Fetcher: Abstracting the “Where”
    Valid Minerva data source list를 받아와서
    - Druid를 통해 각 data source에 대한 metric, dimension 리스트, valid date range 등의
    metadata를 MySQL에 저장
    - 유저가 “내가 필요로 하는 데이터를 가진 테이블을 찾는 행위" 를 하지 않아도 된다

    View Slide

  24. Data API: Abstracting the “How”
    “price_per_night” metric은
    “gross_booking_value_stays / nights_booked” 로 계산됨
    따라서 request를 두개 metric 기준으로 분리하여 계산한 다음
    최종 결과를 합침
    Request Sample

    View Slide

  25. The Data Consumption Experience
    Python, R, JDBC library 제공

    View Slide

  26. Metric Layer
    raw data 로부터 metric을 뽑아내기 위한 과정을
    별도의 layer로 분리 하자

    View Slide

  27. 진짜로 알고싶으면..
    Airbnb Minerva 1, 2, 3
    Airbnb Data Quality 1, 2, 3, webinar
    Uber Metric Standardization, Data Quality
    Transform Metric Store Summit 2022
    ModernDataStack

    View Slide