楼主的本科生,接到老师派的一个任务,用 golang 写一个分布式的后端。之前从来没接触过类似的开发任务,感觉有些棘手,想问 v 友们一个问题:
目前主要任务是给外卖员派单,那就需要从数据库里面取出来外卖员的数据,然后再从数据库里面取出来订单的数据,根据这些数据来给外卖员派单。开始的想法是把这些数据都加载到内存中遍历,但在数据量大的时候显然行不通。问老师,老师说可以用一个 active list ,要有一个 buffer ,但也是挺笼统的,不知所云。想问问 v 友有没有啥好的解决办法
@Chinsung #5 如果是主动派单,可以写一个生产者和消费者模型,具体的分配可以使用根据订单 ID 的做 Key%服务 id 来决定哪个服务处理哪些订单,再复杂点就搞个类似一致性 hash 的模式,或者节点通知直接全量重新计算自己需要派单的路由 id 。消费者消费到某个派单的时候,就直接循环去找符合条件的外卖员根据优先级派单
说的确实有问题[捂脸]。这个项目其实是一个对外卖送单的模拟,并不是真正上线的一个系统,也没有做用户端(包括外卖员和点餐的用户),所有的订单都是自动生成的。整个项目的思路就是前端发送订单请求,请求中包含点餐的用户的地址,然后系统接到订单之后,从数据库中 available 的外卖员中选出来距离用户最近的外卖员,然后把这个订单派给他,再修改订单和外卖员的状态。因为要计算所有 available 的外卖员与订单对应的用户之间的距离,所以有些不知所措 QAQ ,就来问 v 友有没有什么好的办法