V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ThanksSirAlex
V2EX  ›  程序员

滴滴这样的实时位置推送是怎么实现的

  •  
  •   ThanksSirAlex · 2020-11-02 02:30:55 +08:00 via iPhone · 5510 次点击
    这是一个创建于 1486 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想要了解一下,有没有什么开源的解决方案可以参考一下的。

    32 条回复    2020-12-22 19:40:12 +08:00
    DoctorCat
        1
    DoctorCat  
       2020-11-02 03:27:41 +08:00   ❤️ 2
    这个问题太大了,因为涉及到很多架构设计细节。我想核心系统大体上可以拆解为:
    1. LBS 服务架构实现
    2. 消息推送服务架构实现

    Uber 早期的架构是基于 MongoDB 做位置日志存储,通过一套 nodejs 自研的消息总线分发到移动端推送系统
    参考《 Distributed Web Architectures: Curtis Chambers, Uber 》
    user8341
        2
    user8341  
       2020-11-02 06:06:23 +08:00
    opengps
        3
    opengps  
       2020-11-02 07:50:00 +08:00 via Android
    网页版用轮训即可,app 可以用 socket
    k9982874
        4
    k9982874  
       2020-11-02 08:27:26 +08:00 via iPhone
    服务器分区即可,位置服务器放在当地城市,其实要处理的推送没多少,毕竟在路上跑的车也就那么几辆。
    zocome
        5
    zocome  
       2020-11-02 08:41:17 +08:00
    @k9982874 #4 没多少?就那么几辆?认真的?
    k9982874
        6
    k9982874  
       2020-11-02 08:59:33 +08:00
    @zocome #5 认真的 就算一个城市有 100 万辆滴滴在路上跑,通过合理规划也能覆盖、处理。所以杠精你好,杠精👋🏻
    totoro52
        7
    totoro52  
       2020-11-02 09:06:10 +08:00
    @k9982874 兄弟有点偏激了
    CEBBCAT
        8
    CEBBCAT  
       2020-11-02 09:25:16 +08:00 via Android
    不好意思啊,歪下楼

    https://www.zdic.net/hans/偏激

    偏激 piānjī

    [extreme] 思想、主张、言论等过火,有失平允

    偏激 piān jī ㄆㄧㄢ ㄐㄧ
    意见、主张、行为等方面过于极端。
    如:「他对任何事物都存有偏激的看法。」
    近过火
    k9982874
        9
    k9982874  
       2020-11-02 10:13:41 +08:00
    @totoro52 #6 嗯 我压根就不应该打理他
    rapperx2
        10
    rapperx2  
       2020-11-02 10:17:00 +08:00
    @k9982874 求大佬解答怎么 合理规划
    atonku
        11
    atonku  
       2020-11-02 10:19:12 +08:00
    @rapperx2 合理规划,就是多掏钱
    l0wkey
        12
    l0wkey  
       2020-11-02 10:19:45 +08:00 via iPhone
    MQTT 了解一下
    zocome
        13
    zocome  
       2020-11-02 10:26:27 +08:00
    @k9982874 #6 非杠,真心请教如何实现,想学习下这方面知识
    zocome
        14
    zocome  
       2020-11-02 10:34:32 +08:00
    @k9982874 #6 不知道大佬你说的没多少数量是指多少?我个人的理解,这种情况下超过 10000 辆车在线以及乘客、司机超过 20000 个设备在线推送设备就不能说没多少了,就我自己接触的来说,超过 10000 并发的现实中基本上没见过几家,不知道你说的 100 万辆车这种情况下是怎么做到你说的没多少推送?

    假设你说的 100 万辆车同时在路上跑,司机和乘客这样就 200 万推送了吧?还不包括别的比如说行程共享这种额外的情况?这种情况我想学习下怎么处理,希望大佬方便的话能详细说说
    lsylsy2
        15
    lsylsy2  
       2020-11-02 10:35:59 +08:00
    @rapperx2
    @zocome
    一对一的话给车随机分个 id 然后负载均衡完事
    如果是打车之前“显示当前区域车”的界面的话可以是假的实时,然后灯塔算法完事
    ThanksSirAlex
        16
    ThanksSirAlex  
    OP
       2020-11-02 10:37:19 +08:00
    @DoctorCat 有个问题,既然是实时位置,那么不是应该只需要存储当前的位置即可?不用存下历史位置?
    rebounce
        17
    rebounce  
       2020-11-02 10:49:19 +08:00
    @DoctorCat 我查了下是 2011 年的 topic 了。
    DoctorCat
        18
    DoctorCat  
       2020-11-02 12:57:40 +08:00
    @ThanksSirAlex 我的理解是产品需求需要在移动端的实时 map 组件中显示真实路径,所以 GPS 位置这种时序数据肯定是要存的
    DoctorCat
        19
    DoctorCat  
       2020-11-02 12:58:10 +08:00
    @rebounce 对,所以说 Uber 的早期嘛
    kop1989
        20
    kop1989  
       2020-11-02 13:12:21 +08:00
    据我观察,滴滴这种 app,地理位置推送的压力并没有很多人现象中的大(或者说是采样密度并没那么高)。
    1 、gps 是有速度信息的。
    2 、用户手机里的小车动画明显是根据上一个采集+速度推算出来的。
    hanbing135
        21
    hanbing135  
       2020-11-02 13:47:30 +08:00 via Android
    哪有实时位置 感觉都是滴滴自己算法画上去的 遇到好多次车的轨迹跟车的实际位置不一致了 感觉就是过段时间采集一下真实位置 其它时间都是算法瞎算的
    garlics
        22
    garlics  
       2020-11-02 13:54:32 +08:00
    突然想到这张图<img src="https://s1.ax1x.com/2020/11/02/BBbHlF.gif" />
    takemeaway
        23
    takemeaway  
       2020-11-02 14:19:27 +08:00
    笑死,一群没有实践过的人在这里高谈阔论。
    1 楼猜的对了点。 实际上实时位置推送就是 GPS+消息推送,做过位置监控的都知道。
    之前我们就做过间谍软件,一种是在车上放带电池的物联网设备,可监控车辆位置,一种是间谍 APP,后台监听,手机位置实时查看。
    滴滴的难点在于信息多,还有路径规划麻烦。
    你自己使用不需要什么解决方案,直接获取 GPS 信息,socket 推到服务器就行了。服务器再实时推给需要展示的用户。
    kop1989
        24
    kop1989  
       2020-11-02 14:21:19 +08:00
    @takemeaway #23 哟,这个号放出来了?
    takemeaway
        25
    takemeaway  
       2020-11-02 14:23:57 +08:00
    @kop1989 不好意思,我只是忙一段时间没上而已。 你这水平不用瞎回答了
    kop1989
        26
    kop1989  
       2020-11-02 14:28:32 +08:00   ❤️ 2
    @takemeaway #25 非要拿出实锤么😂
    MinQ
        27
    MinQ  
       2020-11-02 14:48:49 +08:00
    我总觉得难道不应该是手机定时上报位置,推送到服务器,服务器存储到 Redis 吗
    美团 16 年存储快递员位置的方案
    https://www.slideshare.net/meituan/12lbs
    ThanksSirAlex
        28
    ThanksSirAlex  
    OP
       2020-11-02 15:37:42 +08:00
    @MinQ 用户侧的客户端轮训拉取位置吗
    MinQ
        29
    MinQ  
       2020-11-02 15:39:50 +08:00
    @ThanksSirAlex 对啊,用户的 app 轮询上传位置就好了
    MinQ
        30
    MinQ  
       2020-11-02 15:40:23 +08:00
    @ThanksSirAlex 司机的 app 也是用户 app 啊
    vcode
        31
    vcode  
       2020-11-05 14:07:58 +08:00
    算法画的轨迹,不信你去问滴滴
    TypeError
        32
    TypeError  
       2020-12-22 19:40:12 +08:00
    https://eng.uber.com/real-time-push-platform/
    巧了,刚看到 uber 的文章
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1831 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:31 · PVG 00:31 · LAX 08:31 · JFK 11:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.