10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

Uber Eats 推出 INCA,将目录管理从餐厅扩展到零售

作者:Leela Kumili

  • 2025-09-02
    北京
  • 本文字数:1176 字

    阅读完需:约 4 分钟

大小:577.49K时长:03:17
Uber Eats推出INCA,将目录管理从餐厅扩展到零售

Uber Eats 推出 INCA(INventory and CAtalog),一个用于 Uber 全球平台的可扩展的目录系统,用来管理来自超市、药店和其他零售合作伙伴庞大且多样化的商品库存。INCA 打破了 Uber Eats 最初以餐厅为中心的架构的局限性。最初的架构针对的是低 SKU 数量和直接传递式目录管理,无法满足零售环境中对规模、元数据复杂性和合规性的要求。


INCA 每天处理数十亿次目录变更,旨在近乎实时地更新产品数据,确保价格或可用性等关键信息的延迟时间低于一分钟。它将数据的摄取、填充、发布和索引管道统一起来,确保用户能够在 Uber Eats 的应用程序中看到准确且最新的产品。


Uber Eats 的工程师将零售目录管理描述为一个“模糊且复杂的问题空间”。产品数据可能会被摄取,但其可用性可能会因下游因素而发生改变,这些因素会影响商品是否以及如何呈现给客户。QCon 的一场演讲和一篇关于优化搜索系统的文章讨论了管理商品杂货和零售库存所面临的一些挑战,包括搜索优化和相关性问题。


数据模型采用了通用的“实体 + 扩展”结构,能够灵活地表示各种属性,例如营养成分信息、合规标签或商店营业时间等。它还支持零售商提供的 ID 和内部 UUID,从而减少了在标识符更改时可能出现的重复或产品不匹配问题。


模型的核心是项,也称为“销售产品”,代表正在销售的产品,包括价格、可用性和数量。项与零售商、目录部分和履行选项进行了链接,并与一个详细描述其属性(例如营养信息、尺寸和费用等)的产品相关连。


INCA 目录模型(来源:Uber 工程博客


INCA 的架构遵循六个核心原则:无限可扩展性;无需重新设计架构即可添加新属性;针对商家、地区或产品类型配置智能规则;在发布前填充产品数据;以分类驱动的目录结构;以及支持推送和拉取 API、节流和容错的弹性摄取。


端到端目录流程(来源:Uber 工程博客


目录摄取支持多种集成模式,可以通过 SFTP 上传 CSV 文件,也可以通过 Starlark 脚本进行灵活的属性转换。通过 Cadence 工作流实现了容错摄取协调,支持增量和全目录同步。在发布时系统会依据优先级排序的合并规范,从多个来源中挑选出最佳属性。在发布过程中会运行在线填充器和验证器,以丰富数据度并验证其准确性。


INCA 中使用的基于实体和扩展的数据模型(来源:Uber 工程博客


数据填充服务使用 LLM 生成的描述、分类、规范链接和合规性检查来丰富原始产品数据。回归检测会监控异常情况,例如大量 SKU 下架、定价归零或通道移除,帮助团队在问题影响到客户之前迅速发现并解决问题。


INCA 管理着数亿个非餐厅类别的 SKU,为 Uber Eats 的零售目录提供结构化、丰富且易于发现的产品数据。目录版本控制功能支持在全球和单店级别近乎即时地回滚更新,使团队能够在不影响客户体验的前提下,迅速从错误或异常中恢复。


【声明:本文由 InfoQ 翻译,未经许可禁止转载。】


原文链接:

https://www.infoq.com/news/2025/08/ubereats-inca-inventory-catalog/

2025-09-02 10:051

评论

发布
暂无评论

区块链技术应用于链接智慧医疗

CECBC

区块链 社会保险 智能医疗

如何将VSCode变成绿色版本

lmymirror

vscode 教程

一个在交流群里讨论过两轮的问题,答案竟然跟一个 PEP 有关

Python猫

Python 编程

Python 为什么能支持任意的真值判断?

Python猫

Python 编程

持续集成有什么好处?快来看鸭

清菡软件测试

jenkins

[翻译]Defer,Panic,and Recover

卓丁

defer panic recover Go 语言

JavaScript 深拷贝与浅拷贝

梁凤波

妈妈,今天您几点下班?

脑极体

职场求生攻略答疑篇之 3 —— 数据是土地

臧萌

数据 职场成长

Elasticsearch之mapping

北漂码农有话说

云原生 go-zero 微服务框架

万俊峰Kevin

微服务 microservice go-zero Go 语言

SpringBoot 缓存之常用注解

hepingfly

Java 缓存 springboot 注解

人生革命由自律发起

胡迪伦

自学编程 拖延症 懒惰 死循环

2020-09-03-第十三周作业

路易斯李李李

怎么向女朋友解释什么叫区块链?

艾小仙

比特币 区块链 以太坊 defi

2020-09-03-第十三周学习总结

路易斯李李李

Python 函数为什么会默认返回 None?

Python猫

Python 编程

Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?

Python猫

Python 编程

为什么Java二维数组不用指定列的长度

Rayjun

Java 数组

宁波新基建之路 基于制造优势破题智慧发展

CECBC

新基建

区块链技术破解数字版权保护难题

CECBC

区块链 版权保护 数字技术

Google鼓励的13条代码审查标准 [建议收藏]

简爱W

拥抱K8S系列-04-基于docker部署更多应用

张无忌

Docker 标准化 vsftpd

为稳外贸保驾护航 区块链交易平台显身手

CECBC

区块链 银行 福费廷

商业通识 : 商业到底是什么?

Walker

学习 得到 个人成长 商业

首个数字银行卡明年发行,广州出台区块链措施支持大湾区

CECBC

区块链 金融科技 社会

智能商业时代的思考(一)从在线化到网络化

刘旭东

拼多多 淘宝 智能商业 网络协同

【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!

冰河

MySQL 面试 事务 隔离级别 冰河

oeasy教您玩转linux010206toilet

o

Flink从保存点启动应用-18

小知识点

scala 大数据 flink

java安全编码指南之:声明和初始化

程序那些事

安全编码 java安全编码 编码指南 对象初始化

Uber Eats推出INCA,将目录管理从餐厅扩展到零售_后端_InfoQ精选文章