[dokuwiki] Re: Experiences in Scalability

Tim Bayer <tim.bayer@xxxxxxxxx> wrote:
> Thanks for the quick reply, How would you recommend doing a scalability
> test? Is it as simple as loading a ton of namespaces with lots of documents,
> or is there a more accurate way to benchmark this?

We should probably be clear about what you mean by "scalability."  Are you 
asking how many pages DokuWiki can handle, how many users it can handle, or how 
many page requests per unit time it can handle?  I normally think of the latter 
as a measure of scalability.

The latter question is difficult to answer because there are so many factors: 
how many ports are available, how other servers are using resources, whether 
you're running PHP Accelerator, how Apache is configured, etc.  I know next to 
nothing about configuring outside resources for maximum scalability.

To run a scalability test for a given server configuration and box, I'd find a 
client tool that is designed specifically to do scalability tests, something 
that issues multiple requests to a remote server and dynamically determines the 
server's peak load.  I'll see if I can find one that would work for us.

In this case I'd just set up a dummy DokuWiki site having a single page of 
average page length and syntax complexity (whatever average is for your 
intended site).  I'd also isolate the server and client boxes on their own 
network to factor out other external requests, and shut down any cron jobs that 
might run during the test.  The client box should have more ports available to 
it than the server box, and be of comparable speed to the server box, in order 
to help eliminate the client as the limiting factor.  I'd then run the 
scalability test on the client box, hitting just that one server page over and 
over.

This simulates a server that receives far more requests to read pages than to 
update them, and one whose most frequently accessed pages manage to remain 
cached by the OS (or at least their source files remain so cached).  Here's the 
information we'd like to see the client program produce:

- Average page load time as a function of requests per unit time.
- Maximum steady state page load time (above which load times become wildly 
unpredictable or pages may periodically fail to load) and corresponding 
requests per unit time
- Requests per unit time at which load timeouts first occur (you might set a 
timeout that is average for browsers).
- Requests per unit time at which connections are first denied.

Alternatively, you can decide what your specific needs are and merely run tests 
at those limits.  This doesn't tell you your peak capacity, but it does give 
you confidence that you can do what you want.

It's pretty easy to design a test client that you can run by hand to figure out 
these numbers, but ideally you would automate the whole process so you can 
repeat the test multiple times in multiple configurations and have a benchmark 
suite that others can use for comparison.

Actually, this project interests me and I'd be willing to help with it.  I'd 
like to see a portable scalability test that we can use for benchmarking 
DokuWiki under various scenarios, including richer page sets.

~joe
--
DokuWiki mailing list - more info at
http://wiki.splitbrain.org/wiki:mailinglist

Other related posts: