Data AI Summit 2022 - Democratizing Metrics at Airbnb Airbnb 테크 블로그 https://medium.com/airbnb-engineering 글들을
Data AI Summit 2022 - Democratizing Metrics at Airbnb Airbnb 테크 블로그 https://medium.com/airbnb-engineering 글들을 보면 Airbnb가 지표 플랫폼인 Minerva를 만들고 이 플랫폼을 분석, 리포팅, 실험 등의 source of truth로 사용하는 것으로 알려져있습니다. 이번 Data AI Summit에서는 Minerva 1.0과 더 개선된 2.0에 대해 소개했고, 앞으로 이 플랫폼의 방향성에 대해서도 발표를 했습니다. 앞으로의 플랫폼의 방향성 중 가장 눈에 띄는건 바로 Airbnb 데이터 팀이 Minerva를 오픈소스화하려는 계획이 있다는 것입니다. ✔️ History of Data @Airbnb 2010년에 Airbnb에는 Data Analyst 한명이 있었고, 이 Data Analyst의 노트북이 Data Warehouse 그 자체였다고 합니다. Production DB에 쿼리하기도 해서 분석 때문에 서비스 안정성이 떨어졌습니다. 2015년부터는 Airbnb에서 airflow, superset같은 오픈소스들을 개발해서 사용했고 내부적으로는 data catalog를 담당하는 dataporta, 실험플랫폼을 구축했습니다. 하지만, 여러 팀들이 데이터를 보기 시작하면서 지표에 대한 문제점들이 발생했습니다. 여러 팀들이 같은 리포트지만 다른 숫자를 보고 있었고, 데이터를 변경했을때 다 반영이 안되기도 했고, 데이터 디버깅도 힘들다보니 데이터에 대한 신뢰도가 떨어졌습니다. ✔️ What is Miverva 지표에 대한 일관성을 확장성있게 유지하기 위해 Airbnb가 개발한 플랫폼입니다. Miverva는 지표 정의부터, Airflow를 통한 DAG orchestration, Backfill, 데이터 서빙 등 지표와 dimension 전체 life cycle을 관리합니다. Minerva를 통해 Airbnb는 insight를 얻기까지의 시간을 대폭 단축시켰습니다. AS-IS 쿼리 정의 -> 테이블 생성 -> Airflow 설정 -> Data Backfill -> ... -> Insight TO-BE 쿼리 정의 -> Minerva Config 업데이트 -> Insight Minerva는 한 곳에서 지표를 정의하고 모든 곳에서 사용할 수 있게 해주는 플랫폼이 되었습니다. ✔️ Minerva 1.0 Challenges Minerva를 운영하면서 마주친 문제들도 있었습니다. Minerva에서는 데이터를 지표 정의에 따라 denormalize하고 transform하는 계산을 했습니다. Airbnb는 Druid를 많은 dimension들에 대해 join을 했을때 메모리를 많이 사용하게 되기에 데이터를 denormalize하고 precompute할 필요가 있었습니다. 미리 데이터를 계산해놓게 되면 데이터의 양이나 불필요한 join들을 할 필요 없어지기 때문에 쿼리 속도는 빨라지지만, 계산하는 작업 자체가 dimension이 많을 수록 매우 비쌌습니다. 그렇기에, 어떤 dimension들을 미리 계산해놓을지 알아야 했습니다. 만약 미리 계산되지 않은 새로운 dimension이 필요해지게 되는 경우에는 데이터를 다시 backfill하고, backfill이 끝날때까지 기다려야했습니다. 그리고 미리 계산을 해놔도 실제로 사용을 잘 안하는 경우도 있었습니다. ✔️ What is Minverva 2.0 Minerva 2.0에서는 Fly join, Fly aggregation을 지원하고 옵셔널로 1.0의 denormalizing과 data cubing을 지원했습니다. Minerva 1.0이 실제로 구성원들에 의해 사용이 되고 나서 Airbnb 데이터 팀은 구성원들의 니즈가 무엇인지, 이 플랫폼을 어떻게 사용하는지 더 잘 알게 되서 개선 포인트를 찾았습니다. 퍼포먼스가 하락시키지 않는 선에서 유연성을 주기로 했습니다. 항상 preaggregation을 하지 않고도 fly join을 할 수 있도록 했습니다. 다만, join 자체가 무거운 연산이기에 옵셔널로 denormalizing과 data cubing도 지원했습니다. Minerva 2.0에서는 starrocks라는 massively parallel process 엔진을 도입했습니다. 그리고 Starrocks로는 denormalized measures뿐만 아니라 raw data도 쿼리할 수 있게 했습니다. SQLGlot을 활용해서 하나의 싱글 엔진 쿼리에 의존하는게 아니라 sql을 엔진에 따라 다르게 사용할 수 있게 했습니다. 그리고 Bi Tool이나 Notebook에 중간에 MySQL compatible 서버 layer를 둬서 구성원들이 쿼리를 하면 use case에 따라서 starrocks혹은 raw data를 직접 쿼리하도록 구성했습니다. --- 마지막으로 첫 문단에서 언급했듯이 Airbnb는 Minerva를 올해안에 오픈소스화하는 것을 목표로 한다고 합니다. 지표를 잘 관리하고 사용하는 것을 고민하고 있던 분들이라면 한번 기다려보고 출시 됐을때 적용해봐도 좋을 것 같습니다. 😀