WSO2 esb UDP 到 TCP 转换 - 提高性能
WSO2 esb UDP to TCP conversion - Improve performance
我想将 UDP 流转换为 TCP/HTTP 并将其提供给 WSO2 CEP。因此,对于 UDP 到 HTTP 的转换,我使用了 WSO2 ESB。如我所见,使用 ESB 代理可以将大约 2000UDP 消息顺利转换为 HTTP。在那种情况下,ESB 占用了大约 2.2GB RAM。但我需要比这更高的性能(每秒大约 50,000 次转换)。
我的转换ESB代理如下。有什么办法可以达到上述性能吗? (我假设 ESB 在这里使用 HTTP NIO)。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="UDPProxy"
transports="udp"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
<payloadFactory media-type="xml">
<format>
<events xmlns="">
<event>
<metaData>
<http2>dddd</http2>
</metaData>
</event>
</events>
</format>
<args>
<arg value="eee"/>
</args>
</payloadFactory>
</inSequence>
<endpoint>
<address uri="http://127.0.0.1:9783/endpoints/http2">
<suspendOnFailure>
<errorCodes>-1</errorCodes>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<errorCodes>-1</errorCodes>
</markForSuspension>
</address>
<property name="OUT_ONLY" value="true"/>
<property name="messageType" value="application/xml" scope="axis2"/>
</endpoint>
</target>
<parameter name="transport.udp.port">9998</parameter>
<parameter name="transport.udp.contentType">text/plain</parameter>
<description/>
</proxy>
对于上述转换,我使用 ESB 可以实现的最大 TPS 约为每秒 3500。那就是 axis2_nhttp 配置。最好的解决方案是使用单独的 UDP 到 TCP/HTTP 程序,这样我们可以获得高吞吐量(不使用 ESB)。
无论如何,我需要这个对话,因为 CEP 不接受 UDP 消息。所以我认为最好的解决方案是使用提到的 'separate UDP to TCP/HTTP program' 为 CEP 编写一个 UDP 适配器(接收器)。在那种情况下,我每秒最多可以发送 100,000 条 udp 消息。
我想将 UDP 流转换为 TCP/HTTP 并将其提供给 WSO2 CEP。因此,对于 UDP 到 HTTP 的转换,我使用了 WSO2 ESB。如我所见,使用 ESB 代理可以将大约 2000UDP 消息顺利转换为 HTTP。在那种情况下,ESB 占用了大约 2.2GB RAM。但我需要比这更高的性能(每秒大约 50,000 次转换)。
我的转换ESB代理如下。有什么办法可以达到上述性能吗? (我假设 ESB 在这里使用 HTTP NIO)。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="UDPProxy"
transports="udp"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
<payloadFactory media-type="xml">
<format>
<events xmlns="">
<event>
<metaData>
<http2>dddd</http2>
</metaData>
</event>
</events>
</format>
<args>
<arg value="eee"/>
</args>
</payloadFactory>
</inSequence>
<endpoint>
<address uri="http://127.0.0.1:9783/endpoints/http2">
<suspendOnFailure>
<errorCodes>-1</errorCodes>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<errorCodes>-1</errorCodes>
</markForSuspension>
</address>
<property name="OUT_ONLY" value="true"/>
<property name="messageType" value="application/xml" scope="axis2"/>
</endpoint>
</target>
<parameter name="transport.udp.port">9998</parameter>
<parameter name="transport.udp.contentType">text/plain</parameter>
<description/>
</proxy>
对于上述转换,我使用 ESB 可以实现的最大 TPS 约为每秒 3500。那就是 axis2_nhttp 配置。最好的解决方案是使用单独的 UDP 到 TCP/HTTP 程序,这样我们可以获得高吞吐量(不使用 ESB)。
无论如何,我需要这个对话,因为 CEP 不接受 UDP 消息。所以我认为最好的解决方案是使用提到的 'separate UDP to TCP/HTTP program' 为 CEP 编写一个 UDP 适配器(接收器)。在那种情况下,我每秒最多可以发送 100,000 条 udp 消息。