我们知道如果多个客户端请求ES服务器会导致ES线程池满,那么新请求将被放入队列中。我想知道架构是Request->ES Server(Queue->Thread)
还是Request->ES Server(Thread->Queue)
。
换句话说,请求将首先放在ES队列中,然后ES线程选择它进行操作或ES线程直接接受请求并操作,而线程池已满,然后将新请求放入队列。
或者说是队列后面的队列后面的队列。
答案 0 :(得分:1)
好吧就是这样。 Elasticsearch每个模块都有一个线程池队列架构。 这里的模块可以是搜索,批量,索引或任何类型的。 现在假设线程池大小为4,队列大小为20。 当请求到来时,如果线程池中有一个空闲线程,他就会开始工作。 如果线程池中没有feed线程,则工作将在队列中排队。 每当一个线程获得自由时,他就会回来并接受该任务。 现在,如果队列已满,则使用503 HTTP代码拒绝该任务。