系统设计:Uber-滴滴后端服务

发布于:2024-10-24 编辑:匿名 来源:网络

需求设计 Uber后端,让我们设计一个像Uber一样的共享乘车服务,将需要乘车的乘客与有车的司机联系起来。类似服务:Lyft、滴滴、Via、Sidecar等。

难度:难,基于附近的人或搜索服务前提设计 1.什么是Uber?优步允许其客户向出租车司机预订服务。优步司机开着他们的私家车载着顾客到处走走。

顾客和司机都使用 Uber 应用程序通过智能手机相互沟通。 2. 系统要求和目标 让我们从构建一个更简单的 Uber 版本开始。

我们的系统中有两种类型的用户:1)司机2)客户。 ?司机必须定期通知服务人员其当前位置以及是否可以接送乘客。

?乘客可以看到附近所有可用的司机。 ? 客户可以叫车;附近的司机会收到有关已准备好接载顾客的通知。

? 一旦司机和顾客接受乘车,他们就可以持续看到彼此的当前位置,直到行程完成。 ?到达目的地后,司机会将行程标记为完成,以便乘客下次乘车时使用。

3. 容量估算和限制 ? 假设我们每天有3 亿客户和10,000 名司机,以及10,000 名活跃客户和10,000 名活跃司机。假设每天有 10,000 次骑行。

?假设所有活跃驾驶员每三秒通知一次他们当前的位置。 ? 一旦客户提出乘车请求,系统应该能够实时联系司机 - 时间 4. 基本系统设计和算法 我们将采用设计 Yelp 时讨论的解决方案并对其进行修改,使其适合“Uber”如上所述用例。

我们最大的区别是,我们的四叉树在构建时并没有考虑到它会经常更新。因此,我们的动态网格解决方案存在两个问题: ? 由于所有活动驾驶员每三秒报告一次其位置,因此我们需要更新数据结构以反映这一点。

如果我们必须针对驾驶员位置的每次变化来更新四叉树,这将需要大量的时间和资源。要将驱动程序更新到新位置,我们必须根据驱动程序之前的位置找到正确的网格。

如果新位置不属于当前网格,我们必须从当前网格中删除驱动程序并将用户移动/重新插入到正确的网格。在此移动之后,如果新的网格达到驱动程序的最大限制,我们必须重新绘制它。

?我们需要有一个快速机制,将所有附近司机的当前位置传播给该地区的任何活跃客户。此外,在骑行时,我们的系统需要告知驾驶员和乘客汽车的当前位置。

虽然我们的四叉树可以帮助我们快速找到附近的驱动程序,但它并不能保证树中的快速更新。每次司机报告其位置时,我们是否都需要修改我们的四叉树?如果我们不在每次更新驱动程序时更新四叉树,它将包含一些旧数据,并且无法正确反映驱动程序的当前位置。

如果您还记得的话,构建四叉树的目的是有效地找到附近的驱动程序(或地点)。由于所有活动驱动程序每三秒报告一次其位置,因此我们的树上发生的更新比查询附近的驱动程序要多得多。

那么,如果我们将所有驱动程序报告的最新位置保留在哈希表中并稍微减少四叉树的更新频率,会怎么样呢?假设我们保证驾驶员的当前位置将在 15 秒内反映在四叉树中。同时,我们会维护一个哈希表,存储驱动程序报告的当前位置;我们称之为 DriverLocationHT。

DriverLocationHT 需要多少内存?我们需要将 DriveID 及其当前和旧位置存储在哈希表中。因此,我们总共需要 35 个字节来存储一条记录: 1. DriverID(3 个字节 - 一万个驱动程序) 2. 旧纬度(8 字节) 3. 旧经度(8 字节) 4. 新纬度(8 字节) 5新经度(8 字节) 总计 = 35 字节 如果我们总共有一万个驱动程序,我们需要以下内存(忽略哈希表开销): 100 万 * 35 字节 => 35 MB 我们的服务将消耗多少带宽来接收所有司机的位置更新?如果我们获得 DriverID 及其位置,它将是(3 =>?? 19 字节)。

如果我们每三秒收到一百万条驱动程序消息,那么每三秒我们将获得 19MB。我们需要将DriverLocationHT分发到多个服务器吗?虽然我们的内存和带宽需求不需要这样做,因为所有这些信息都可以轻松存储在一台服务器上,但为了可扩展性、性能和容错能力,我们应该将 DriverLocationHT 分布在多个服务器上。

我们可以根据DriverID进行分发,使分发完全随机。让我们将持有 DriverLocation 的机器称为 Driver Location 服务器。

除了存储驾驶员的位置之外,每个服务器还将执行两件事: 1. 一旦服务器收到驾驶员位置的更新,它们就会将该信息广播给所有感兴趣的客户端。 2. 服务器需要通知对应的四叉树服务器刷新驱动程序的位置。

如上所述,这可能每 10 秒发生一次。如何有效地将司机的位置广播给客户?我们可以有一个推送模型,服务器将位置推送给所有相关用户。

