大量高并发作业调度、处理经验总结

  • 异步化:或者使用协程。原则是不要阻塞线程。
  • 区分优先级:不要让低优先级的作业阻碍高优先级的作业。可以设置一个比例,保证低优先级的作业,也有执行的机会,不会被高优先级的作业饿死。
  • 作业的投递者,可以设置超时时间,如果发现超时,那么直接abort,不再执行,避免作业堆积后性能崩溃。
  • 需要设计作业的批量处理机制。很多类似的作业,他们挨个处理和批量处理,性能相差非常大。例如一个读取版本号的作业,如果10000个节点都发来这个请求(作业),那么就对应10000个请求,如果挨个执行,那么可能需要对同样的流程执行10000遍(每次执行就是加锁、读版本号、解锁)。但是如果批量处理,那么可能只需要执行一次就可以拿到结果,把结果返回给10000个不同的节点就可以。这个对性能会有极大的提高。
  • 考虑对于读、写作业,区分不同的线程。
  • 考虑支持abort
  • 性能统计(方便定位出耗时的作业)
  • 高可靠作业的实现:考虑持久化作业,必须需要考虑恢复作业时的顺序。
  • 考虑设计互斥集(并发集):可以从作业层面控制哪些作业可以一起执行,哪些作业一定不可以一起执行。这块设计其实挺复杂的,不展开细说了。
  • 给作业关联一些label,类似k8s,这样可以方便做select,做统一的调度。

你可能感兴趣的:(大量高并发作业调度、处理经验总结)