PHP/FCGI balancing

Maxim Dounin mdounin at
Tue Jun 17 20:57:41 MSD 2008


On Tue, Jun 17, 2008 at 04:36:04PM +0100, Igor Clark wrote:

> Hi there, two related questions, one quickie, one more involved :-)
> 1) Is it possible to specify weighting between upstream FastCGI servers? 
> If not in nginx config, then using some clever scheme?

> 2) Your thoughts on the following situation would be welcome!
> Our application is 80% Flash with many AMF callbacks to dynamic PHP/ 
> MySQL services. A majority of the actual bandwidth going out will be on 
> SWFs and images.
> Today we're pushing 20mbps in the pre-launch sign-up phase; the main  
> campaign doesn't launch till next week.
> We have 4 servers, quad-core Xeon 2.33ghz. 2 have 8GB RAM, the other 2  
> have 4GB.
> The current set up is thus:
> - one 8GB is nginx, front-end reverse proxy and static web server;
> - one of the 4GB boxes is php/fcgi;
> - the other 4GB box is mysql.
> The second 8GB has only just become available as it was being used on  
> another, now closed, project.
> The 3 deployed boxes are all handling the current traffic without  
> breaking a sweat, low loads, high idle CPU percentages, plenty of RAM  
> free, no waiting on IO. However of course as the new gear has become  
> available and will be sitting around doing nothing otherwise, I want to 
> use it to best effect in next week's campaign.
> We have a hardware load balancer available, weighted round robin, in  
> front of the 2 8GB boxes.
> I'm considering whether to:
> - leave all web serving to 8GB box 1, and dedicate 8GB box 2 to PHP  
> application serving, or
> - load-balance web traffic between both 8GB boxes, say 70% to existing  
> box and 30% to new box, and run PHP app server on new 8GB box.
> As per Q1, I'd like to be able to specify some weighting on the  
> fastcgi-->PHP traffic so that I could tune which box processes what a  
> bit more finely, but from what I can see in the nginx documentation,  
> this isn't possible.
> The latter way seems to spread the load, but the former way dedicates  
> machines to doing one thing at a time. Given that the nginx box is  
> currently running at loads of less than 0.1 and has over 2GB of RAM  
> free, perhaps the extra nginx muscle isn't necessary.
> There is a bit of processing overhead on the PHP side, as the AMF codec 
> processing has to be done in PHP (the PHP AMF C extension has a bug with 
> AMF3 which breaks our app) - although we're using APC, which seems to 
> speed things up nicely.
> What do you think would be most sensible?

It's unlikely that nginx box will be bottleneck unless you have IO-bound 
workload (i.e. many static files).  Looks like another PHP server 
whould be better choice.

Maxim Dounin

> Many thanks for any thoughts.
> Igor
> --
> Igor Clark ? POKE ? 10 Redchurch Street ? E2 7DD ? +44 (0)20 7749 5355 ? 

More information about the nginx mailing list