分布式服务框架中的服务优先级调度

学个名词吧,SLA(Service Level Agreement)服务级别协议 ^^

系统资源有限时,为了保证高优先级的服务可以正常运行,保障服务SLA,需要降低一些非核心服务的调度频次,释放部分资源占用,保障系统的整体平稳运行

优先级调度的策略很多,对分布式框架而言,要能够支持发布时设置优先级策略,并在资源成为瓶颈时按照用户配置的优先级策略调度执行服务


常用的服务优先级策略:

1)基于线程调度器的优先级调度策略

  线程优先级被线程调度器用来判断何时运行在哪个线程上,由于线程获得的CPU调度时间是包括线程优先级在内的多个因素决定的,优先级高的线程就自然会获得更多的CPU调度时间,算法简单,开发量小

  有多个线程可以调用时,由线程调度器决定哪个线程将被执行,以及执行多少时间


2)基于优先级队列的优先级调度策略

Java优先级队列调度由JDK负责,由PriorityQueue的优先级调度算法本身觉得,与平台无关,具备跨平台和可移植性,但是 若一直有高优先级的消磁需要处理,会导致低优先级的消息一直堆积,得不到处理,就算后来得到机会也由于超时被废弃掉,所以并不太适合分布式框架


3)基于加权配置的优先级调度策略

分布式服务框架并不是只处理优先级较高的消息,而是按照一定比例优先调度优先级较高的服务,加权优先级队列由普通优先级队列组成,每个队列与服务优先级1:1对应,服务端接收到请求时根据消息对应的服务优先级投递到指定的优先级队列,非法和没有设置优先级属性的消息,会投递到默认的优先级队列,


4)基于服务迁入迁出的调度策略

  基于分布式框架的服务动态发现机制,通过服务治理Protal的服务迁入迁出界面,将低优先级较低的部分运行实例从服务注册中心迁出,也就是动态去注册,消费者动态去发现服务,将迁出的服务实例的地址信息从路由表中删除,后续消息不会路由到已迁出的服务实例上,这样被迁出的服务仍然能够正常的处理,只不过由于部署的实例较少,得到调度的机会降低了很多,释放的资源将被较高优先级的服务使用,通过资源的动态调配,实现服务的优先级调度,业务高峰期度过,从新将迁出的服务迁入,恢复正常,优先级调度结束


它对性能的影响最小,灵活度最高,但是需要人工迁入迁出来实现资源动态调配,对运维人员的经验积累和操作水平有很高的要求,自动化程度较低


注意一点:服务的优先级调度和流控不同,流控最终会拒绝消息,导致部分请求失败,优先级调度是在资源紧张时优先执行优先级较高的服务,在保障高优先级服务能够合理被调度的同时,也兼顾处理部分低优先级的消息,他们之间存在一定的比例关系,优先级调度本身并不拒绝消息,若在优先级调度的同时发生了流控,则由流控负责拒绝消息,但是,对于高优先级的管理类消息,eg 心跳消息,指令消息等不能被流控掉


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值