我们可以提供专门的通知服务,向所有感兴趣的客户广播驾驶员的当前位置。我们可以在发布者/订阅者模型上构建通知服务。

当客户在手机上打开 Uber 应用程序时,他们会查询服务器以查找附近的司机。在服务器端,我们将在将驱动程序列表返回给客户端之前向客户端订阅这些驱动程序的所有更新。

我们可以维护一个有兴趣了解某个驱动程序位置的客户端(订阅者)列表,每当我们更新该驱动程序的 DriverLocationHT 时,我们就可以将该驱动程序广播到所有订阅客户端的当前位置。这样,我们的系统可确保始终向客户显示驾驶员的当前位置。

我们需要多少内存来存储所有这些订阅?如上所述,我们将拥有 10,000 名日活跃客户和 500,000 名日活跃司机。假设平均有 5 位客户订阅了一名司机。

假设我们将所有这些信息存储在哈希表中,以便我们可以有效地更新它。我们需要存储司机和客户 ID 来维护订阅。

假设DriverID需要3个字节,CustomerID需要8个字节,那么我们需要21MB的内存。 (K * 3) + (K * 5 * 8 ) ~= 21 MB 我们需要多少带宽来向客户端广播驾驶员的位置?对于每个活动驱动程序,我们有 5 个订阅者,因此我们的订阅者总数为: 5*K => 2.5M 对于所有这些客户端,我们需要每秒发送 DriverID(3 字节)及其位置(16 字节),因此,我们需要如下带宽: 2.5M * 19 bytes => 47.5 MB/s 如何高效地实现通知服务?我们可以使用 HTTP 长轮询或推送通知。

如何为当前客户添加新的发布者/驱动程序?正如我们上面所建议的,当客户第一次打开 Uber 应用程序时,他们会订阅附近的司机,当新司机进入客户正在查看的区域时会发生什么?为了动态添加新客户/驱动订阅,我们需要跟踪客户关注的领域。这会使我们的解决方案变得复杂;那么如果客户端不推送这些信息,而是从服务器拉取信息呢?如果客户端从服务器获取有关附近驱动程序的信息怎么办?客户端可以发送当前位置,服务器将从四叉树中找到所有附近的驱动程序并将其返回给客户端。

收到此信息后,客户可以更新屏幕以反映驾驶员的当前位置。客户端可以每五秒查询一次,以限制到服务器的往返次数。

与上面提到的推送模型相比,这个解决方案看起来更简单。当网格达到最大限制时,我们是否需要重新划分网格?我们可以有一个缓冲区,允许每个网格在我们决定对其进行网格划分之前超过大小限制。

假设我们的网格在分割/合并之前可以额外增长/收缩 10%。这将减少高流量网格上的网格分区或组合负载。

“叫车”用例将如何运作? 1. 顾客提出乘车请求。 2. 聚合服务器之一将收到请求并要求四叉树服务器返回附近的驱动程序。

3. 聚合器服务器收集所有结果并按评级对它们进行排序。 4. 聚合器服务器将同时向排名靠前(例如三个)的司机发送通知,首先接受请求的司机将被分配行程。

其他司机将收到取消请求。如果这三名司机都没有回应,聚合商将要求列表中接下来的三名司机搭车。

5. 一旦司机接受请求,顾客就会收到通知。 5. 容错和复制 如果驱动程序位置服务器或通知服务器死机了怎么办?我们需要这些服务器的副本,以便如果主服务器挂掉,辅助服务器可以接管控制权。

此外,我们可以将这些数据存储在一些持久存储中,例如SSD,它可以提供快速的IO;这将确保如果主服务器和辅助服务器都死掉,我们可以从持久存储中恢复数据。 6. 排名 如果我们不仅要根据邻近度,还要根据流行度或相关性对搜索结果进行排名,该怎么办?如何才能返回给定半径内的顶级司机呢?假设我们在数据库和四叉树中跟踪每个驾驶员的总体评分。

在我们的系统中,一个总数可以代表这个受欢迎程度,例如,一个司机在十颗星中得到多少颗星?当搜索给定半径内的前 10 个司机时,我们可以要求四叉树的每个分区返回评分最高的前 10 个司机。然后,聚合服务器可以确定不同分区返回的所有驱动程序中的前 10 个驱动程序。

