1부: 디지털 카탈로그 구축
오후 5시, 직장에서 집으로 향하고 있으며 오늘 저녁 7시 30분까지 빠른 저녁 식사를 만들고 싶습니다. 연어를 요리하고 싶지만 냉장고에 세 가지 주요 재료가 없습니다. 신선한 연어 필레 2.5파운드, 마이어 레몬 1개, 신선한 딜 1뭉치. iPhone에서 Instacart를 실행하고 이 세 가지 항목을 장바구니에 추가하고 오후 6:00–7:00 배송 기간을 설정하고 주문을 완료합니다. 1시간 30분 후 오븐을 예열하는 즉시 식료품이 집 앞까지 배달됩니다.
그 순간은 표면적으로는 단순하고 만족스럽지만 그 이면에는 주문을 이행하기 위해 함께 작동하는 복잡한 시스템 웹이 있습니다. 이 "Journey of Order" 시리즈에서는 앱에 식료품 항목을 표시하고, 매장 탐색을 가능하게 하고, 쇼핑객이 계산할 때 안내하고, 저녁 식사를 집 앞까지 배달하는 라스트 마일 물류를 지원하는 기술을 안내합니다. 한 시간처럼 빨리.
이 첫 번째 기사에서는 소매 파트너로부터 식료품 항목 속성 및 재고 데이터를 획득하고, 위치 및 재고를 거의 실시간으로 구성하고, 더 큰 식료품 "카탈로그"에서 사용 가능한 형식으로 데이터를 얻는 방법에 대해 자세히 알아보겠습니다.
당사 카탈로그는 북미 전역의 거의 20,000개 매장에서 300개 이상의 소매업체에서 5억 개 이상의 품목 목록이 있는 세계 최대 온라인 식료품 카탈로그입니다.
최소한 카탈로그의 모든 단일 제품 에는 가격, 이름, 위치, UPC 및 SKU 와 같은 속성 의 하위 집합이 있습니다. 여러 이미지, 영양 정보, 계절성 정보, 식이 라벨(글루텐 프리, 코셔, 비건 등)을 포함한 보다 자세한 속성 목록을 수용할 수 있습니다. 더 많은 속성을 수집할수록 더 유연하고 세분화된 데이터 분류 및 우리의 쇼핑객과 고객을 검색할 수 있습니다.
그렇다면 어떻게 이 모든 정보를 얻을 수 있습니까? 다양한 정확도의 다양한 데이터 소스로 작업해야 합니다. 당사 카탈로그는 소매업체, 제3자 콘텐츠 수집업체, 제조업체가 직접 제공한 데이터와 Instacart 쇼핑객 및 사이트 관리자가 현장에서 수집한 "자체 개발" 데이터를 포함하여 30개 이상의 데이터 소스로 구성됩니다.
두 가지 수준의 항목 속성을 수집합니다.
매장별 속성 : 재고, 위치에 따른 특산품, 위치별 가격
제품별 속성 : 이름, 제품 설명, 승인된 사진, 영양 정보, 크기/무게
우리는 간단한 SFTP 서버를 사용하여 소매업체로부터 CSV 형식의 데이터를 수집하고 기존의 디지털화된 제품 데이터가 있는 소매업체가 실시간으로 시스템을 업데이트할 수 있도록 하는 다양한 API를 구축했습니다. 제품별 데이터는 종종 매장별 데이터를 알려줍니다.
Instacart는 세계가 하루에 트윗하는 것보다 매일 밤 더 많은 카탈로그 데이터 포인트를 업데이트합니다.
재고, 가격 및 기타 속성은 시시각각 변합니다. 이러한 변경 사항을 카탈로그에 반영하지 않으면 매장 전면에 정확한 목록이 반영되지 않아 고객, 쇼핑객, 소매업체 및 CPG 파트너가 실망하게 됩니다. 우리는 초기부터 소수의 소매업체와 협력하여 선반에 있는 제품에 대한 정기적인 업데이트를 보낼 수 있는 도구에 투자했습니다. 특정 매장 위치에서 품목 가격이 변경되거나 제품을 사용할 수 없는 경우 소매 파트너는 재고 규모와 자체 기술 인프라의 특성에 따라 여러 가지 방법으로 당사에 경고할 수 있습니다.
수동, 일회성 편집을 위해 소매업체가 원하는 시간에 업데이트된 제품 속성을 추가할 수 있는 양식 작성 기능이 있는 사용자 친화적인 웹 포털을 구축했습니다.
소매업체는 업데이트된 제품 속성이 포함된 CSV 파일을 SFTP 서버에 드롭할 수 있는 옵션을 제공합니다. 그들은 원하는 만큼 자주 업데이트를 SFTP 서버에 드롭할 수 있습니다. 많은 사람들이 매일 한 번 푸시하도록 선택합니다.
맨 위: 하나의 Meyer 레몬 목록에 대한 일일 제품 업데이트를 추적하는 백엔드를 살펴봅니다. 아래: "가장 이상적인" 속성인 Meyer 레몬 이미지는 무엇입니까? 왼쪽의 수평 방향 레몬 이미지가 오른쪽의 수직 방향 레몬을 대체했습니다.
자체적으로 정교한 재고 시스템을 구축한 파트너인 일부 소매업체는 "잔고" 데이터의 실시간 스트림을 제공하여 선반에 있는 품목에 대한 매 순간 업데이트를 제공할 수 있습니다. . 우리는 소매업체가 실시간으로 재고 및 제품 속성의 변경 사항을 전송하는 데 사용할 수 있는 API를 구축했습니다.
그것은 쉬운 일입니다. 이 데이터가 모두 있으면 어떻게 정리합니까? 카탈로그에 있는 목록에 대해 가장 정확하고 가장 일관된 제품 속성을 어떻게 결정 합니까? 가장 정확한 속성을 찾으려면 소스를 서로 비교하고 입력의 우선 순위를 지정해야 합니다.
제품 가용성은 고객과 쇼핑객 경험에 막대한 영향을 미치는 매장별 속성입니다. 어젯밤 CSV 파일 드롭으로 받은 데이터에 Meyer 레몬이 Alabama주 Mobile에 있는 매장에 재고가 있다고 알려주지만 현장에 있는 쇼핑객이 앱에 해당 품목의 재고가 없다고 표시하는 경우 무게를 측정해야 합니다. 각 입력은 서로에 대해 입력하고 어떤 입력이 올바른지 순간적으로 결정합니다.
우리는 처음에 이를 중심으로 일련의 휴리스틱을 구축했으며, 마이어 레몬이 실제로 매장에 있는지 여부에 대한 "가장 정확한" 답변을 결정하기 위해 거시적 수준에서 데이터 소스의 신뢰성을 비교했습니다. 우리는 이러한 휴리스틱을 만들기 위해 약간의 오래된 인간의 직관을 사용했습니다. 예를 들어, 한 위치에서 품목의 재고가 없다고 보고하는 여러 쇼핑객은 타사 제공업체의 데이터보다 *보통* 더 신뢰할 수 있습니다. 소매업체 포털을 통해 지난 30분 동안 제공된 일회성 입력은 CSV를 통한 야간 업데이트보다 *대개* 더 정확합니다. 하지만 더 복잡해질 수 있습니다. 쇼핑객과 소매 관리자가 동시에 충돌하는 입력을 보내면 어떻게 될까요? 우리 규모에서는 그런 일이 발생합니다.
그러나 인간의 직관은 당신을 여기까지만 데려갈 수 있습니다. 카탈로그에 제품 목록이 훨씬 적었을 때 이러한 휴리스틱을 요리했습니다. 현재 우리는 매일 훨씬 더 많은 데이터 수집을 처리하고 있으며 쇼핑객, 브랜드 및 소매업체로부터 더 많은 정보를 받고 있습니다. 이제 우리는 노이즈에서 더 많은 신호를 찾고 규모에 맞게 더 좋고 세분화된 우선 순위 지정 모델을 구축하기 위해 기계 학습 모델을 찾고 있습니다. 궁극적으로 이러한 모델을 구축하면 정확한 정확도를 얻을 수 있으며 신선한 대서양 연어 필레가 매장에 있는지 또는 냉동 식품을 해동하기 위해 저녁 식사 준비 일정에 10-15분을 추가해야 하는지 여부를 더 쉽게 확인할 수 있습니다. 연어 필레 대체품.
2018년 한 해에만 고유한 매장과 제품별 속성을 가진 100개 이상의 새로운 소매업체 파트너를 추가했습니다.
우리의 데이터베이스 인프라는 전통적으로 "장인" 시스템으로 진화했으며, 시간이 지남에 따라 즉각적인 요구 사항이 발생하면 이를 해결하기 위해 구축되었습니다. 요컨대, 그것은 결코 설계 되지 않았습니다 .
파트너가 매일 보내는 방대한 양의 데이터를 처리하고 대규모 데이터 품질 문제를 처리하는 것은 카탈로그 팀의 주요 과제 중 하나입니다. 이제 7년 간의 카탈로그 데이터와 매일 업데이트되는 수십억 개의 데이터 포인트를 통해 우리는 "빅 데이터 문제"를 처리하기 위한 시스템을 구축해야 한다는 것을 인식했습니다.
재미있는 사실: 파트너는 하루 중 언제든지 인벤토리 데이터를 보낼 수 있지만 대부분의 데이터 덤프는 현지 시간으로 오후 10시경에 받습니다. 우리 시스템의 특정 개별 부분(예: Postgres)은 오후 10시 피크 로드 시간을 효율적으로 처리하도록 구성되지 않았습니다. 원래는 탄력적 확장성을 염두에 두고 구축하지 않았습니다. 이 문제를 해결하기 위해 우리는 저렴한 스토리지가 있는 분산 시스템에서 실행되는 카탈로그 인프라를 장인 시스템에서 SQL 기반 인터페이스로 "리프트 앤 시프트"하기 시작했습니다. 해당 스토리지에서 컴퓨팅을 분리했으며 이 새로운 시스템에서는 Airflow 를 통합 스케줄러로 사용하여 해당 작업을 조정하고 Snowflake 를 사용하여 데이터를 저장하고 쿼리합니다.
이제 인프라를 재구축하면 로드 시간을 효율적으로 처리하는 데 도움이 될 뿐만 아니라 장기적으로 비용이 절감되고 데이터 우선 순위 지정 모델이 발전함에 따라 매일 밤 더 많은 업데이트 를 수행할 수 있습니다.
연어 필레, 신선한 딜, Meyer 레몬 속성이 가장 정확하고 최신의 "최고" 목록이라고 확신하면 고객이 매일 사용하는 온라인 상점에 해당 데이터를 표시합니다. . 이 시리즈의 다음 기사에서는 고객 대면 앱을 작동시키는 기술에 대해 자세히 알아볼 것입니다.
데이터베이스와 도서관 과학을 충분히 이해할 수
없습니까? 카탈로그 팀이 채용 중입니다!
현재 엔지니어링 채용 정보를 확인하십시오
.
*Instacart의 기술 블로그 에서 엔지니어링에 대해 자세히 알아보십시오