Hi Eric
Server C (Linux, 4 cores, 4GB RAM)
WSO2 ESB 1.5
Your test scenario is good, however I must make some comments as you are running the ESB on a 4 core 4GB machine on Linux, where you should expect better performance. Some of the reasons for this would be the following:

1. Use of Keepalive connections and HTTP 1.1 (chunked encoding)

Unless you use keepalives, the OS may need to establish a TCP connection for each outgoing message which could be costly. Also note that since the ESB site in the middle, this means that two TCP connections are established between the client and the ESB and the ESB and the backend service for each message. Also, unless you use a client that supports HTTP 1.1 (chunked encoding), content cannot be written to the sockets unless the complete size of the payload is known (i.e. Content-Length) - this may require the buffering of the complete message in memory and the subsequent calculation of the size which may prove to be expensive

2. OS level tuning of TCP and heap memory for the process
Unless you tune your file handles, and TCP sockets available to your OS, you are not using your ESB to its full capacity.

/etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 30
fs.file-max = 2097152
/etc/security/limits.conf
* soft nofile 4096
* hard nofile 65535

At a minimum, you should increase the file limits and the port range as shown above, and also if you are using large messages with a high number of clients concurrently - increase the heap memory allocated for the ESB process - via the shell script or the wrapper.conf. The default memory used by the ESB would be just 128MB even on a 4GB machine. Note that when you use a JDK 1.5.x (preferably 1.5.0_13) on a server grade machine, you do not require any other JVM tuning! (Yeah, the JVM's these days are really that good!)
>From my point of view this looks not to bad. I'm quite happy with this
numbers. The overhead increases with the number of concurrency. Also the
CPU load on the ESB rises. So of course we need to cluster the ESB and
balance the load between different instances. Is there any support so
far?
Sure, your config above is stateless and you can run multiple instances of the ESB using the same configuration. The configuration may be stored on a SVN for example (i.e. to support versioning, and moving config from dev->qa->staging->production etc) and loaded locally at each node (for best fault tolarance) or shared off a common file system or Registry. You could then place a hardware load balancer in front or use simple DNS round robin load balancing etc
Another requirement regards traceability of requests. I really like the
tracing infos of WSO2. I guess they are designed to locate configuration
problems. Using the INFO-Level I receive a lot of useful information, of course
more than I need. So tracing might be the wrong approach here.
Of course, writing any kind of trace information, logs etc has a cost and you should NOT use these during performance testing. You are correct on the tracing facility that its targetted to help resolve development time integration issues
 What I really would like to have are the following infos:

Incoming request:
Timestamp, Source-IP, unique requestID (based on selected custom header
information)

Outgoing request:
Timestamp, Destination-IP, unique requestID (based on selected custom
header information)

This information should go to a database asynchronously. Entries could
be grouped using the requested.

Any ideas how to achieve this without notably performance degradation?
You may use the DBReport mediator - but this is blocking - i.e. will block the call until the DB transaction commits. You are also able to use a custom mediator that logs to a in-memory (i.e. non-persisted) JMS destination, where a number of MDB's read from these and writes to the DB asynchronously - we have done this exact same scenario for another customer of ours a few months back.
All measuring was taken without any TCP/IP-Stack optimization. I
basically did it to see how much "overhead" an ESB will introduce.
You should also compare how better the ESB would perform with some slight tuning, and I am sure you will appreciate the results :-)

I am delighted to hear about these tests and would be really happy to help you on any issues or questions you have on this
asankha

_______________________________________________
Esb-java-user mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/esb-java-user

Reply via email to