You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Aleksander Slominski <as...@cs.indiana.edu> on 2002/03/01 03:13:51 UTC

Re: Latency Performance of AXIS vs. Apache SOAP

hi Dan,

thanks for your work on XML/SOAP performance and i look forward ot read your
article.

i am the author of SoapRMI/Java and wanted to add some comments. as of SoapRMI (now
called XSOAP) please mention in your article also that the updated version of XSOAP
1.3 will address some performance issues that we identified to improve: use of
optimized HTTP keep-alive and chunked encoding should greatly improve latency when
multiple method calls are considered.

as of DOM/SAX and recorded events stream: i believe that a mixed approach of
DOM/SAX/other is the best to SOAP processing however to be able to benefit most one
needs to use a progressive kind of DOM-like incremental XML tree that is built when
SOAP processor explicitly requests it (and only then).

for the optimal performance a direct access to XML stream should be allowed
(without any buffering or XML events recording) when the SOAP processor asks for
it.

moreover the SOAP processor should be able to replace parts of incrementally built
DOM-like XML tree with equivalent object representation. for example a deserialized
header can be put into SOAP envelope (represented as XML tree) and then the SOAP
envelope is passed to the next entity in pipeline.

that means that although in-memory representation is created when needed the impact
on memory usage is minimized as XML is replaced by deserialized object
representation and for well defined parts of SOAP envelope (like array or struct)
no XML DOM-like representation is ever created but XML is directly pulled/pushed by
XML parser (such as SAX2 or XPP2) into deserialized java objects.

i have implemented along those ideas an incremental XML DOM-like tree in XPP2 that
is called XmlPullNode and allows for incremental XML tree building and switching
between XML pull parsing or SAX2 parsing just for parts of tree. it works both
using my simple XML tokenizer and on top of Xerces2 XNI. for more details please
see:

    http://www.extreme.indiana.edu/xgws/xsoap/xpp/

thanks,

alek

ps. i have also done quite lot of thinking about push and pull XML parsing - if you
are interested in XML performance and parsing you may want to look at my technical
report 'Design of a Pull and Push Parser System for Streaming XML'
available at http://www.extreme.indiana.edu/xgws/index.html#papers


Dan Davis wrote:

> I've been doing some simple experiements that compare AXIS,
> Apache SOAP, and other implementations (SoapRMI).
>
> One test requests a single string (size 200, 400, and 800), and
> another an array of integers (array size 200, 400, and 800).
> There's no argument to the functions (not an echo test),
> because most real-world web-apps will send small requests
> most of the time.  All tests are performed on the same host to discount
> network delays.  I use all default serializers/deserializers and
> SOAP encoding.  The strings and arrays are pre-built on the server.
> Note this doesn't measure the throughput of the server,
> just the latency when the server is idle.  There's a warming
> period for class loading and stuff.
>
> I expected  to see that Axis has lower latency than
> Apache due to use of SAX, but I don't see that.  Axis is
> actually slower.
>
>                 getInt(200)     getInt(400)     getInt(800)
>
> SoapRMI         22.2 ms         24.4 ms         31.5 ms
> Apache SOAP     65.8 ms         117.3 ms        190.7 ms
> Apache Axis     79.7 ms         157.4 ms        238.8 ms
>
>                 getStr(200)     getStr(400)     getStr(800)
>
> SoapRMI         19.3 ms         19.6 ms         19.9 ms
> Apache SOAP     22.7 ms         24.2 ms         25.1 ms
> Apache Axis     20.9 ms         19.6 ms         20.6 ms
>
> I'm using all default serializers, deserializers.  The strings
> and arrays are pre-built and initialized on the server.  SOAP
> encoding.
>
> Do you have any suggestions for speeding up Axis with
> the current code-base?
>
> This is for an article that I'll post here once complete.