系统设计:Uber-滴滴后端服务

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • Yelp计划明年提供更多本地团购服务或进行IPO

    Yelp计划明年提供更多本地团购服务或进行IPO

    据美国科技博客网站Venturebeat报道,周三在美国旧金山举行的“MobileBeat”技术大会上,美国商店评论网站Yelp联合创始人和CEO杰里米……斯托普尔曼(Jeremy和Stoppelman)表示,未来将致力于为用户提供更多本地团购服务。 他还透露,Yelp可能会在明年或后年进行首次公开??募

    06-18

  • 中信资本超额募集第三支日本并购基金,规模达300亿日元

    中信资本超额募集第三支日本并购基金,规模达300亿日元

    投资行业动态,2月7日,中信资本控股有限公司(CITIC Capital Partners,中信资本(以下简称“中信资本”)已完成第三期日本并购基金(CITIC Capital Japan Partners III, L.P.以下简称“CCJP III”)的募集,总规模为1亿日元。   据了解,CCJP III吸引了来自日本等国家和地

    06-18

  • 阿里巴巴双11,除了破纪录,更是一场AI秀

    阿里巴巴双11,除了破纪录,更是一场AI秀

    第11届天猫双11全球狂欢节来了!从组队搭楼、抢喵币开始,这场一年一度的全民购物嘉年华正在不断升温,只等11月11日午夜入场的时刻。 1分36秒,破亿。 12分49秒,破亿。 1小时3分59秒过亿。 每年双11,国民的购买力都会以数字刷新,今年也不例外。 在千亿大关,今年的双11比去

    06-17

  • 长兴基金投资中科院创投

    长兴基金投资中科院创投

    投资界-解码LP获悉,近日,长春股权投资基金管理有限公司公告称,长春振兴产业发展创业投资引导基金拟参与设立子基金。 此次,长兴基金拟将沉投资的1亿元人民币投资于中国科技成果转化创业投资基金(广东)合伙企业(有限合伙)。 基金规模暂定为40亿。 基金管理人为中科院创

    06-17

  • 一款真正顺应民意的好产品,金立超强续航M5 Plus

    一款真正顺应民意的好产品,金立超强续航M5 Plus

    科技媒体PhoneArena最近发起了一项民意调查,邀请用户站在手机厂商的角度来决定智能手机上哪些参数最应该改变,改善了。 物品。 结果显示,大多数选民今年最希望改进的既不是显示质量,也不是相机性能,而是电池寿命。 它获得了63.7%的选票,远高于排名第二的用户体验(16.17

    06-17

  • 我国首个网约车行业碳减排团体标准今日正式发布

    我国首个网约车行业碳减排团体标准今日正式发布

    创头条获悉,今日,中国认证认可协会发布公告,《私人小客车合乘出行项目温室气体减排量评估技术规范》(以下简称《规范》)正式发布释放。 可在《近期信息平台》《国家团体标准》中查询《规范》全部内容。 这标志着国内首个网约车行业碳减排团体标准今日正式推出私人乘用车

    06-18

  • 环球仪器在欧洲地区总部设立软件中心

    环球仪器在欧洲地区总部设立软件中心

    Global Instruments 在其欧洲地区总部设立了软件中心。 软件工程师团队为本地客户提供实时计算机程序开发服务。 环球仪器决心拓展欧洲、中东和非洲的业务,并在中欧斯洛伐克首都布拉迪斯拉发的地区总部设立了软件中心。 该中心于去年成立,主要为欧洲、中非地区的客户提供实时

    06-06

  • 26元能打5000个骚扰电话吗?为什么短信、电话骚扰次数如此之多?

    26元能打5000个骚扰电话吗?为什么短信、电话骚扰次数如此之多?

    自从微信等社交工具出现后,大多数人短信和电话的使用率变得更低。 几乎所有事情都可以在社交应用上解决。 然而,短信并没有退出历史舞台。 毕竟这是一种门槛较低的通知方式。 政务信息等重要内容通知一般采用短信的形式,保证每个人都得到通知。 但除了政府信息之外,手机上

    06-21

  • 滴滴与软银向合资公司滴滴日本增资52亿日元

    滴滴与软银向合资公司滴滴日本增资52亿日元

    投资圈(微信ID:pedaily)消息,滴滴出行与软银向合资公司滴滴日本增资52亿日元(约合人民币3.2亿元) 。 滴滴日本是滴滴出行与软银于2019年6月成立的合资公司,旨在为日本市场提供创新出行服务。 自今年9月在大阪上线以来,滴滴出行稳步推进在日本的业务和网络布局。 它与1

    06-18

  • 从PPT到Keynote,就这5步

    从PPT到Keynote,就这5步

    PPT很棒,但我选择Keynote。 每次分享 PowerPoint 使用技巧时,您总会在评论部分看到这句话。 既然大家都说了,我正好有一台Mac,而且iWork套件是免费软件。 如果您无法击败它,请加入并从 PowerPoint 切换到 Keynote。 这不是很好吗?虽然都是演示幻灯片制作软件,但是操作上

    06-21

  • 美团外卖:5月1日至5月3日,北京订单量同比增长超30%

    美团外卖:5月1日至5月3日,北京订单量同比增长超30%

    5月4日消息,据美团外卖数据显示,5月1日至5月3日,北京餐饮订单量同比增长30%以上< titlesplit >外卖订单量较去年同期增长30%以上,全市外卖订单量环比增长40%以上。

    06-17

  • 富士胶片计划投资900亿日元继续增产半导体材料

    富士胶片计划投资900亿日元继续增产半导体材料

    IT之家 6月10日,据《日本经济新闻》报道,日本富士胶片控股计划增加半导体材料产量,强化台湾工厂生产设备、中国和美国。 为增加半导体基板磨具等产能,计划两年内(截至今年3月)投资1亿日元(约45亿元人民币),投资规模约为两倍过去两年的情况。 增产项目主要包括用于研

    06-06