My company has built a very scalable knowledge management solution that is currently running on Apple.com's support site. We see very large traffic numbers on a regular basis (>20M page view daily).
There are a number of approaches you can take to improve your overall scalability: - We utilize a lot of small instances with a load balancer in front. We deploy as a Servlet instead of using the WOtaskd stuff. I have seen performance issues when trying to use the mod_jk approach. A simple load balancer that respects sticky sessions works just fine. Hardware load balancers tend to be more sophisticated in terms of their load balancing schemes
- Use a content caching service like Akamai to fetch once from your web app and then cache the results for a longer period of time. Most of our app is write once read many times.
- Try to avoid caching data that is tied to a session - i.e. user preferences, you will run out of memory. Instead cache the data that is shared across sessions - i.e. like a document
- Minimize the use of the undo stack in your EOF configuration - most of the time you don't need an undo stack in a web based application. Avoid using session based EOEditingContexts - create one when you need it and make sure to clean up after you are done with it
- Use as many stateless WOComponents as possible. Minimize your memory footprint as much as possible
- Ensure that your sessions can be fully serialized - this will allow you to take advantage of your servlet engine's clustering capabilities
- If you absolutely must have a stageful service and you need to have fail over capability, consider using a DB based session store. It is slower than the default memory one, but allows you to have greater flexibility in load balancing and deployment architectures
- Be careful of your EOF relationships. EOF is great for transactional interactions, but it can cause big performance issues if someone inadvertantly does something stupid like fetching all records on a large table while trying to access a key path. You need to make sure to run your app in SQL debug mode under various use cases to make sure your fetches are correct and efficient. Otherwise your house of cards will collapse under load
- Break your app into smaller services instead of having monolithic applications. This provides better flexibility in scaling the pieces that are under heavier load
WO apps can handle very heavy traffic volumes if they are architected correctly even without multiple EOF stacks.
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
|