算法 任务分配

rubychinatest · 2017年06月23日 · 最后由 robertyu 回复于 2017年06月27日 · 6751 次阅读

一个任务发布系统,发包方发布任务并指定有条件的用户来接单,符合特定条件的用户来参与任务。

场景:

  1. 某客户发布了 10 个任务,设置每个任务最多 5 个人参与(也就是每个任务最多有 5 个人在其接单列中显示),在高并发情况下,会存在用户抢任务情况。

  2. 假设某一时刻内系统有一万个任务发出,同时某一时刻有十万用户访问了自己的接单列表,怎样高效地确保系统能够按任务设定的额度去分配给用户。

涉及到 model 大致如下:

Task
   id name amont

TaskRule
   id task_id rule_value rule_name

User
   id  name sex level

UserTask
   user_id task_id

想请教下大家怎样去合理高效地设计任务分配。

先做估值函数,评估用户对当前任务对匹配程度,数值化。(不一定要非常准确,但是要快) 创建任务时就开始评估用户,不要等到任务发布再评估(如果你的任务不是一创建就马上发布的话) 任务分类,同类型的任务可以直接用已经评估好的用户(评估用户的条件有变时注意更改) 把一个任务可分配的用户想像成一个池子(大于 5 人),先访问的先出池子,出去 5 人后锁定任务

@alexneverpo 🙏指点,我理解的是如果每个任务都要创建池子,有可能在没有用户访问或者没达到人数的情况下,会导致这样的池子越来越多的问题。

rubychinatest 回复

postgresql 有 hash 类型,搭配 redis。

“符合特定条件”,这个条件具体是指什么呢?比如外卖这种,完全依赖的地理位置;可以用 elasticsearch 解决。

@robertyu 恩,特定条件也包括地理位置以及一些用户属性

rubychinatest 回复

不同的条件使用不同的策略解决就好

需要 登录 后方可回复, 如果你还没有账号请 注册新账号