为什么需要支持优先级#
- 关键消息的优先处理:比如交易通知、系统告警等,要求在秒级时间内送达,又比如用户更关心紧急消息,优先处理能显著提升满意度。
- 避免低优消息堵住通道:平台资源有限,通过优先级调度,避免低优先级任务占用过多资源,在高峰期,保证高优先级消息能通畅,降低对整体服务的影响。
- 提升大客户体验感:比如一个业务90%的营收都由几个大客户支撑,那么为他们提供优先推送,保证他们的体验感,对业务而言就是必要的。
如何实现优先级#
第一种,队列级别划分
也就是为不同的消息类型分配优先级(例如高、中、低),比如重要消息,就投递到高优队列,注意重要消息一定是比较少的,不然都丢入高优队列,就等于都不重要了。
消费消息时,低优队列和高优队列有专门的调度资源,就好像经济舱和头等舱,各自有不同的服务团队,各自提供独立机厢的服务。当然,也可以按时间调度,在一定时间内,按比例调度各级队列。例如:高优先级 = 70%,中优先级 = 20%,低优先级 = 10%。
第二种,放入有序的存储
比如堆、有序链表这种有序数据结构,当然在分布式时代,一般我们存储都是组件式的,比如我们很多时候将数据存入MySQL,而MySQL的索引,底层是B+树结构,实际是有顺序的,可以设计按优先级排序,按优先级拉取即可。
Reply by Email