欢笑性能基准
Mirth performance benchmark
我们正在使用 mirth connect 将消息从 hl7 转换为文本并将转换后的消息存储到 azure sql 数据库。我们目前的表现是每小时 45000 条消息。
机器配置为
8 GB RAM 和 2 核 CPU。分配给 mirth 的内存是 -XMS = 6122MB
对于上述配置的 Mirth 的性能参数,我们一无所知。有人知道 Mirth connect 的性能基准吗?
我们正在使用 AWS EC2 4c.4xlarge 实例来测试基本的概念证明性能限制。我们得到了大约 50 msgs/sec,在 cpu/memory/network/disk io/db io 等方面没有明显的瓶颈。想要将限制推得更高。请分享您的观察结果(如果有)。
我建议查看 3.4 及更高版本中的最大处理线程选项。它可以在源设置(源选项卡)中配置。默认情况下它设置为 1,这意味着在任何给定时间只有 one 消息可以通过通道的主处理线程处理。这对于消息顺序至关重要的某些接口很重要,但显然它限制了吞吐量。
请注意,无论客户端发送您的频道消息还需要重新配置以并行发送多条消息。例如,如果您有一个单线程进程通过 TCP/MLLP 一个接一个地发送您的频道消息,增加最大处理线程数不一定会有帮助,因为客户端仍然是单线程的。但是,例如,如果您支持 10 个客户端同时向您的频道发送消息,那么您肯定会从增加最大处理线程数中获益。
如果您的源连接器是轮询类型,例如文件 Reader,您仍然可以通过打开源队列并增加最大处理线程数来从中受益。当启用源队列并且您有多个处理线程时,将启动多个队列使用者并同时从源队列读取和处理。
另一件需要注意的事情是目的地排队。在高级(扳手图标)队列设置中,有一个类似的选项可以增加目标队列线程的数量。默认情况下,当您启用目标队列时,只有一个队列线程以 FIFO 顺序处理消息。同样,有利于消息顺序,但会影响吞吐量。
如果您需要对消息进行排序并且想要最大化并行吞吐量(也就是吃蛋糕也吃),您可以将线程分配变量与多个目标队列线程结合使用。这允许您保留具有相同唯一标识符的消息之间的顺序,而属于不同标识符的消息可以同时处理。一个常见的用例是为此使用患者 MRN,这样可以保证给定患者的所有消息都按照收到的顺序进行处理,但不同患者的纵向消息可以同时处理。
我们运行相同的过程。 Mirth -> Azure SQL 数据库。我们现在 运行 正在通过性能测试,一直停留在 12 - 15 messages/second(每小时 43000 - 54000)。
我们对每个频道进行了 运行 测试并发现:
1 个通道来源:文件 reader -> 目的地:Azure SQL DB 约为每小时 36k
2 通道来源:文件 reader -> 目的地:Azure SQL DB 约为每小时 59k
3 通道来源:文件 reader -> 目的地:Azure SQL DB 约为每小时 80k
我们已将多线程 (2,4,8) 添加到 1 个通道上的源和目标,但性能没有提高。 Mirth 运行在 8GB 内存和 2 个内核上运行,堆大小设置为 2048MB。
我们现在要 运行 通过一些测试 运行ning 在类似于 "hardware" 的 C4.4xlarge 上进行一些测试,在 Azure 中它有 16 个内核和 32GB 内存。还有 200gb 的 SSD 可用。
我们的目标是每个频道每小时 10 万条消息。
我们正在使用 mirth connect 将消息从 hl7 转换为文本并将转换后的消息存储到 azure sql 数据库。我们目前的表现是每小时 45000 条消息。
机器配置为 8 GB RAM 和 2 核 CPU。分配给 mirth 的内存是 -XMS = 6122MB
对于上述配置的 Mirth 的性能参数,我们一无所知。有人知道 Mirth connect 的性能基准吗?
我们正在使用 AWS EC2 4c.4xlarge 实例来测试基本的概念证明性能限制。我们得到了大约 50 msgs/sec,在 cpu/memory/network/disk io/db io 等方面没有明显的瓶颈。想要将限制推得更高。请分享您的观察结果(如果有)。
我建议查看 3.4 及更高版本中的最大处理线程选项。它可以在源设置(源选项卡)中配置。默认情况下它设置为 1,这意味着在任何给定时间只有 one 消息可以通过通道的主处理线程处理。这对于消息顺序至关重要的某些接口很重要,但显然它限制了吞吐量。
请注意,无论客户端发送您的频道消息还需要重新配置以并行发送多条消息。例如,如果您有一个单线程进程通过 TCP/MLLP 一个接一个地发送您的频道消息,增加最大处理线程数不一定会有帮助,因为客户端仍然是单线程的。但是,例如,如果您支持 10 个客户端同时向您的频道发送消息,那么您肯定会从增加最大处理线程数中获益。
如果您的源连接器是轮询类型,例如文件 Reader,您仍然可以通过打开源队列并增加最大处理线程数来从中受益。当启用源队列并且您有多个处理线程时,将启动多个队列使用者并同时从源队列读取和处理。
另一件需要注意的事情是目的地排队。在高级(扳手图标)队列设置中,有一个类似的选项可以增加目标队列线程的数量。默认情况下,当您启用目标队列时,只有一个队列线程以 FIFO 顺序处理消息。同样,有利于消息顺序,但会影响吞吐量。
如果您需要对消息进行排序并且想要最大化并行吞吐量(也就是吃蛋糕也吃),您可以将线程分配变量与多个目标队列线程结合使用。这允许您保留具有相同唯一标识符的消息之间的顺序,而属于不同标识符的消息可以同时处理。一个常见的用例是为此使用患者 MRN,这样可以保证给定患者的所有消息都按照收到的顺序进行处理,但不同患者的纵向消息可以同时处理。
我们运行相同的过程。 Mirth -> Azure SQL 数据库。我们现在 运行 正在通过性能测试,一直停留在 12 - 15 messages/second(每小时 43000 - 54000)。
我们对每个频道进行了 运行 测试并发现: 1 个通道来源:文件 reader -> 目的地:Azure SQL DB 约为每小时 36k 2 通道来源:文件 reader -> 目的地:Azure SQL DB 约为每小时 59k 3 通道来源:文件 reader -> 目的地:Azure SQL DB 约为每小时 80k
我们已将多线程 (2,4,8) 添加到 1 个通道上的源和目标,但性能没有提高。 Mirth 运行在 8GB 内存和 2 个内核上运行,堆大小设置为 2048MB。
我们现在要 运行 通过一些测试 运行ning 在类似于 "hardware" 的 C4.4xlarge 上进行一些测试,在 Azure 中它有 16 个内核和 32GB 内存。还有 200gb 的 SSD 可用。
我们的目标是每个频道每小时 10 万条消息。