如何设计一个网约车系统?
如何设计一个网约车系统?
月伴飞鱼网约车平台,核心功能是将乘客的叫车订单发送给附近的网约车司机。
司机接单后,到上车点接乘客并送往目的地,到达后,乘客支付订单。
整体架构
两个
APP
应用:
一个是给乘客的,用来叫车。
一个是给司机的,用来接单。
网关处理叫车请求的过程是:
网关首先调用订单微服务,为用户的叫车请求创建一个订单,订单微服务将订单记录到数据库中,并将订单状态设置为创建。
然后网关调用叫车微服务,叫车微服务将用户信息、出发地、目的地等数据封装成一个消息,发送到消息队列,等待系统为订单分配司机。
面向司机的:
司机需要不停将自己的位置信息发送给平台,同时,还需要随时接收来自平台的指令。
因此,不同于用户通过HTTP发送请求给平台,司机App需要通过TCP长连接和平台服务器保持通信。
前面已经写入到消息队列的乘客叫车订单信息,分单子系统作为消息消费者,从消息队列中获取并处理。
分单子系统首先将数据库中的订单状态修改为派单中,然后调用派单引擎进行派单。
派单引擎根据用户的上车出发地点,以及司机上传的地理位置信息进行匹配,选择最合适的司机进行派单。
派单消息通过一个专门的消息推送服务进行发送,消息推送服务利用TCP长连接服务器,将消息发送给匹配到的司机,同时分单子系统更新数据库订单状态为已派单。
长连接管理
TCP是长连接,一旦建立了连接,连接通道就需要长期保持,不管是司机App发送位置信息给服务器。
- 还是服务器推送派单信息给司机
App
,都需要使用这个特定的连接通道。也就是说,司机App和服务器的连接是特定的,司机
App
需要知道自己连接的服务器是哪一台。
- 而给司机App推送消息的时候,也需要知道要通过哪一台服务器才能完成推送。
司机端的
TCP
长连接需要进行专门管理,处理司机App和服务器的连接信息。