One of the MAJOR issues that I have noted with axis is the way it parses the
data. In a sense you data is parsed in 2 passes.
Originally what happens is Axis deserializes XML into MessageElement objects
constructing a DOM structure. At this time all of the SAX events are
recorded.
When that is done, you use the built DOM to navigate the envelope. Once you
have found the node containing the Data, you playback recoded SAX events
into type serializers to get the value of the node.

This isn't helping latency, and also likes to eat memory a bit.
I was looking into adding an option to serialize types as soon as you hit
nodes with registered types, and skip creation of child nodes.
It was working for the most part, but I was having some problems with
multiRef (href) elements.

There maybe some other way to optimize parse/serialization process, but I am
not sure at the moment what it would be. If you have any ideas I might be
able to try to make them work.

-Taras

> -----Original Message-----
> From: Berin Loritsch [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, February 28, 2002 7:42 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Latency Performance of AXIS vs. Apache SOAP
> 
> 
> 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.
> 
> Keep in mind that Axis has not reached the point of performance
> tuning yet.  While it is a worthy goal to be performant, it is
> the first priority to be correct.
> 
> There can be a large number of reasons for latencies.  Do keep
> in mind that SAX addresses scalability more than it addresses
> "quickness".  Sometimes the two go hand in hand.  This time, we
> are processing the request and responce in chuncks.  That allows
> Axis to process several requests at once--even if they work on
> large data sets.
> 
> Now, to address latencies, Axis does have a more complex pipeline.
> I am not familiar with SoapRMI or Apache SOAP internals, but I do
> know that Axis has a transport pipeline and a service pipeline. The
> Transport pipeline takes care of converting the incoming request to
> SAX, and any other associated tasks with the transport (like
> obtaining the client certificate).  Axis then processes the request
> and maps it to the service in question.  The service has its own
> pipeline--which can process SOAP Headers and modify the content coming
> in.  Then the service does its actual work.  Lastly, we reverse the
> process coming out.
> 
> All of these stages can introduce latencies.  Not to mention, using
> the stock serializers can introduce latencies if you are required
> to pass an entire structure to it.  It will naturally take longer
> to process returning a large String value via SOAP if we require
> the whole thing to be sent at once.
> 
> If the String serializer can accept chunks (which I suspect is what
> SoapRMI is doing) then the Serializer can start the SOAP response
> almost immediately.  The String serializer would be sending
> characters( char[], int begin, int length ) messages for each chunk
> it sends.
> 
> > 
> > 
> >             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.
> > 
> > 
> > 
> 
> 
> 
> -- 
> 
> "They that give up essential liberty to obtain a little 
> temporary safety
>   deserve neither liberty nor safety."
>                  - Benjamin Franklin
> 

Reply via email to