本节讲述了APIGateway中线程池相关的配置,通过本节你将了解到以下内容:

  1. APIGateway ESBServer中都有哪些线程池,它们处于什么位置;
  2. 如何配置线程池的参数,各项参数的含义是什么;
  3. 运行时,线程池参数调优有哪些指导原则;

# 线程池在APIGateway ESBServer中的作用

线程池配置是Primeton APIGateway性能调优的核心配置之一。一般而言,请求消息依次经过代理服务、中介服务、业务服务,响应消息以相反顺序依次返回,消息处理过程如下所示:

worddav6c530a2a2dc401f2c3ceb0a91059e05b.png
为提升APIGateway消息处理能力,在消息接收处配置了线程池机制,如上图中所示。根据消息的流向,线程池分为了请求线程池和响应线程池,如下:

  • 代理服务配有响应线程池
  • 中介服务配有请求、响应线程池
  • 业务服务配有请求线程池

# 线程池配置信息

线程池配置界面(以响应线程池为例)如下所示:

worddav18a53db8ad98f81dac2fa6c25788d666.png

  • 支持本地、全局线程池配置

    :勾选上图中的"采用全局配置"复选框,即为采用全局线程池,否则为本地线程池:

    • 本地线程池:为代理服务、业务服务及中介服务设置的独享线程池。本地线程池配置支持热更新;
    • 全局线程池:APIGateway ESBServer的共享线程池。全局线程池配置支持热更新;
  • 最大线程数:线程池中线程数的最大值。

  • 核心线程数:线程池中线程数的最小值。

  • 队列容量:线程池中工作队列的容量值。

  • 存活时间:如果池中有多于核心线程数的线程,这些线程在空闲时间超过存活时间时将会被销毁。

  • 拒绝策略

    :当线程池工作队列已满并且线程数达到最大值时,新请求到来时,将执行拒绝策略。支持ABORT、CALLER_RUNS、DISCARD、DISCARD_OLDEST四种拒绝策略:

    • ABORT:新请求被拒绝,并抛出RejectedExecutionException异常。
    • CALLER_RUNS:由新请求所在的线程直接处理请求,如果新请求所在的执行线程已关闭,则丢弃该请求。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度。
    • DISCARD:直接丢弃被拒绝的请求。
    • DISCARD_OLDEST:如果新请求所在的执行线程尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)。

线程池配置信息的填写规则如下:

属性名称 填写规则
采用全局配置 选中或不选中
最大线程数 范围从1到100,支持设置int型的变量或常量
核心线程数 范围从1到100,支持设置int型的变量或常量
队列容量 范围从1到1500,支持设置int型的变量或常量
存活时间 范围从0到120,支持设置int型的变量或常量
拒绝策略 ABORT、 CALLER_RUNS、DISCARD、DISCARD_OLDEST

# 调优最佳实践

  1. 一般情况下,建议设置为本地线程池;
  2. 如果系统中运行的业务逻辑较多(多个Module),建议本地线程池中核心线程数设置不要过大,一般小于10即可。