文章
· 十月 26, 2022 阅读大约需 3 分钟

运行池大小配置的解读

“池大小”(PoolSize)设置的值决定了一个组件的作业的量和启动方式。在这篇文章中我们将具体讨论对于不同类型的组件来说“池大小”设置的可能值和这些值所代表的含义。

Pool Size = 1

对于所有的组件来说,运行池大小为1的含义都是一样的: 该组件有且只有一个作业,单独运行该组件的代码,顺序处理发送到该组件的消息(FIFO)。

Pool Size > 1

对于业务进程(BP)和业务操作(BO)来说,当运行池大小大于1时,该组件将运行多个作业(作业数=运行池大小设置数)。每个作业都只运行该组件的代码,但消息处理的顺序将被打乱。将运行池的大小设为大于1的值可以在一定程度上提升组件处理消息的性能,但是每个作业的性能还是受限于系统资源的,所以并不是说组件的性能可以随着运行池的大小增加而无限提升。

对于轮询类业务服务(Polling BS)来说,当运行池大小大于1时,该服务也将运行多个作业(作业数=运行池大小设置数)。但这种配置会导致多个进程对轮询结果产生竞争(race condition),所以一般情况下轮询服务不应将运行池大小设为大于1的数值。

对于作为服务器端接收外来网络连接的业务服务(TCP、HTTP、REST、SOAP等)来说,当运行池大小大于1时,运行的作业数将取决于“为每个连接创建作业(Job Per Connection)”设置的值。如果此设置为1,则每一个新的连接进来的时候,服务将创建一个单独的作业接收这个连接发来的消息,最多可以同时处理的并发连接数为运行池的大小(如运行池大小设为5,则该服务最多可以同时处理5个并发的连接。如此时客户端有10个并发的连接,则有5个可以接进来,剩下5个将在操作系统层面等待,直到前五个连接中有连接断开并退出)。

Pool Size = 0

对于业务进程(BP)、业务操作(BO)和使用适配器(adapter)的业务服务(BS)来说,当运行池大小等于0时,该组件将使用production公有池的作业进行消息处理。多个运行池大小为0的组件将共用公有池的作业。这种配置对消息处理的性能有显著影响,一般情况下不推荐使用。

对于作为服务器端通过web服务器接收外来网络连接的业务服务(REST、SOAP等)来说,当运行池大小等于0时,该组件将不限制能够同时通过web服务器接入的连接数。一般情况下此类业务服务的运行池大小推荐值为0,因为通常情况下会有十数至数十个并发连接同时接入REST或SOAP对外发布的端点。但也存在特殊情况下,客户端并发的连接数过多(成千上万)导致系统资源耗尽的问题。如果遇到这种特殊情况则需要排查这些连接是否来自可信任的客户端,以及连接数目是否正常,来确定具体的解决方案。

讨论 (1)2
登录或注册以继续