The Airbnb Tech Blog | Medium ... 노트

The Airbnb Tech Blog | Medium 한국어

에어비앤비 엔지니어링은 에어비앤비 엔지니어링 팀에서 작성한 다양한 기술, 혁신 및 산업의 사례 연구에 대한 기사 포트폴리오입니다. 이 사이트는 소프트웨어 엔지니어링, 제품 개발, 확장성, 성능 등 다양한 측면에서 직면하는 접근 방식과 도전 과제에 대한 심층 분석 및 통찰을 독자들에게 제공합니다. 블로그는 또한 기술의 새로운 트렌드, 리더십 및 팀 협업에 대한 지혜를 공유하여 테크 회사 개선을 위해 추천합니다.

노트 스레드

Airbnb는 사용자 요구와 기술적 복잡성을 해결하기 위해 유연한 인증(Flexible Authentication)을 도입하여 인증 시스템을 재구축했습니다. 사용자들이 불규칙한 간격으로 로그인한다는 점을 이해하고, 팀은 이를 예외적인 경우가 아닌 핵심적인 과제로 인식했습니다. 새로운 접근 방식인 "먼저 식별하고 그다음에 인증"은 사용자 식별과 인증 방법을 분리합니다. 이를 통해 서버는 사용자 컨텍스트와 지역적 요인에 따라 가장 적절한 인증 방식을 지능적으로 선택할 수 있습니다. 핵심적인 제품 통찰력은 모든 인증 화면에 탈출 경로를 제공해야 한다는 것이었으며, 이는 "다른 방법 시도(Try another way)" 옵션과 인증 방식 선택기(Challenge Picker)로 이어졌습니다. 인증 경험을 완전히 서버 주도 방식으로 전환함으로써, 긴 클라이언트 릴리스 주기를 우회하여 더 빠른 반복 작업과 실험이 가능해졌습니다. 이 서버 주도 모델은 클라이언트 측 코드와 번들 크기를 크게 줄여 성능을 향상시켰습니다. 궁극적으로 새로운 시스템은 인증 성공률을 높이고, 중복 계정을 줄이며, 운영 비용을 절감하는 결과를 가져왔습니다. 유연한 인증은 제품 통찰력과 엔지니어링 아키텍처가 서로 얽혀 있음을 강조하며 지속적인 개선을 위한 프레임워크를 나타냅니다. 핵심 교훈은 클라이언트에서 결정 경계를 이동시키는 것이 글로벌 규모 시스템에 필요한 반복 속도를 확보한다는 것입니다.
CdXz5zHNQW_Xet1TCXtVb.jpeg
Airbnb는 신뢰할 수 있는 생성형 AI 제품 구축을 위한 중요한 엔지니어링 규율로서 평가를 다루는 것을 강조합니다. LLM 출력의 비결정적이고 주관적인 특성으로 인해 기존 소프트웨어 테스트의 가정이 도전을 받으며, 종종 AI가 AI를 평가해야 합니다. Airbnb의 제품 팀은 도구와 모범 사례를 제공하는 인프라 팀의 지원을 받아 LLM 기반 기능을 구축합니다. 기본적인 원칙은 잘못된 자신감과 탐지되지 않은 회귀를 피하기 위해 처음부터 평가를 계획해야 한다는 것을 이해하는 것입니다. "한 가지 규칙"은 프로토타입 출력을 검토하여 데이터를 수동으로 검토하고 성공에 대한 직관을 구축하는 것입니다. 이 습관은 실패 모드가 발견되고, 인코딩되고, 지속적으로 테스트되는 평가 주도 개발로 발전합니다. 평가 주도 개발의 주요 원칙에는 목표 정의, 실제 오류가 지표를 안내하도록 하기, 작고 날카로운 평가자 세트 사용, 의사 결정권자 임명, 지속적인 협업이 포함됩니다. 세 가지 평가 방법은 계층을 형성합니다. 명백한 실패에 대한 프로그래밍 방식 검사, 미묘한 품질을 위한 LLM-as-a-Judge, 엣지 케이스 및 검증을 위한 인간 평가입니다. 프로그래밍 방식 검사는 결정론적 코드 기반 테스트를 사용하며, LLM-as-a-Judge는 루브릭에 대해 더 강력한 LLM을 사용하며 신뢰성을 위해 보정이 필요합니다. 인간 평가는 정답과 고위험 결정에 대한 금본위제 역할을 합니다. 에이전트 시스템의 경우, 최종 출력뿐만 아니라 추론 경로와 도구 호출을 검사하여 여러 계층에 걸쳐 평가가 확장됩니다. 실용적인 워크스루는 초기 실패 탐색, 프로그래밍 방식 검사 및 보정된 가상 평가자를 사용한 계층화된 평가 구축, 프로덕션 모니터링을 통한 확장 등을 보여줍니다. 주요 시사점은 데이터 검토의 중요성, 일반적인 지표 피하기, 작게 시작하기, 평가자 보정, 계층화된 방어 사용, 프로덕션에서 평가 미러링 등을 강조합니다. 궁극적으로 성공적인 AI 제품 개발은 평가가 제품 성공의 정의를 형성하는 협력적인 팀 스포츠라는 데 달려 있습니다.
CdXz5zHNQW_T3SelU9bHa.jpeg
Airbnb는 시간 경과에 따른 게스트 행동을 이해하여 숙소 추천을 개인화하기 위해 Transformer 기반 시퀀스 모델을 개발했습니다. 기존 방법은 수작업으로 만든 특징에 의존했는데, 이는 확장하기 어렵고 표현력을 제한했습니다. 새로운 모델은 엄청난 양의 숙소 조회수와 다른 이벤트에 비해 드문 예약과 같은 문제를 해결합니다. 게스트 기록을 드물지만 유익한 이벤트의 장기 시퀀스와 최근 숙소 조회수의 단기 시퀀스로 분할합니다. 학습 효율성을 높이기 위해 배치 검색, 버킷팅 및 희소 계산을 통한 패딩 최소화와 같은 전략을 구현했습니다. 서빙 설계는 낮은 지연 시간을 위해 계산 집약적인 시퀀스 인코더를 실시간 랭킹 모델과 분리합니다. 장기 시퀀스만 사용한 초기 테스트에서 개선이 나타났으며, 단기 조회 시퀀스를 추가하여 더욱 향상되었습니다. 시퀀스 인코더와 공동으로 학습된 세트별 랭커의 도입은 순위 품질을 더욱 향상시켰습니다. 온라인 A/B 테스트는 이러한 이득을 확인했으며, 예약 및 조회수의 상당한 증가를 보여주었습니다. 이 시스템의 효과는 프로모션 이메일 순위에서도 입증되었으며, 게스트 임베딩의 일반화 능력을 강조했습니다. 이 새로운 접근 방식은 Airbnb가 이전보다 게스트 선호도를 더 깊이 이해할 수 있도록 합니다. 향후 작업에는 실시간 업데이트, 더 풍부한 이벤트 유형, 생성 추천 시스템이 포함됩니다.
CdXz5zHNQW_c4zzcDn3wz.jpeg
프로덕션 언어 모델 시스템을 배포하려면 개선 사항에 대한 빠른 반복이 필요하며, 이는 모델과 평가 프로세스의 비결정적 특성으로 인해 어렵습니다. Airbnb는 엔지니어링 개선 및 통합에 중점을 두고 4개 계층에 걸쳐 안정적인 LLM 인프라를 구축하여 이러한 과제를 해결했습니다. 핵심 원칙은 구성 요소 간의 이음새에서 문제가 발생하며 포괄적인 엔드투엔드 테스트가 중요하다는 것입니다.계층 1은 평가 노이즈의 진단 프레이밍에 중점을 두고 데이터와 판단 불확실성을 구분하여 성능 변동을 이해합니다. LLM 평가의 노이즈는 심사위원이 입력에 다르게 점수를 매기거나 LLM 생성 참조가 변경되어 실제 모델 개선을 구별하기 어렵게 만드는 것에서 비롯될 수 있습니다. 인식 불확실성(모델/심사위원 한계)과 무작위 불확실성(작업 모호성)을 분리하는 것이 정확한 진단에 중요합니다.계층 2는 심사위원에게 입력을 안정화하여 결정론적 평가 기반을 구축합니다. 이는 참조 및 심사위원 점수에 대한 샘플별 캐시를 통해 달성되며, 동일한 입력이 캐시된 결과를 생성하도록 보장하고 평가를 재현 가능하고 효율적으로 만듭니다. 이러한 결정론적 측정은 계층 1의 진단 기능에 필수적입니다.계층 3은 마이크로 어댑터를 통해 제한적이고 범위가 지정된 모델 변이를 가능하게 합니다. 이는 특정 버그에 대해 훈련된 작은 LoRA 패치로, 빠른 1시간 훈련 및 핫픽스 스타일 배포를 허용합니다. 세 가지 수명 주기 규칙(공동 트리거 패치 융합, 누적 시 재훈련, 사용되지 않는 패치 언로드)은 어댑터 스택이 저하되는 것을 방지합니다.계층 4는 시스템의 이음새에서 엔드투엔드 유효성 검사를 제공합니다. 개별 구성 요소는 괜찮아 보일 수 있지만 상호 작용으로 인해 예기치 않은 동작이 발생할 수 있습니다. 이 계층은 전체 프로덕션 경로를 통해 대표적인 입력을 실행하여 결합된 품질과 지연 시간을 측정하고 배포 전에 이음새의 버그가 드러나도록 합니다. 이 네 계층은 각 계층의 효과가 다른 계층에 의존하는 종속 스택을 형성합니다.
CdXz5zHNQW_y2WUihSDGZ.png
Airbnb의 Homes, Experiences, Services로의 확장은 오프라인 데이터 웨어하우스를 위한 데이터 모델링 프레임워크의 개편을 필요로 했습니다. 핵심 과제는 데이터 사일로와 기술 부채를 피하기 위해 일관성과 유연성 사이의 균형을 맞추는 것이었습니다. 그들은 중앙 집중식 원칙과 분산형 모델링 지침을 결합한 균형 잡힌 접근 방식을 선택했습니다. 세 가지 기본 원칙은 일관성을 보장했습니다. 하이브리드 모델 없음, 일관된 식별자 명명, 명확한 네임스페이스 구성입니다. 모델링 지침은 팀이 공유 속성 대 고유 속성, 향후 진화 및 다운스트림 소비자 기반으로 별도 또는 단일 모델 중에서 선택할 수 있도록 했습니다. Listings, Availability, Location, Guest interactions와 같은 제품별 도메인은 고유한 속성으로 인해 별도 모델을 선택했습니다. 반대로 Messaging, Payments, Customer Support와 같은 교차 도메인 개념은 통합된 보기를 위해 단일 모델의 이점을 얻었습니다. 오프라인 데이터 웨어하우스는 분석을 위해 원시 프로덕션 데이터를 표준화하는 중요한 번역 계층 역할을 합니다. 레거시 테이블 마이그레이션을 포함한 데이터 부채 관리는 신중한 커뮤니케이션과 검증을 필요로 하는 중요한 작업이었습니다. 이 프레임워크는 Airbnb의 진화하는 데이터 요구 사항에 대한 확장 가능하고 일관된 기반을 제공했습니다.
CdXz5zHNQW_hwlCx2ZBf5.jpeg
Airbnb는 수천 개의 서비스 인스턴스에 동적 구성 변경 사항을 안정적으로 전달하기 위해 경량 Kubernetes 사이드카인 sitar agent를 개발했습니다. 구성 전달은 개발자가 Git 또는 UI를 통해 값을 생성하거나 업데이트하는 것으로 시작되며, 이 값은 Sitar Service에 저장됩니다. 주기적으로 구성의 전체 상태가 압축된 스냅샷으로 패키징되어 AWS S3에 업로드됩니다. 서비스 pod가 시작되면 sitar agent는 먼저 이 S3 스냅샷을 마운트된 디스크로 다운로드하여 빠른 부트스트랩을 가능하게 합니다. 그런 다음 스냅샷 생성 이후의 변경 사항에 대해 Sitar Service와 동기화하고 메인 애플리케이션 컨테이너에 준비 상태를 알립니다. 시작 후 에이전트는 몇 초마다 Sitar Service를 폴링하여 업데이트를 지속적으로 확인합니다. 메인 애플리케이션 컨테이너는 값을 캐싱하고 파일 변경을 감지하는 Sitar 클라이언트 라이브러리를 사용하여 마운트된 디스크에서 구성을 읽습니다. 주요 설계 결정은 사소한 비용 절감보다 안정성, 운영 안전성 및 다국어 지원을 우선시하여 sitar agent를 메인 컨테이너에 통합하는 대신 별도의 사이드카 컨테이너로 유지하는 것이었습니다. 이 시스템은 에이전트가 Sitar Service를 폴링하는 풀 모델을 사용하며, 로드 감소를 위해 서버 측 캐시 및 토큰 기반 데이터베이스 액세스로 최적화되었습니다. 로컬 온디스크 키-값 저장소에 대해 Airbnb는 SQLite의 우수한 동시성, 성능 및 다국어 지원으로 인해 레거시 Sparkey 기반 구현 대신 SQLite를 선택했습니다. SQLite의 내장 Write-Ahead Logging은 쓰기 중 동시 읽기를 허용하며, RocksDB의 높은 성능이지만 더 복잡한 모델보다 더 간단한 운영 모델이 선호되었습니다. 이 견고한 사이드카 설계는 Airbnb의 방대한 서비스 플릿 전반에 걸쳐 중요한 구성이 빠르고 안정적으로 전달되도록 보장합니다.
CdXz5zHNQW_7QO75wfm4Y.jpeg
COVID-19 팬데믹은 역사적 패턴을 교란하여 전통적인 모델을 신뢰할 수 없게 만들었기 때문에 예측에 어려움을 안겨주었습니다. 수요 회복은 백신 출시 및 국경 재개방 시기가 다양하여 비동기적이고 지리적으로 불균등했습니다. 각 회복 시장의 현지 데이터를 기다리는 것은 장기간 맹목적으로 예측하는 것을 의미했을 것입니다. Airbnb의 해결책은 시간상으로만 뒤돌아보는 대신 지리적으로 옆을 살펴보는 것이었습니다.그들은 회복이 순차적으로 전개되며 일부 통로가 다른 통로보다 먼저 변화를 경험한다는 것을 관찰했습니다. 주요 신호는 평균 예약 리드 타임이었는데, 이는 혼란 중에 압축되고 회복 중에 길어졌습니다. 유럽과 북미와 같은 지역 간의 이러한 리드 타임 변화 시점을 비교함으로써, 그들은 한 시장이 다른 시장의 경험을 바탕으로 재개방에 어떻게 반응할 가능성이 있는지 추론할 수 있었습니다. 이를 통해 초기 영향을 받은 통로의 사후 확률을 나중에 영향을 받은 통로에 대한 유익한 사전 확률로 사용할 수 있었습니다.이러한 사전 확률 전파 메커니즘은 현지 데이터가 부족한 시장에서도 실시간 학습 및 예측을 가능하게 했습니다. 이 접근 방식은 세분화된 데이터와 계층적 베이지안 모델링 프레임워크를 갖춘 글로벌 입지를 요구했습니다. 이 방법론은 새로운 제품 기능 출시 또는 규제 변경의 영향을 예측하는 것과 같이 위기 외에도 적용 가능합니다. 이를 통해 초기 채택 시장에서 즉시 학습하여 아직 변화를 경험하지 않은 시장에 대한 예측에 정보를 제공할 수 있습니다.
CdXz5zHNQW_7QiYuy1bLj.png
CdXz5zHNQW_2oSLFFmQhV.jpeg
CdXz5zHNQW_TNP3iklsC1.jpeg
핵심 문제는 관찰 가능성 시스템이 모니터링하는 인프라가 실패할 때 함께 실패할 수 있어 순환 종속성이 발생한다는 것입니다. Airbnb는 많은 조직과 마찬가지로 메트릭 파이프라인이 관찰하는 시스템과 동일한 시스템에 의존하는 문제를 겪었습니다. 특히 장애 발생 시 안정적인 모니터링을 보장하기 위해 이 종속성 체인을 끊어야 했습니다. 이를 해결하기 위해 Airbnb는 Cloud 팀이 관리하는 전용 Kubernetes 클러스터를 사용하여 컴퓨팅을 격리했습니다. 네트워킹을 재고하여 맞춤형 Envoy 기반 Layer 7 인그레스 레이어를 구축하여 텔레메트리를 위한 서비스 메쉬를 우회하고 우선순위 지정 및 격리를 보장했습니다. 메트릭은 고유하게 높은 볼륨을 가지므로 전용 네트워크 경로는 혼잡 및 잠재적 중단을 방지합니다. Airbnb는 또한 관찰 가능성 스택 자체를 모니터링하여 잠재적인 문제를 감지하는 메타 모니터링을 구현했습니다. 메타 모니터링의 중요한 부분은 모니터링 시스템의 실패를 감지하기 위한 "Dead Man's Switch" 메커니즘의 사용입니다. 이 전반적인 접근 방식은 관찰 가능성 설정의 침묵하는 실패로부터 보호하는 강력한 신호 체인을 만듭니다. 핵심은 모니터링을 프로덕션 시스템으로 취급하여 관찰하는 시스템보다 안정성이 뛰어나도록 보장하는 것입니다. 이는 신속한 사고 대응을 가능하게 하고 사용자 및 비즈니스 신뢰를 유지하는 데 중요합니다. 이러한 원칙은 보편적으로 적용되며 강력한 시스템 설계를 위해 실패 도메인을 격리하는 것을 포함합니다.
CdXz5zHNQW_IA1cJHBdof.jpeg
에어비앤비는 초당 5천만 개의 샘플과 2페타바이트의 시계열 데이터를 처리하기 위해 자체 내부 스토리지 시스템을 개발했습니다. 이러한 변화는 진화하는 제품과 인프라 전반에 걸친 광범위한 코드 계측으로 인해 생성되는 엄청난 양의 데이터 때문에 필요했습니다. 주요 엔지니어링 과제는 이 방대한 데이터 세트를 고성능으로 지속적으로 저장하고 제공하는 것이었습니다.이러한 규모를 관리하기 위해 에어비앤비는 안정적인 그룹화 및 속성을 위해 서비스 또는 프로세스별로 테넌트를 격리하는 다중 테넌트 아키텍처를 채택했습니다. 테넌트 워크로드를 격리하기 위해 셔플 샤딩을 구현하여 테넌트가 노드의 하위 집합에만 쓰고 쿼리되도록 함으로써 내결함성을 향상시켰습니다. 특히 테넌트 온보딩 및 구성 관리와 같은 운영 복잡성은 온보딩을 자동화하고 구성 업데이트를 단순화하는 통합 제어 평면으로 해결되었습니다.시스템의 주요 요구 사항은 초당 5천만 개 이상의 샘플을 처리하고, 수많은 대시보드 및 경고를 지원하며, 낮은 쿼리 실행 시간을 유지하는 것이었습니다. 섀도우 클러스터를 사용한 초기 검증에서는 안정성 문제, 압축 지연, 특히 대규모 데이터 페이로드에서 느린 쿼리 성능이 드러났습니다. 이러한 문제를 해결하기 위한 첫 단계는 단일 클러스터의 안정성을 보장하는 것이었으며, 벤치마킹, 가드레일, 쿼리 경로 격리를 통해 쓰기, 읽기 및 압축을 안정화하는 데 중점을 두었습니다.이 시스템은 3개 영역에 배포된 영역 인식 상태 저장 구성 요소로 내결함성을 갖추었습니다. 효과적인 플릿 관리 및 시스템 보호를 위해 복제본당 제한 및 테넌트 수준 제어가 구현되었습니다. 이후 장애의 폭발 반경을 줄이고 유연성을 향상시키기 위해 다중 클러스터 아키텍처가 채택되었습니다.그러나 이 다중 클러스터 접근 방식은 메트릭 검색, 쿼리 및 운영 오버헤드에서 복잡성을 야기했습니다. 이는 테넌트-클러스터 매핑을 위한 도구와 Kubernetes 연산자를 사용한 자동화된 배포 전략으로 완화되었습니다. 사용자 정의 개선 사항이 적용된 Promxy의 도입은 클러스터 간 쿼리 및 경고를 용이하게 했습니다.이 여정에서 얻은 주요 교훈은 클러스터 간 쿼리의 상당한 비용과 자동화 및 표준화된 배포를 통해 달성되는 배포 일관성의 중요성입니다. 철학은 중요한 고유한 "애완동물"이 아닌 "가축"과 유사하게 클러스터를 일회용 리소스로 취급하는 방향으로 발전하여 더 쉬운 확장 및 유지 관리가 가능해졌습니다. 궁극적으로 이 플랫폼을 구축하려면 아키텍처 혁신, 운영 엄격성, 기대치 관리의 문화적 변화가 조화를 이루어야 했습니다.
CdXz5zHNQW_oUKNz5mUz5.jpeg
Airbnb는 Experiences를 통해 커뮤니티 연결을 강조하며 더욱 소셜한 플랫폼으로 진화하고 있습니다. 플랫폼은 내부 사용자 데이터와 공개 프로필을 구분하여 사용자 개인 정보 보호를 우선시합니다. 사용자는 자신의 프로필 공개 범위를 제어하여 Experiences에서 어떤 정보를 공유할지 선택할 수 있습니다. 이를 위해 Airbnb는 고유한 사용자 ID와 프로필 ID를 사용하여 다양한 맥락에서 유연한 개인 정보 설정을 가능하게 합니다. 이를 통해 사용자는 호스트 및 게스트 프로필과 같이 필요에 따라 분리된 여러 프로필을 가질 수 있습니다. Airbnb는 Himeji라는 권한 시스템을 사용하여 최소 권한 액세스와 강력한 데이터 보안을 보장합니다. 구현 과정에는 자동 감사, 팀 협업, AI 지원 리팩토링이 포함되어 올바른 식별자 사용을 보장했습니다. 타입 안전성과 엄격한 테스트는 마이그레이션 중 데이터 무결성을 유지하는 데 중요했습니다. 궁극적으로 Airbnb의 개인 정보 보호 원칙은 소셜 기능과 개인 정보에 대한 사용자 제어 간의 균형을 맞추는 것을 목표로 합니다. 이 접근 방식은 Airbnb 커뮤니티 내에서 연결과 개인 정보 보호를 모두 촉진하도록 설계되었습니다. 이 시스템은 사용자가 다른 사람들과 자신 있게 연결하고 공유할 수 있도록 하기 위해 마련되었습니다.
CdXz5zHNQW_og2U0LeKfU.png
CdXz5zHNQW_RLxATemjkf.jpeg
CdXz5zHNQW_IrlwC4WsW0.png
CdXz5zHNQW_gEWW6pSp6G.jpeg
CdXz5zHNQW_LyZMbgTKXx.jpeg
에어비앤비 팀은 여행 계획 초기 단계에서 사용자를 돕기 위해 목적지 추천 모델을 개발했습니다. 이 모델은 아직 목적지나 여행 날짜를 결정하지 못한 사용자의 어려움을 해결합니다. 이 모델은 검색 및 예약과 같은 에어비앤비 플랫폼에서의 사용자 활동을 분석하여 사용자의 목적지 의도를 예측합니다. 주요 혁신은 다양한 신호를 통합하고, 활성 및 비활성 사용자 행동의 균형을 맞추며, 위치 정보를 통합하는 것입니다. 이 모델은 변환기 아키텍처를 사용하여 사용자 활동을 토큰으로 처리하여 사용자 선호도를 이해합니다. 훈련 데이터는 예약에 가까운 활성 사용자와 초기 계획 단계의 비활성 사용자를 모두 수용하도록 특별히 설계되었습니다. 다중 작업 학습은 지역 수준 및 도시 수준의 목적지를 모두 예측하여 위치 이해도를 향상시키는 데 사용됩니다. 이 모델은 자동 제안 및 중단된 검색 이메일 알림을 제공하여 사용자가 잠재적인 목적지를 발견하도록 돕습니다. 자동 제안에서는 도시 추천을 제공하여 특히 비영어권 지역에서 예약 증가를 이끌어냅니다. 중단된 검색 이메일은 추천 지역의 숙소를 특징으로 하여 예약 완료를 장려합니다. 탐색 단계에 초점을 맞춰 이 모델은 영감을 주고, 결정 마찰을 줄이며, 사용자 참여를 향상시키는 것을 목표로 합니다. 이 프레임워크는 여행 시간 및 가격 선호도를 포함하여 전체 여행 계획 경험 전반에 걸쳐 개인화를 위한 기반을 제공합니다.
CdXz5zHNQW_p9tvPsoHId.jpeg
에어비앤비의 "코드형 관측성(OaC)"은 소프트웨어 개발 방식을 따라 코드 형태로 알림, 대시보드, SLO(서비스 수준 목표)를 정의합니다. 이 프로세스는 엄격한 알림 정의를 보장하지만, 실제 운영 환경에서 알림 동작을 검증하는 것은 큰 과제였습니다. 이 격차로 인해 과도한 알림 발생 또는 사고 누락이 발생하여 개발자 워크플로우를 방해했습니다. 이를 해결하기 위해 에어비앤비는 코드 제출 전에 알림 동작을 미리 보고 검증할 수 있는 접근 가능한 피드백 루프를 구축했습니다. 이 혁신은 개발 주기를 몇 주에서 몇 분으로 획기적으로 단축시켰습니다. 에어비앤비의 OaC 목표는 제품 팀이 플랫폼 팀으로부터 즉시 사용 가능한 모니터링을 받아 "제로 터치" 방식으로 도입하는 것입니다. 그러나 30만 개의 알림을 관리하는 것은 OaC 변경 사항을 반복하고 검증하는 데 비용과 위험을 초래했습니다. 기존의 코드 리뷰와 단위 테스트는 실제 데이터로 알림이 어떻게 동작할지 예측할 수 없었으며, 이로 인해 몇 주가 걸리는 검증 프로세스가 필요했습니다. 에어비앤비는 로컬 우선 개발, 변경 보고서, 과거 데이터에 대한 대량 백테스팅에 초점을 맞춰 OaC 플랫폼을 재구축했습니다. 이를 통해 엔지니어는 알림 템플릿을 빠르고 효율적으로 검증할 수 있었습니다. 주요 교훈으로는 참신함보다 호환성을 우선시하고, 강력한 안전 장치를 구현하며, 향상된 개발자 경험을 위해 전체 개발 표면 영역을 소유하는 것이 있었습니다. 그 결과 30만 개의 알림을 Prometheus로 성공적으로 마이그레이션하고, 개발 주기를 단축했으며, 알림 노이즈를 크게 줄여 알림 위생 문화를 조성하는 성과를 거두었습니다.
CdXz5zHNQW_p1JPMKjgtj.jpeg
에어비앤비의 Sitar 플랫폼은 서비스 재시작을 피하고 신속한 대응을 가능하게 하기 위해 동적 구성 변경을 관리합니다. 이 플랫폼은 네 가지 핵심 요소로 구축되었습니다: 개발자용 레이어, 제어 평면, 데이터 평면, 그리고 클라이언트 구성 요소입니다. 개발자 레이어는 Git 기반 워크플로우를 사용하여 버전 관리 및 협업을 통해 구성을 생성하고 검토하는 것을 용이하게 합니다. 제어 평면은 변경 롤아웃을 조율하며, 스키마 유효성 검사, 권한 부여, 그리고 단계적 릴리스를 보장합니다. 데이터 평면은 서비스 에이전트에 대한 구성 업데이트의 확장 가능한 저장 및 안정적인 배포를 제공합니다. 각 서비스의 에이전트는 구성을 가져와 로컬에 캐싱하여 빠른 접근과 복원력을 확보합니다. 주요 설계 선택 사항으로는 Git 기반 워크플로우, 단계적 롤아웃, 그리고 제어 평면과 데이터 평면의 분리가 있습니다. 이 아키텍처는 더 안전하고 예측 가능한 롤아웃을 가능하게 하여 팀이 구성을 관리하는 데 더 많은 유연성을 제공합니다. 사고 완화는 더 빠르며, 문제 위치를 파악하고 해결하기 위한 통합 관찰 도구가 있습니다. 이 플랫폼은 개발자 경험을 간소화하고 안전성, 관찰 가능성, 그리고 사용성을 지속적으로 개선합니다. 에어비앤비는 Sitar를 지속적으로 개선하고 있으며, 롤아웃 전략, 테스트, 그리고 사고 대응에 중점을 두고 있습니다. 이 작업은 강력하고 적응 가능하며 개발자 친화적인 인프라를 유지하는 데 매우 중요합니다.
CdXz5zHNQW_A3Qsjaew7k.png
CdXz5zHNQW_IkUUz4P0hR.jpeg
피터 콜스(Peter Coles)는 에어비앤비의 정책 담당 최고 경제학자이자 데이터 과학 책임자로서, 밀워키의 공립학교 교육을 거쳐 스탠퍼드 대학교에서 경제학 박사 학위를 취득했습니다. 어린 시절부터 시장에 대한 그의 깊은 관심은 어린 시절 바위 판매 사업으로 시작되었습니다. 학업 경쟁에 열정적으로 참여했던 그는 프린스턴 대학교에서 수학을 전공한 후 경제학을 공부했습니다. 스탠퍼드 대학교에서의 대학원 과정은 노벨상 수상자인 존 레빈(Jon Levin)의 영향을 받아 연구에서 단순화를 강조했습니다. 에어비앤비에 합류하기 전, 콜스는 하버드 경영대학원에서 시장 설계 선구자인 알 로스(Al Roth)와 함께 강의했습니다. 그곳에서 그는 매칭 메커니즘을 연구하고 질로우(Zillow) 및 크레이그리스트(Craigslist)와 같은 회사에 대한 사례 연구를 작성했습니다. 기술 산업으로 전환한 그는 이베이(eBay)에 합류하여 시장 설계 및 데이터 과학 이니셔티브에 집중했습니다. 에어비앤비에서는 단기 임대 및 도시에 미치는 영향을 분석하기 위해 경제학 팀을 설립했습니다. 또한 조직의 광범위한 질문에 답하고 포렌식 스타일의 조사를 수행하기 위해 중앙 전략 및 통찰(CSI)을 공동 설립했습니다. 현재 그는 정책 고려 사항을 모델링하고 에어비앤비의 사회적 영향을 평가하며 학술 연구원들과의 협력을 촉진하는 노력을 주도하고 있습니다.
CdXz5zHNQW_AKkOKvPMHS.jpeg
에어비앤비, 14개월 만에 20개 이상의 현지 결제 수단 도입으로 접근성 향상 및 결제 과정 간소화에어비앤비는 지난 14개월 동안 전 세계적으로 20개 이상의 현지 맞춤형 결제 수단을 성공적으로 출시하여 게스트의 접근성을 높이고 결제 과정을 간소화했습니다. 이러한 현지 결제 수단(LPM)에는 디지털 지갑, 은행 송금, 현지 결제 시스템 등이 포함되며, 기존의 카드 결제를 넘어선 다양한 옵션을 제공합니다. LPM 제공은 전환율을 높이고, 신용카드 사용률이 낮은 신규 시장을 개척하며, 은행 계좌가 없는 사람들에게도 결제 기회를 제공합니다. 에어비앤비는 광범위한 조사를 통해 300개 이상의 결제 옵션을 파악하고, 구조화된 프레임워크를 사용하여 통합할 최적의 결제 수단을 선정했습니다.에어비앤비의 현대화된 결제 플랫폼은 도메인 주도 아키텍처를 기반으로 구축되어 유연성과 확장성을 위해 결제 로직을 분리했습니다. 'Payments LTA'로 알려진 이 플랫폼 재구축 노력은 모놀리식 시스템에서 서비스 지향 시스템으로 전환하여 시장 출시 시간을 단축했습니다. 서드파티 제공업체 통합에 중요한 역할을 하는 처리 하위 도메인은 커넥터 및 플러그인 기반 아키텍처를 채택했습니다. 이러한 전략과 다단계 거래(MST) 도입은 새로운 PSP의 통합 시간을 크게 단축하고 복잡한 결제 흐름을 표준화했습니다.LPM 통합은 다양한 API와 외부 앱과의 상호 작용 필요성으로 인해 어려움이 있었습니다. 에어비앤비는 엔드투엔드 행동을 분석하고 이를 리디렉션, 비동기, 직접의 세 가지 기본 흐름으로 표준화했습니다. 이 통합 프레임워크는 상당한 코드 재사용성을 가능하게 하고 새로운 결제 수단 통합에 대한 엔지니어링 노력을 줄였습니다. 비동기 결제 오케스트레이션은 외부 사용자 행동 및 성공적인 결제에 대한 웹훅 알림을 관리하도록 재설계되었습니다.중앙 YAML 구성을 활용하는 구성 기반 접근 방식은 로직을 통합하고 자동화된 코드 생성을 가능하게 하여 결제 수단 통합을 간소화했습니다. 이를 통해 통합이 대부분 선언적으로 이루어져 출시 시간을 몇 달에서 몇 주로 단축했습니다. 결제 위젯은 백엔드 구성에 따라 UI 및 유효성 검사 규칙을 동적으로 렌더링하여 맞춤형 결제 경험을 보장합니다. 자체 PSP 에뮬레이터를 통한 향상된 테스트 용이성은 개발자가 불안정한 외부 샌드박스에 의존하지 않고도 결제 시나리오를 철저히 테스트할 수 있도록 했습니다.
CdXz5zHNQW_E1JU738XpJ.jpeg
에어비앤비의 키-값 저장소인 Mussel은 원래 단일 클라이언트가 시스템을 압도하는 것을 방지하기 위해 간단한 QPS 속도 제한을 사용했습니다. 트래픽이 증가하고 더 복잡해짐에 따라, 이 방식은 비용 변동과 트래픽 왜곡으로 인해 불충분한 것으로 드러났습니다. 이를 해결하기 위해 Mussel은 다층 품질 보증 (QoS) 시스템을 구현하도록 발전했습니다. 첫 번째 계층인 자원 인식 속도 제어 (RARC)는 실제 백엔드 비용을 반영하여 행, 바이트, 지연 시간을 고려한 요청 단위 (RU)로 요청을 청구합니다. 이 시스템은 각 호출자에 대해 정적 RU 할당량을 가진 토큰 버킷을 사용합니다.두 번째 계층인 부하 분산은 용량이 부족하거나 핫스팟이 발생할 때 실시간 보호 기능을 제공합니다. 이는 트래픽 중요도, 시스템 스트레스를 나타내는 지연 시간 비율, 그리고 CoDel에서 영감을 얻은 큐잉 정책을 결합합니다. 이를 통해 높은 우선순위 트래픽은 응답성을 유지하고, 지연 시간이 증가할 때 다른 트래픽을 점진적으로 줄일 수 있습니다. 세 번째 계층인 핫키 감지 및 DDoS 방어는 특정 데이터를 대상으로 하는 동일한 요청의 급증을 식별하고 완화합니다. 이는 실시간 감지를 위해 메모리 내 top-k 카운터를 사용하고, 디스패처 포드에서 로컬 캐싱을 사용하며, 중복된 핫키 조회를 위해 스토리지 계층에 하나의 요청만 보내도록 요청 병합을 사용합니다.이러한 계층화된 제어는 Mussel이 트래픽 급증을 처리하고 안정성을 유지하는 능력을 크게 향상시켰습니다. 주요 내용은 개념 검증을 위한 초기 영향의 가치, 확장성을 위한 로컬 제어 루프 선호, 그리고 서로 다른 시간 척도로 작동하는 메커니즘 사용을 포함합니다. 이 정교한 QoS 스택은 Mussel이 극심하고 변동적인 트래픽 조건에서도 빠르고 안정적으로 유지되도록 보장합니다.
CdXz5zHNQW_D4i1N1yN56.jpeg
Airbnb는 진화하는 실시간 데이터 요구 사항을 충족하기 위해 핵심 키-값 저장소인 Mussel을 V1에서 V2로 재설계했습니다. Mussel V2는 클라우드 네이티브 NewSQL 백엔드를 사용하여 V1의 운영 복잡성, 용량 제한 및 일관성 문제를 해결합니다. 주요 개선 사항으로는 자동화된 Kubernetes 배포, 더 나은 용량 관리를 위한 동적 범위 샤딩, 유연한 일관성 옵션 등이 있습니다. 새로운 아키텍처는 API 호출을 변환하는 상태 비저장 Dispatcher 서비스와 내구성을 위한 Kafka를 사용하는 이벤트 기반 쓰기 경로를 특징으로 합니다. 대량 로딩 기능은 상태 비저장 컨트롤러와 고처리량을 위한 상태 저장 워커 플릿으로 강화되어 유지됩니다. 자동화된 Time-To-Live(TTL) 만료는 이제 토폴로지 인식 기능을 갖추고 대규모에서 더 효율적입니다. V1에서 V2로의 마이그레이션은 다운타임 및 데이터 손실 없이 제로 다운타임 및 데이터 손실을 보장하기 위해 이중 쓰기 및 섀도우 읽기를 사용하는 복잡한 블루/그린 전략을 사용했습니다. 얻은 중요한 교훈은 일관성 복잡성을 관리하는 것과 범위 기반 파티셔닝을 위한 사전 분할의 중요성입니다. Kafka는 마이그레이션 과정에서 최종 일관성을 유지하는 데 중요한 역할을 했습니다. Mussel V2는 대량 수집, 고속 쓰기 및 저지연 읽기를 단일 플랫폼에서 성공적으로 통합하여 엔지니어링 팀을 위한 데이터 인프라를 단순화합니다.
CdXz5zHNQW_xJf1iLzWz1.jpeg
Viaduct, Airbnb의 데이터 중심 서비스 메시, 오픈소스로 공개Airbnb의 데이터 중심 서비스 메시인 Viaduct가 이제 오픈소스로 공개되었습니다. 지난 5년 동안 Airbnb에서 Viaduct의 사용량은 크게 증가하여 트래픽은 8배, 팀 수는 두 배로 늘었습니다. Viaduct는 세 가지 핵심 원칙, 즉 중앙 스키마, 호스팅된 비즈니스 로직, 그리고 재진입성을 기반으로 계속 발전해 왔습니다. 중앙 스키마는 회사 전체의 데이터를 통합하여 Viaduct를 핵심 데이터 메시로 만들었습니다. 서버리스 플랫폼을 통해 Viaduct 내에서 직접 비즈니스 로직을 호스팅함으로써 개발자의 운영을 간소화했습니다. 재진입성은 호스팅된 로직이 GraphQL 프래그먼트 및 쿼리를 통해 다른 로직과 결합될 수 있도록 하여 모듈성을 유지합니다.최근의 대대적인 개편인 "Viaduct Modern"은 개발자가 사용하는 Tenant API를 node 및 field resolver의 두 가지 resolver 유형으로 단순화하여 과거의 복잡성을 해결했습니다. 이 현대화는 또한 tenant 모듈성을 도입하여 "tenant 모듈"을 단일 팀이 소유하고 GraphQL을 통해 구성되는 스키마 및 코드의 단위로 공식화했습니다. 프레임워크 모듈성 또한 개선되어 GraphQL 실행 엔진, tenant API, 그리고 호스팅된 코드 간의 추상화 경계가 더욱 강화되었습니다. 새로운 엔진 API는 동적으로 형식이 지정되는 반면, tenant API는 정적으로 형식이 지정되어 독립적인 진화를 가능하게 합니다.Viaduct는 Classic 및 Modern Tenant API를 새로운 엔진에서 동시에 실행하여 점진적인 마이그레이션을 제공합니다. 다른 개선 사항으로는 향상된 관찰 가능성, 스키마 우선 개발 및 직접 바이트코드 생성을 통한 더 빠른 빌드 시간, 그리고 Kubernetes 스케일링 및 블래스트 반경 완화를 위한 디스패처가 있습니다. Airbnb는 커뮤니티 기여를 통해 이점을 얻기 위해 Viaduct를 오픈소스로 공개하며, 대규모 및 초기 GraphQL 프로젝트 모두에 가치가 있을 것이라고 믿습니다. Modern API는 현재 알파 단계에 있지만, 새로운 엔진은 전체 프로덕션 환경에서 사용되고 있습니다.
CdXz5zHNQW_Ry0cTKX3TG.jpeg
에어비앤비는 마이크로서비스 기반 아키텍처의 모듈성을 개선하기 위해 데이터 중심 서비스 메시인 Viaduct를 개발했습니다. 기존 서비스 메시는 절차 중심인 반면, Viaduct는 GraphQL 스키마를 핵심 구성 원리로 사용하여 데이터에 집중합니다. 이 스키마는 타입, 쿼리, 뮤테이션을 정의하여 서비스 종속성을 소비자로부터 추상화합니다. Viaduct를 통해 데이터 소비자는 직접적인 종속성 없이 여러 마이크로서비스의 정보에 접근할 수 있어 아키텍처를 단순화합니다. 중앙 스키마는 API 및 데이터베이스 스키마 변경을 더 쉽게 만들어 데이터 민첩성을 향상시키고 조정 노력을 줄입니다. Viaduct는 파생 데이터를 위해 서버리스 함수를 통합하여 마이크로서비스의 수와 복잡성을 최소화합니다. graphql-java로 구축된 이 시스템은 세분화된 필드 선택, 데이터 관찰 가능성, 요청 내 캐싱과 같은 기능을 제공합니다. GraphQL 생태계의 도구를 활용하며 에어비앤비 API 트래픽의 상당 부분을 지원합니다. Viaduct는 대규모 서비스 지향 아키텍처에서 흔히 나타나는 스파게티와 같은 종속성 그래프와 관련된 문제를 해결합니다. 데이터 중심 접근 방식으로의 전환은 데이터 접근을 간소화하고 전반적인 시스템 유지 관리성을 개선하는 것을 목표로 합니다. 아키텍처는 깨끗한 스키마로 시작하여 수많은 핵심 엔티티를 포함하도록 성장했습니다. 이미 프로덕션 환경에 배포된 이 솔루션은 에어비앤비의 SOA 진화에 대한 의지를 보여줍니다.
CdXz5zHNQW_YzRZpul0zT.jpeg
CdXz5zHNQW_RVap6w2FjE.jpeg
Airbnb는 성공적으로 Istio 서비스 메시를 14회 업그레이드했으며, 수십 개의 Kubernetes 클러스터와 수천 대의 VM에 걸쳐 수만 개의 파드를 관리했습니다. 그들의 업그레이드 프로세스는 제로 다운타임과 점진적인 롤아웃을 우선시하며, 사용자 개입 없이 독립적인 업그레이드를 가능하게 합니다. 아키텍처는 Istiod를 위한 관리 클러스터와 여러 워크로드 클러스터를 포함합니다. 업그레이드는 현재 및 새 Istio 버전을 동시에 실행하는 카나리 모델을 따릅니다.이는 컨트롤 플레인(Istiod) 및 데이터 플레인(istio-proxy) 업데이트를 조정하여 달성됩니다. 중요한 점은 이전 istio-proxy 버전은 최신 Istiod와 함께 사용되지 않으며, 원자적으로 업데이트된다는 것입니다. 중앙 관리 파일인 rollouts.yml은 네임스페이스에 걸쳐 원하는 Istio 버전 배포를 지시합니다. Kubernetes의 경우, Krispr라는 자체 도구가 CI 및 파드 승인 중에 배포에 Istio 개정 레이블을 삽입합니다.이 메커니즘은 자주 배포되지 않는 워크로드도 업그레이드를 보장합니다. 가상 머신(VM)의 경우, 업그레이드는 VM 태그에 따라 아티팩트를 설치하는 온-호스트 데몬인 mxagent에 의해 관리됩니다. 중앙 컨트롤러인 mxrc는 rollouts.yml에 맞게 이러한 태그를 업데이트합니다. Mxrc는 또한 VM 상태를 모니터링하여 통제된 업그레이드 프로세스를 보장합니다. 이 접근 방식은 인프라 업그레이드와 애플리케이션 배포를 효과적으로 분리합니다. Airbnb의 지속적인 유지보수 및 안전 투자는 이러한 복잡하고 대규모 Istio 업그레이드를 가능하게 했습니다.
CdXz5zHNQW_deZowKwyHD.jpeg
전통적으로 조직들은 데이터베이스 확장을 위해 샤딩을 사용하며 비용이 많이 드는 독립형 서버를 사용했지만, 이 접근 방식은 데이터 수요가 증가함에 따라 유지보수에 문제가 있음을 입증했습니다. 높은 가용성, 낮은 지연 시간, 확장성을 합리적인 비용으로 갖춘 클라우드에서 수평적으로 확장 가능한 오픈 소스 데이터베이스를 안정적으로 실행하는 것은 상당한 과제입니다. 에어비앤비는 안정성과 운영성을 향상시키기 위해 여러 쿠버네티스 클러스터에 분산 데이터베이스 클러스터를 배포하는 혁신적인 전략을 채택했습니다. 쿠버네티스에서 데이터베이스와 같은 상태 저장 서비스를 관리하는 것은 어렵습니다. 특히 노드 교체 및 업그레이드와 관련하여 쿠버네티스는 데이터 분산 인식 기능이 부족합니다. 이를 완화하기 위해 에어비앤비는 AWS EBS를 사용하여 스토리지 볼륨을 노드에 연결했으며, 쿠버네티스 영구 볼륨 클레임을 통해 새 가상 머신에 자동으로 다시 연결할 수 있도록 했습니다. 사용자 정의 쿠버네티스 연산자를 개발하여 노드 교체 이벤트를 관리하고, 이를 데이터베이스 시작, 사전 예방적 인프라, 계획되지 않은 오류로 분류했습니다. 데이터베이스 시작 및 사전 예방적 이벤트의 경우, 연산자는 교체 전에 모든 노드가 실행 중인지 확인하고 안전한 삭제를 조정하기 위해 파드 퇴거를 가로챕니다. 계획되지 않은 오류는 조정할 수 없지만, 실패한 하드웨어가 수정될 때까지 교체를 차단하여 지속적인 유지보수가 보호됩니다. 높은 지역적 가용성을 보장하기 위해 에어비앤비는 각 데이터베이스를 서로 다른 AWS 가용 영역에 있는 세 개의 독립적인 쿠버네티스 클러스터에 배포하여 문제의 파급 효과를 제한합니다. 데이터베이스 클러스터의 과잉 프로비저닝은 전체 AZ, 쿠버네티스 클러스터 또는 한 구역의 모든 스토리지 노드가 다운되더라도 충분한 용량을 보장합니다. AWS EBS는 노드 교체를 위한 빠른 다시 연결과 우수한 내구성을 제공하여 세 개의 복제본만으로도 높은 가용성 클러스터를 지원합니다. EBS의 지연 시간 급증은 스토리지 읽기 시간 초과를 구현하고 복제본에서 읽기를 허용하여 지연 시간을 줄이고 AZ 간 비용을 방지하며, 오래된 읽기 기능을 통해 읽기 성능을 더욱 최적화합니다. AWS EBS 및 사용자 정의 연산자를 활용하는 이 다중 클러스터 쿠버네티스 전략을 통해 오픈 소스 분산 스토리지 시스템은 클라우드 환경에서 높은 가용성, 낮은 지연 시간 및 확장성을 달성하여 강력한 데이터 관리를 가능하게 합니다.
CdXz5zHNQW_5ISBolXzut.jpeg
에어비앤비는 2022년에 SwiftUI를 도입하여 엔지니어 생산성을 향상시켰지만 새로운 성능 문제를 야기했습니다. 이러한 문제를 해결하기 위해 에어비앤비는 성능에 중요한 코드 패턴을 식별하고 검증하는 새로운 툴링을 개발했습니다. 에어비앤비의 기능 아키텍처는 선언적 UI 패턴과 단방향 데이터 흐름 시스템을 사용하므로 SwiftUI 도입이 간소화되었습니다. 그러나 이러한 아키텍처를 사용하는 SwiftUI 기능은 예상만큼 성능이 좋지 않았으며, 고성능 기능을 구축하려면 SwiftUI의 성능 특성을 이해하는 것이 중요합니다. SwiftUI의 뷰 차이 알고리즘은 뷰 본문을 다시 평가해야 하는 시점을 결정하는 데 사용되지만 종종 간과되고 공식적으로 문서화되지 않습니다. 이 알고리즘은 뷰에 저장된 각 속성을 비교하지만, 일반적인 코드 패턴은 이를 혼동시켜 불필요한 뷰 본문 평가로 이어질 수 있습니다. 이를 해결하기 위해 에어비앤비는 뷰에 대한 Equatable 적합성을 생성하는 새로운 @Equatable 매크로를 개발하여 엔지니어가 차이를 비교할 때 어떤 속성을 비교할지 선택적으로 결정할 수 있도록 했습니다. 이 접근 방식을 통해 뷰가 차이를 비교할 수 있도록 보장하고 나중에 회귀가 발생하는 것을 방지할 수 있습니다. 또한 에어비앤비는 뷰 본문이 너무 복잡하고 더 작고 차이 비교가 가능한 조각으로 리팩터링해야 할 때를 엔지니어가 식별하는 데 도움이 되는 맞춤형 SwiftLint 규칙을 구현했습니다. 뷰를 더 작은 조각으로 나누면 SwiftUI는 실제로 변경된 뷰 부분만 효율적으로 업데이트하여 기능이 복잡해짐에 따라 성능을 유지할 수 있습니다.
CdXz5zHNQW_IYTQREK32w.jpeg
에어비앤비의 시스템-레벨 로드 테스트는 신뢰성 및 효율성을 위해 필수적입니다. 병목 현상, 용량 평가, 성능 기준 설정 및 오류 감지를 위해 로드 테스트는 내부 로드 테스트-서비스 프레임워크입니다. Impulse는 4개의 주요 구성 요소를 포함합니다. 로드 생성기, 트래픽 수집기, 의존성 모커), 테스트 API 생성기입니다. 로드 생성기는 서비스 소유자가 문맥 인식 로드 테스트를 수행할 수 있도록 요청을 생성하고 의존성을 모방합니다. 트래픽 수집기는 업스트림 및 다운스트림 트래픽을 캡처하여 Impulse가 생산 트래픽을 정확하게 재생할 수 있습니다. 의존성 모커는 다운스트림 응답에 레이턴시를 추가하여 서비스 간의 간섭을 제거하고 통신 비용을 줄입니다. 테스트 API 생성기는 CI 단계에서 HTTP API를 생성하여 로드 테스트 도구가 이러한 API에 트래픽을 보낼 수 있도록 허용하여 비동기 흐름을 동기 흐름처럼 연습할 수 있습니다. Impulse는 수동적인 노력을 최소화하고 에어비앤비의 관찰 스택과 원활하게 통합하여 팀이 잠재적인 문제를 적극적으로 해결할 수 있도록 설계되었습니다. 프레임워크는 팀이 서비스의 잠재적인 문제를 확인하고 해결하는 데 도움이 되었습니다. Impulse는 현재 고객 지원 백엔드 서비스에 구현 중이고 회사 전체의 팀에서 검토 중입니다.
CdXz5zHNQW_MMZuwGyO3E.jpeg
CdXz5zHNQW_bq2A63Ci4v.jpeg
에어비앤비의 검색 기능은 게스트가 완벽한 숙소를 찾는 데 매우 중요한 역할을 하지만, 방대한 숙소 목록과 복잡한 검색어 때문에 어려운 과제입니다. 이를 해결하기 위해 에어비앤비는 임베딩 기반 검색(EBR) 시스템을 구축하여 초기 후보 숙소를 더 작은 범위로 좁혔습니다. EBR 시스템은 훈련 데이터 구성, 모델 아키텍처 설계, 온라인 서비스 전략 개발이라는 세 가지 주요 구성 요소로 이루어져 있습니다. 훈련 데이터 파이프라인은 대조 학습을 활용하여 숙소와 검색어를 숫자 벡터로 매핑합니다. 모델 아키텍처는 기존의 투 타워 네트워크 설계를 따르며, 하나의 타워는 숙소 목록에 대한 특징을 처리하고 다른 타워는 검색어와 관련된 특징을 처리합니다. 숙소 타워는 매일 오프라인으로 계산되어 온라인 지연 시간을 줄입니다. 온라인 서비스를 위해 에어비앤비는 근사 최근접 이웃(ANN) 솔루션을 탐색했고 속도와 성능 간의 균형이 더 나은 역색인 파일(IVF)을 선택했습니다. IVF 솔루션은 미리 숙소를 클러스터링하고 클러스터 할당을 표준 검색 필터로 처리하여 상위 클러스터에서 숙소를 검색합니다. A/B 테스트 결과 EBR 시스템은 전체 예약 건수에 통계적으로 유의미한 증가를 가져왔으며, 검색 시 쿼리 컨텍스트를 효과적으로 통합하고 숙소 순위를 더 정확하게 매기는 데 기여했습니다. 이 시스템은 검색 및 이메일 마케팅 운영에 완전히 출시되었습니다.
CdXz5zHNQW_ZoLewXZBkI.jpeg
에어비앤비는 LLM(대규모 언어 모델)을 활용한 접근 방식을 사용하여 약 3,500개의 리액트 컴포넌트 테스트 파일을 Enzyme에서 React Testing Library(RTL)로 마이그레이션했습니다. 초기에는 이 작업이 1.5년이 걸릴 것으로 예상했지만, 실제로는 6주 만에 완료했습니다. 마이그레이션에는 테스트 파일을 리팩토링하는 작업이 포함되었으며, 원래 테스트의 의도와 코드 커버리지를 유지했습니다. 또한, 유효성 검사, 리팩토링 단계 및 재시도 루프를 포함한 자동화된 파이프라인을 구축했습니다. LLM은 컴포넌트 코드와 관련된 테스트를 포함한 추가적인 컨텍스트를 제공받아 성공률을 개선했습니다. "샘플, 튜닝 및 스윕" 접근 방식을 사용하여 프롬프트와 스크립트를 개선하여 완료율을 75%에서 97%로 향상시켰습니다. 자동화는 마이그레이션의 대부분을 효율적으로 처리했으며, 작은 부분만 수동으로 수정했습니다. 이 프로젝트는 테스트 의도와 코드 커버리지를 유지하면서 수동 마이그레이션보다 훨씬 빠르고 저렴한 것으로 입증되었습니다. 이 경험은 대규모 코드 변환을 위한 LLM의 강력한 능력을 보여줍니다. 에어비앤비는 개발자 생산성을 높이기 위해 LLM의 사용을 확대할 계획이며, 또한 대규모로 복잡한 문제를 해결하는 것을 좋아하는 엔지니어를 채용하고 있습니다.
CdXz5zHNQW_HzB4Yizqpc.jpeg
비자야 카자는 에어비앤비의 최고 보안 책임자(CSO) 겸 신뢰 및 안전 엔지니어링 책임자로서 커뮤니티 보호 및 인프라 보안 기술을 개발하는 팀을 이끌고 있습니다. 또한 에어비앤비 기술 다양성 위원회의 공동 책임자이기도 합니다. 인도의 대가족에서 자란 비자야는 어릴 적부터 학업적으로 뛰어난 성과를 내도록 교육받았으며, 과학과 수학에 대한 강한 애착을 갖고 대학에서 전기 공학을 전공했습니다. 대학 졸업 후, 시스코에서 소프트웨어 엔지니어로 일하게 되었고, 좋아하는 매니저를 따라 우연히 보안 분야에 발을 들여놓게 되었습니다. 시스코에서 17년 동안 10억 달러 규모의 보안 제품 포트폴리오 제품 개발을 이끌었으며, 이후 파이어아이와 모바일 보안에 중점을 둔 샌프란시스코의 스타트업인 룩아웃에서 근무했습니다. 비자야는 에어비앤비의 CSO직 제안을 받았을 때 처음에는 주저했지만, 회사의 비전과 미션에 깊은 인상을 받았습니다. 긍정적인 사용자 경험을 제공하고자 하는 회사의 헌신과 미션 중심적인 접근 방식에 이끌려 2019년 에어비앤비에 합류했습니다. 비자야는 사용자와 플랫폼 보호라는 공동의 미션을 공유하지만, 각기 다른 기술, 위협 및 중점 분야를 가진 두 팀, 즉 신뢰 및 안전 팀과 보안 팀을 이끌고 있습니다. 업무 외적으로 비자야는 즉흥 코미디를 즐겨 왔는데, 이를 통해 순발력 있게 생각하고 새로운 상황에 즉각적으로 대응하는 등 리더십에 대한 귀중한 교훈을 얻었습니다. 그녀는 다른 사람들에게 직업적인 좌절에 직면했을 때 집중력을 유지하고, 침착함을 잃지 않고, 끈기 있게 앞으로 나아가라고 조언합니다.
에어비앤비는 최근 구글의 오픈 소스 빌드 툴인 Bazel을 백엔드, 웹, iOS 플랫폼을 아우르는 유니버설 빌드 시스템으로 채택했습니다. 1,100만 줄이 넘는 코드로 구성된 대규모 웹 모노리포는 맞춤형 빌드 스크립트와 캐싱 로직으로 인해 유지 보수가 어려웠고 확장성이 좋지 않았습니다. 이러한 문제를 해결하기 위해 에어비앤비는 Bazel로 마이그레이션하여 복잡성, 병렬 처리, 캐싱 및 성능을 제공했습니다.마이그레이션 프로세스는 2021년에 시작되었지만 구글 외에 대규모 웹에서 Bazel을 통합하는 산업 전례는 공개되지 않았습니다. 팀은 원격 환경으로 큰 파일을 전송할 때 발생하는 성능 문제를 해결해야 했으며, 마이그레이션 원칙을 수립하여 전체 성능을 개선하거나 유지하고 마이그레이션 중에 모노리포에 기여하는 개발자의 영향을 줄였습니다.Bazel을 위한 저장소를 준비하기 위해 팀은 사이클 브레이킹과 자동화된 BUILD.bazel 파일 생성을 수행했습니다. 또한 TypeScript, ESLint 및 Jest를 활성화하고 캐싱을 도입하여 입력 크기를 줄이고 성능을 개선했습니다.후퇴를 방지하기 위해 팀은 테스트를 "숨김"에서 "필수"로 이동시키기 위해 규칙 속성을 사용하고, Jest 설정을 대체하는 동안 테스트를 실행하지 않도록 하여 단일 소스 진실을 보장했습니다. 또한 마이그레이션 준비 여부를 확인하기 위해 테스트 런타임, 코드 커버리지 통계 및 실패율과 같은 메트릭을 사용하여 Bazel 이전과 이후를 비교하는 스크립트를 작성했습니다.CI 마이그레이션과 함께 팀은 개발자가 로컬에서 Bazel을 실행하여 CI 실패를 재현하고 반복할 수 있도록 보장했습니다. 개발자가 익숙한 도구를 계속 사용하고 유익할 때 Bazel을 선택할 수 있도록 로컬 Bazel 경험을 제공했습니다.
에어비앤비는 세계 여행 방식을 완전히 바꾸었습니다. 그러나 다양한 위치와 재산 유형이 있는 재고에 의해 게스트에게 관련된 옵션을 제공하는 것이 점점 더 복잡해졌습니다. 이러한 도전을 해결하기 위해 에어비앤비는 위치 검색 프로세스를 개선하는 데 머신 러닝 및 강화 러닝 기법을 사용하여 혁신적인 변화를 일으켰습니다. 초기에는 에어비앤비가 검색 유형에 따라 맵 영역을 정의하는 데 휴리스틱스를 사용했지만, 이러한 휴리스틱스는 다양한 검색 유형을 구별하거나 새로운 데이터에 적응하는 데 제한이 있었습니다.에어비앤비는 다음으로 통계를 사용하여 위치 검색을 개선하는 데 데이터셋을 구축했습니다. 각 여행 목적지에 대한 데이터셋은 그 목적지에서 게스트가 예약한 목록을 기록했습니다. 그러나 통계적 접근 방식도 제한이 있었고, 특정 검색 매개변수와 관계없이 모든 검색을 동일하게 처리했습니다. 이러한 제한으로 인해 에어비앤비는 위치 검색이 더 고급 기법, 즉 머신 러닝을 필요로 할 수 있다고 믿었습니다.에어비앤비는 다양한 검색 매개변수, 예를 들어 게스트 수와 체류 기간,를 학습하고 각 검색에 대한 더 관련된 맵 영역을 예측할 수 있는 머신 러닝 모델을 구축했습니다. 머신 러닝 시스템은 예약된 목록의 회수율을 7.12% 증가시키고, 검색 맵 영역의 크기를 40.83% 줄였습니다. 이러한 결과는 플랫폼에서 취소되지 않은 예약자의 누적 증가율이 +1.8%로 나타났습니다.에어비앤비는 다음으로 강화 러닝을 위치 검색 프로세스에 도입했습니다. 이렇게 하면 시스템이 게스트의 상호작용에서 지속적으로 학습하고 예약 행위에 따라 검색 맵 영역을 조정할 수 있었습니다. 강화 러닝 시스템은 덜 여행하는 지역을 더 많이 탐색하고, 자주 검색 및 예약되는 지역을 덜 탐색하여 취소되지 않은 예약자의 누적 증가율이 0.51% 증가하고, 5성 여행 평가율이 0.71% 증가했습니다.에어비앤비의 휴리스틱스에서 고급 머신 러닝 및 강화 러닝 모델로의 여정은 복잡한 시스템을 변환하는 데이터 주도 접근 방식의 힘을 보여줍니다. 이러한 변환은 에어비앤비와 같은 규모에서 운영하는 회사의 경우 2.66%의 취소되지 않은 예약자 증가와 같은 주요 업적을 가져왔습니다.
에어비앤비의 테크 스택의 일부인 Riverbed는 시스템 레코드 스토어에서 데이터 소비를 최적화하여 읽기 최적화 스토어를 업데이트합니다. 람다 아키텍처를 사용하여 스트리밍 및 배치 구성 요소를 구현합니다. 스트리밍 측면에서는 변경 데이터 캡처(CDC) 이벤트에서 물질화된 뷰를 구성하는 데 중점을 두고 있습니다.알림 파이프라인은 알림 이벤트를 소비하고 의존 데이터 소스를 쿼리하여 물질화된 뷰를 구축하고, 싱크 스토어에 씁니다. 조인 연산은 DAG와 같은 구조를 사용하여 데이터 소스를 효율적으로 조인하고, 메타데이터에 대한 JoinConditionsDag 및 결과 저장에 대한 JoinResultsDag를 활용합니다. 스티치 연산은 조인된 결과를 사용 가능한 모델인 StitchModel로 변환합니다. Riverbed는 Apache Hive 및 Kafka를 포함하여 여러 싱크를 지원하여 유연성을 제공합니다.스트리밍 시스템은 CDC 이벤트에서 물질화된 뷰를 효율적으로 업데이트하여 확장성, 효율적인 데이터 가져오기 및 향상된 필터링 및 검색 기능을 가능하게 합니다. 다음 블로그 포스트에서 논의되는 소스 파이프라인은 동시성 및 버전 관리에 중요한 역할을 합니다. DAG 기반 데이터 구조를 활용하여 Riverbed는 스트리밍 데이터 조인을 최적화하여 메모리 사용량을 줄이고 효율성을 개선합니다.