Question

I'm having some difficulties thinking about a good way to assess the scalability of my school project. The assignment is simply put a twitter-service. Very bare bones. The main goal is to make it as scalable as possible. However, it's equally important to know how and why the assignment would scale. So the point is not really to create a very scalable project, but mainly to create a few different architectures for the server and see which one outperforms which one and why.

So so far I have the basic server architecture like this: * 1 main process which holds the data * 1 unique process server-side per user

A user sends messages to his own server-side process, which then simply delegates those messages to the central process.

To test this I would spawn 1 or more processes which would act as clients. I would spam the server with tweets and then assess how well it can withstand a certain load.

Now, to assess the scalability I came up with following metrics:

First off, a process is being a bottleneck if it's message queue is piling up. So, I would store the queuelength every time a tweet is processed (or every N tweets) and in the end calculate the average. If I run it on more cores and the average queue length goes down, it scales better.

Second, if I create N users to spam the server (on N processes or less) I simply time how long it takes for the server to process all these tweets.

Is there a better way to do this? I can't stop thinking that there should be better metrics..

Edt:

So far I have tried fprof and eprof. These tools however, show me how much time is spent in certain methods. While this is a good indicator where I can improve my code, it's not really a good indicator for scalability. It would be better if it would for example show the time spent per process.

Was it helpful?

Solution

Look at percept and percept2 if you are really interested in this.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top