写点什么

Uber Freight 近实时分析架构,晚点取消的比例下降了 0.4%

作者:Claudio Masolo

  • 2022-11-26
    北京
  • 本文字数:1048 字

    阅读完需:约 3 分钟

Uber Freight近实时分析架构,晚点取消的比例下降了0.4%

Uber Freight是 Uber 的一个平台,致力于为托运人和承运人提供连接服务。为托运人提供可靠的服务对 Uber Freight 来说至关重要,这也就是为什么他们要开发承运人记分卡(Carrier Scorecard),其中包含了准时取货/送货、跟踪自动化和晚点取消等指标。关键在于他们要在 Carrier App 上近乎实时地显示这些信息,而且提供这种服务的架构必须足够快,快到可以满足这些指标需求。

 

这个架构的要求是数据新鲜度、延迟、可靠性和准确性。一旦运单完成或退回,将以较低的延迟更新绩效分数。每个承运人都可以在低延迟的情况下在应用中查看自己的绩效分数。数据的处理和服务具有较高的可靠性,如果发生了故障,整个系统可以进行优雅的恢复。性能指标必须得到精确的计算。

 

在设计和实现最终的架构之前,他们考虑了一些潜在的解决方案,特别是在聚合指标方面。这些潜在的解决方案包括使用MySQL进行动态聚合和使用 MySQL 进行数据预聚合。这两种解决方案都有一些缺点,主要的问题是需要批量插入或更新记录,以确保历史数据被正确更新。他们考虑的另一个解决方案是使用两张OLAP数据库表,一张存储原始数据,然后使用事件触发器异步函数来更新另一个表中的指标,但是这个解决方案是不可伸缩的,特别是在写入流量很高的情况下。

 


最终的架构图

 

最终的架构使用了KafkaFlinkPinot。后端服务生成的 Kafka 事件通过 Flink 来聚合。聚合的数据被摄取到 Pinot 中,它使用 Kafka 的实时摄取来保留最后三天的数据,历史数据被摄取到 HDFS 中。

 

Apache Pinot 提供了 JSON、排序列和星树等索引优化技术,以加速查询的性能。快速查询为承运人提供了更好的交互体验。为了实现 250 毫秒的表查询延迟,他们在 Pinot 表上创建了两种索引——倒排索引排序索引。倒排索引可以将带有 WHERE 子句的查询速度提高 10 倍,根据承运人的惟一 ID 对索引进行排序,将表的大小减小了一半,这也减小了查询延迟。

 

Neutrino 是用于访问 Pinot 数据集的查询网关,它是Presto的另一种部署方式,其中协调器和 Worker 运行在不同的主机上,可以独立执行查询。Neutrino 接受PrestoSQL查询,并将其翻译成 Pinot 查询语言。Neutrino 前面添加了 Redis 缓存,可以存储聚合指标最多 12 小时,缓存命中率超过了 90%。

 

根据Uber的观察发现,自从它开始向 Freight 司机提供绩效信息以来,所有关键指标都有了显著提升——晚点取消的比例下降了 0.4%,准时取货的比例提高了 0.6%,准时卸货的比例提高了 1%,自动跟踪的比例提高了 1%。这些绩效改进在 2021 年估计节省了 150 万美元的成本。

 

原文链接

https://www.infoq.com/news/2022/11/uber-freight-analysis/

2022-11-26 08:006821

评论

发布
暂无评论
发现更多内容

如何看待制造企业的数字化转型,有哪些成功案例可以分享?

优秀

低代码 数字化转型 制造业

50 K8S之Contour控制器

穿过生命散发芬芳

k8s 28天写作 12月日更

如何推动区块链与物联网深度融合,赋能数字化转型?

CECBC

怎样的活动才算是成功?(20/28)

赵新龙

28天写作

☕【Java深层系列】「技术盲区」让我们一起完全吃透针对于时间和日期相关的API指南

码界西柚

Java 工具 日期处理 12月日更

网络安全教程:13 信息收集

喀拉峻

黑客 网络安全 安全 信息安全

花一点时间优化一次年迈的后台系统的检索体验

为自己带盐

28天写作 12月日更 ​jQuery

GrowingIO Reactor速成指南

GrowingIO技术专栏

响应式编程 reactor

不要被数据蒙蔽你的眼睛

Geek_utwige

数据分析 统计学 辛普森悖论

🏆【CI/CD技术专题】「Docker实战系列」(1)本地进行生成镜像以及标签Tag推送到DockerHub

码界西柚

Docker 容器镜像 12月日更 Dockerhub

JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

汪子熙

JavaScript 设计模式 桥接模式 28天写作 12月日更

NFT改变潮流,也在解放人类创造力的约束

CECBC

如何提高用户留存?

石云升

AARRR 产品思维 28天写作 产品增长 12月日更

跟着源码学IM(九):基于Netty实现一套分布式IM系统

JackJiang

Netty websocket 即时通讯 IM

Dubbo框架学习笔记七

风翱

dubbo 12月日更

基于区块链的去中心化身份技术有哪些应用前景?

CECBC

Python 的切片为什么不会索引越界?

Python猫

Python

动手做个 AI 机器人,帮我回消息!

程序员鱼皮

JavaScript AI 前端 nlp Node

复盘健康

将军-技术演讲力教练

【架构实战营】模块七

衣谷

架构实战营

【架构实战营】模块八

衣谷

架构实战营

怎么活的超脱:把自己的生活看成一场戏

mtfelix

28天写作

王者荣耀异地多活架构设计

Beyond Ryan

聊聊你每天是如何修bug的

卢卡多多

bug修复 28天写作 12月日更

PassJava 开源(一) :初始化项目和添加微服务

悟空聊架构

SpringCloud 28天写作 passjava 悟空聊架构 12月日更

DDD领域驱动设计实战(三)-深入理解实体

JavaEdge

12月日更

十二张图带你了解 Redis 的数据结构和对象系统

程序员历小冰

redis 数据结构 28天写作 12月日更

如何正确的重写hashcode()

李子捌

Java 28天写作 12月日更

解决:Command ‘mongo‘ not found, but can be installed with

liuzhen007

28天写作 12月日更

vue3.2组件库-element plus 自动按需引入

Mr.Cactus

typescript Vue3 Element Plus Vite2

vivo:不做开发者的过客,变成IoT的归人

脑极体

Uber Freight近实时分析架构,晚点取消的比例下降了0.4%_架构_InfoQ精选文章