面试题答案
一键面试资源隔离避免任务干扰
- 线程池类型隔离:ElasticSearch 将不同类型的任务分配到不同的线程池,如索引线程池、搜索线程池、管理线程池等。每个线程池有独立的线程队列和线程资源,这就从根本上隔离了不同类型任务,避免某类任务大量占用资源而影响其他任务。例如,索引任务不会因搜索任务突然增多而无法执行,因为它们在不同线程池中运行。
- 队列资源隔离:不同线程池各自拥有独立的任务队列。当一个线程池的任务队列满时,不会影响其他线程池的任务接收和处理。比如,索引线程池的队列满了,搜索线程池依然可以正常接收搜索任务并处理。
复杂场景下的调度策略保证高效执行
- 优先队列调度:ElasticSearch 对某些任务设置优先级,高优先级任务优先执行。例如,集群状态更新等管理类任务优先级较高,能优先从队列中取出执行,保证集群管理的及时性。
- 公平调度:在某些情况下采用公平调度策略,确保每个任务类型都有机会执行,避免某一类任务长期占据资源,使其他任务饿死。例如,在搜索和索引任务混合的场景下,公平调度可让搜索和索引任务按一定比例分配执行时间。
高负载下动态调整策略
- 动态线程池大小调整:ElasticSearch 可以根据系统负载动态调整线程池的大小。当负载升高,任务队列积压时,会增加线程池中的线程数量,以提高任务处理能力;当负载降低,会适当减少线程数量,避免资源浪费。例如,在业务高峰时段,索引线程池的线程数会自动增加。
- 自适应任务队列管理:在高负载时,会根据任务类型和队列状态,动态调整任务在队列中的等待时间和处理顺序。例如,如果搜索任务队列积压严重,且索引任务相对较少,会适当调整策略,优先处理部分搜索任务,同时保证索引任务的基本执行。