本节提供有关性能调整的一些背景信息。
消息传送应用程序的性能取决于该应用程序与 Message Queue 服务之间的交互。因此,要获得最佳性能,需要应用程序开发者和管理员的共同努力。
优化性能的过程从应用程序设计开始,一直持续到部署应用程序之后对消息服务的调整阶段。性能调整过程包括下列阶段:
定义应用程序的性能要求
设计应用程序时要考虑到影响性能的因素(特别是可靠性与性能之间的权衡)
建立性能衡量基线
调整或重新配置消息服务以优化性能
上述过程常常需要反复进行。在应用程序的部署过程中,Message Queue 管理员应该评估消息服务是否适用于应用程序的总体性能要求。如果基准测试程序测试符合这些要求,管理员就可以如本章所述调整系统。但是,如果基准检验测试不符合性能要求,则可能需要重新设计应用程序或者修改部署体系结构。
通常,性能是对消息服务将消息从生成方传送到使用方时的速度和效率的一种衡量。但是,根据您的需要,可能会有几个不同的性能方面对您特别重要。
系统所能支持的消息生成方、消息使用方或并发连接的数量。
每秒钟能通过消息传送系统抽取的消息数或消息字节数。
特定消息从消息生成方传送到消息使用方所需的时间。
消息服务的总体可用性,或者当负载较重或发生故障时性能的下降程度。
消息的传送效率,这是一种与使用的计算资源相关的消息吞吐量的衡量。
这些不同的性能方面通常是相辅相成的。如果消息吞吐量很高,则意味着消息在代理上作为后备队列累积的可能性就会变小,因此等待时间也应该较低(单条消息可以很快地传送)。但是,等待时间可能取决于许多因素:通信链接的速度、代理的处理速度和客户端的处理速度,以及其他许多方面。
在任何情况下,性能都有几个不同方面。哪些方面对您最重要?这通常取决于特定应用程序的要求。
基准测试是为消息传送应用程序创建测试套件,并针对此测试套件衡量消息吞吐量或其他性能方面的一种过程。
例如,您可以创建这样一个测试套件:一定数量的生成方客户端使用一定数量的连接、会话和消息生成方,将标准大小的持久性或非持久性消息按照某个特定速率发送至队列或主题(这完全取决于消息传送应用程序的设计)。同样,测试套件中还包括一定数量的使用方客户端,它们使用一定数量的连接、会话和特定类型的消息使用方(通过特定的确认模式来使用测试套件的物理目的地中的消息)。
使用标准的测试套件可以衡量消息的生成与使用之间所花的时间或者消息的平均吞吐速率,您还可以监视系统以观察连接线程使用情况、消息存储数据、消息流数据以及其他相关度量。这样就可以提高消息的生成速率、消息生成方的数量或者其他变量,直到性能受到负面影响为止。可能达到的最大吞吐量就是消息服务配置的基准。
使用此基准可以修改测试套件的某些特征。控制所有可能影响性能的因素时请小心(请参见影响性能的应用程序设计因素),您可以记录这些因素的更改如何影响基准。例如,您可以将连接数或消息大小增加五倍或十倍,并记录对性能产生的影响。
相反,您也可以将基于应用程序的因素保持不变,而以某种控制方式更改代理配置(例如,更改连接属性、线程池属性、JVM 内存限制、限制行为、基于文件与基于 JDBC 的持久性等),并记录这些更改如何影响性能。
当您需要通过调整消息服务来增加所部署的应用程序的性能时,这种应用程序基准检验可以提供非常有价值的信息。基准测试程序可用于更准确地预测所做的更改或一系列更改产生的影响。
通常,基准测试程序应该在受控制的测试环境下运行,并且运行足够长的时间,以使消息服务能够稳定。(性能在启动时会受到实时编译的负面影响,因为要将 Java 代码转换为机器代码。)
部署并运行消息传送应用程序后,建立基线使用模式是很重要的。您需要知道何时发生峰值需求,并且需要能够量化该需求。例如,需求通常会随最终用户的数量、活动级别、一天当中的时间,或者以上所有这些因素而发生波动。
要建立基线使用模式,您需要在一段较长的时间内监视消息服务,并查看如下数据:
连接数
在代理(或特定物理目的地)中存储的消息数
流入和流出代理(或特定物理目的地)的消息
活动使用方数
还可以使用度量数据中提供的平均值和峰值。
将这些基线度量数据与设计时的期望值进行比较是非常重要的。通过执行此操作,可以检查客户端代码是否运行正常:例如,检查连接是否未保持打开或者已使用的消息是否仍然保留在未确认状态。这些编码错误会消耗代理资源,并可能极大地影响性能。
基线使用模式有助于确定如何调整系统以优化性能。例如:
如果某个物理目的地的使用频率明显高于其他目的地,则可能需要对该物理目的地设置比其他目的地更高的内存限制,或者相应地调整限制行为。
如果需要的连接数明显大于允许的最大线程池大小,则可能需要增大线程池的大小,或者采用共享线程模型。
如果峰值消息流远远大于平均消息流,这可能影响您在内存不足时采取的限制行为。
通常,您对使用模式了解得越多,就能越好地将系统调整为这些模式,并计划将来的需要。