内容目录
一个排序这么难?
理论
后台领域中有一句话:没有什么是一个中间层解决不了的,如果有的话那就两个。
排序考虑因素:
- 优先级
- 等待时间
- 重试时间
- …
可以综合考虑为一个字段order = 优先级+等待时间+重试时间…
这样排序就可以只考虑一个因素,对于不同的排序因素可以给与分配不同的权重。
举例
以银行排队举例,一件事情有三个窗口1,2,3轮流去办理。(假设柜台只有这三个窗口)单任务多阶段。
-
如果只考虑优先级:如黑卡,金卡,银卡客户依次优先,那么当其中一个用户卡在某一个环节,后面优先级低于它的用户就不能办理,流程2出问题要去流程1再修改时,又会到最前面开始办理。(不合理)
-
现实是,当你1窗口的任务办理完毕,去2窗口就需要重新排队。按照此规则思考一下,单独考虑修改时间可以不可以,一次业务办理完毕更新你的修改时间,其实简单场景是满足需求的。
-
但是如果比较复杂呢?比如当我有重试间隔,我开始时,业务1失败信息未发生改变,此时修改时间未改变,当我重试间隔过去后,按照修改时间判断,此时我还是应该第一个去执行,而不是排在队伍,按照实际中的例子就是,业务1告诉你证件不齐,你回家取完回来,还会是第一个去办理,此时排队的人会怎么想?也不太合理。
所以,考虑到均衡性,容错性,使用一个中间层来代替这些因素,再给与其分配不同的权重是一个较为合理的一个方案。