关于21CTO本文介绍了Uber的实时数据基础设施,并“揭示”了全最大的实时租车的内部流程。
背景
Uber是一家著名的科技和互联网公司。2010年代初,随着可轻松连接司机和乘客的应用程序的推出,出租车市场发生了变化。
Uber由加勒特坎普(GarrettCamp)和特拉维斯卡兰尼克(TravisKalanick)于2009年创立。
两人当时正在巴黎参加一个技术会议,当时他们提议开发一款拼车应用程序。由于对传统的出租车服务感到失望,他们希望引入一种更高效、更可靠的出行方式,利用技术将乘客与附近的司机联系起来,以提供最大的便利。
UberCab是Uber的第一个版本,于2010年在旧金山推出。该应用程序允许用户通过智能手机根据距离和时间计算价并付款。
与传统出租车不同,优步司机不是持有执照的专业人士,而是拥有汽车的普通人。与Uber签订合同,以兼职或全职方式提供乘车服务。
到2023年,将有137亿人每月使用一次Uber或UberEats优食。此外,到2023年,Uber司机将完成944亿次出行。Uber在运营中积极利用数据分析和机器学习模型来支持其业务。
从Uber打车的动态定价到UberEatsRestaurantManager仪表板,一切都依赖于实时数据来高效运行。
在本文中,我们将了解Uber如何管理和支持各种实时应用程序的幕后基础设施。
语境
Uber基础设施的数据流架构
Uber的业务本质上是实时的。
数据不断从各种来源收集,包括司机、乘客、餐厅、食客和商户后端服务。Uber处理这些数据以提取有价值的信息,这些信息可用于针对各种现实用例做出实时决策。
实时数据处理在Uber的业务中发挥着至关重要的作用。该利用开源解决方案和内部增强功能来构建实时基础设施。
从较高层面来看,Uber的实时数据处理包括三个主要领域
消息传递允许生产者和订阅者之间进行通信。
流处理允许您将处理逻辑应用于消息流。
在线分析处理OLAP近乎实时地分析和查询所有数据。
每个领域都面临三个基本的扩展挑战
数据扩展传入的实时数据总量呈指数级增长。此外,Uber的基础设施遍布多个地理区域。因此,为了实现高可用性,系统必须能够处理大量增加的数据,同时保持数据新鲜度并减少端到端延迟和可用性SLA。
扩展用例随着Uber业务的增长,随着组织不同部分出现不同的需求,新的用例不断出现。
扩大用户类型从没有工程背景的业务用户到需要开发复杂实时数据管道的高级用户,与实时数据系统交互的各种用户具有不同的技能水平。
基础设施要求
Uber的实时基础设施需要
一致性关键应用程序需要所有区域的数据一致性。
可用性您的基础设施必须具有9999高可用性。
新鲜度大多数用例需要二级新鲜度。这确保了响应特定事件的能力。
延迟某些用例需要对原始数据进行查询,并且要求p99查询延迟小于1秒。
可扩展性系统可以随着数据量的持续增长而扩展。
成本Uber要求较低的数据处理和服务成本,以确保较高的运营效率。
灵活性Uber必须提供编程和声明式接口来表达计算逻辑,以服务不同的用户类别。
建筑模块
在本节中,我们将了解Uber基础设施的关键逻辑组件。
存储该层向其他层提供对象或blob存储,并确保写入后读取的一致性。用于长期存储,应针对高写入速度进行优化。Uber使用该层将数据填充或定向到流或OLAP数据表中。
由于业务规模庞大,Uber在各个数据中心部署并应用了多个Kafka集群。对于这种部署,Uber需要在Kafka中进行跨集群数据复制,原因有两个
用户需要全面了解各种用例的数据。例如,计算运动指标需要集成和分析来自所有数据中心的数据。
Uber复制了Kafka部署,以便在发生故障时提供冗余。
Uber构建并开源了一个名为uReplicator的稳定解决方案,用于Kafka复制目的。Replicator具有重新平衡算法,可将重新平衡期间受影响的主题分区数量保持在尽可能低的水平。
此外,在流量激增期间,负载可以在运行时重新分配给备份工作人员。
在研究了uReplicator的高级架构之后,我发现了以下内容
Uber使用ApacheHelix来管理uReplicator集群。
Helix控制器负责将主题分区分配给工作线程、处理主题/分区添加/删除、检测节点故障以及重新分配特定主题分区。
收到主题/分区复制请求后,Helix控制器将主题/分区和活动工作线程之间的映射更新到Zookeeper服务,该服务的作用类似于中央状态管理服务。
当映射发生更改时,系统会向工作线程的Helix代理发送通知。
工作线程将在其上运行复制任务的DynamicKafkaConsumer实例。
Uber还开发并开源了另一项名为Chaperone的服务,以防止集群间复制期间的数据丢失。收集关键统计信息,例如每个复制阶段的唯一消息数量。然后,Chaperone会比较统计数据,如果存在差异,则会生成警报。
阿帕奇弗林克
流处理
Uber使用ApacheFlink构建流处理,处理来自Kafka的所有实时数据。Flink提供了高吞吐量、低延迟的分布式流处理框架。Uber使用ApacheFlink的原因如下
其稳健性通过内置状态管理和用于错误恢复的检查点功能支持许多工作负载。
轻松扩展并有效处理背压。
Flink拥有庞大且活跃的开源社区。
Uber对ApacheFlink做出了以下贡献和改进
弗林克SQL
使用SQL构建流分析应用程序。
Uber在Flink之上提供了一个名为FlinkSQL的层。
ApacheCalciteSQL输入可以转换为Flink操作。处理器将查询编译到分布式Flink应用程序中并管理整个生命周期,让您可以专注于流程逻辑。在幕后,系统将SQL输入转换为逻辑计划,然后通过优化器形成物理计划。最后,我们使用FlinkAPI将计划转换为Flink任务。
然而,向用户隐藏复杂性会增加基础设施团队管理生产工作负载的运营开销。Uber必须解决以下挑战
资源估算和自动扩展Uber使用情况分析
一、客运率怎么算?
客车载客率=实际载客数/额定载客数。实际载重率是综合反映车辆行程利用率、吨位利用率、空间利用率的数字。实际负载率的影响因素也是这两个指标影响因素的综合。提高实际载运率的意义在于充分利用运输车辆的额定能力,减少车船空载或满载运行时间,减少浪费,简化运输。实际装载率的计算公式为实际装载率=计算期内折算转速/同期总运行装载量100。式中,总营运载重量也称为车辆总量。吨公里和车辆总座公里。卡车的计量单位为吨公里,客车的计量单位为座公里。总运营能力-车辆总吨数-座位数和座位公里数是指一段时间内所有运营车辆的总运营能力,由每辆运营车辆的总出行次数乘以其额定吨位计算得出。-座位和座位。计算公式如下总行程负载能力=总行程
通过实时监控、数据采集、数据分析,可以实现大数据监控。首先,行驶过程中必须实时监控速度、位置、时间等各种指标数据。
这些数据通过数据采集收集并存储在数据库中。
最后,通过数据分析对这些数据进行处理、挖掘和分析,以获得行程的各种统计信息,例如总行驶距离、平均速度和停留时间。
通过数据分析,实现旅行行程的监控和管理,为后续数据使用提供基础支撑。
一英里等于0到5公里。
1公里=2英里=2x500米=1000米
1航空英里等于1海里或1航段,在中国标准中为1至852公里。标准符号是nmile。《中华人民共和国法定计量单位》使用的符号是nmile。这等于地椭圆子午线上1分纬度对应的弧长。
附加信息
1海里=子午线长度的两倍=360601852-25-9-31cos-2m。是纬度。在=0度时,即在赤道处,1hl长度最短,在1842~94m处,在两极处,1hl长度最长,在1861~56m处。在大约44度14分时,1海里等于1852米。这是海道测量学会1929年采用的标准海里长度,目前为韩国和世界上大多数国家采用。
1海里=1-852公里-公里,-中国标准,
1海里=1-85101公里-公里。-美国标准,
1海里=1-85455公里-公里。-英国标准,
1海里=1-85327公里-公里。-法国标准,
1海里=1-85578公里-公里。-俄罗斯标准,
最短的海里在赤道附近,1海里=1843米。
最长的海里在北极和南极,1海里=1862米。
地的平均半径为6371300米。根据地平均半径计算的一海里为
1海里=2--6371300/360/60=1853-3m
No Comment