Picking a Node
Im looking at running a website that gets on average 700,000 page impressions a month. The website is running wordpress with super cache installed so its not constantly accessing the mysql database. Currently its being hosted by webfaction. They've been amazing, but I'm running into problems as the site grows. To upgrade to something that would run the site would cost around $25/mo, now that might be cheaper than what I might need here but how long will that last? That upgrade would be on the brink of another upgrade within a few months.
8 Replies
@tperson:
Im looking at running a website that gets on average 700,000 page impressions a month. The website is running wordpress with super cache installed so its not constantly accessing the mysql database.
That's a hit every 4 seconds, and is far from demanding. How much memory is the whole affair using? Also, are you running Apache?
There's no real "best answer," it's in how well you know your load. I'd consider running the database on a separate machine from your Web server for scalability, because Linode has good private IP support. I don't see any reason why you wouldn't be able to get that in a 540 if it's configured right – and sadly, with Wordpress, that's an inexact science. Moving away from Apache would help you here.
Look into lighttpd or nginx, find some rewrite rules for those web servers, and run PHP as a FastCGI process with an opcode cacher such as APC or XCache. Also tune MySQL if you can. Tweaking the memory usage just a little bit can have a dramatic effect.
I've been running a custom app which is a lot more complex than Wordpress and which doesn't use anything like Super Cache. It's sitting on a Linode 540, with lighttpd + FastCGI + MySQL (MyISAM). About the same amount of pageviews as you said, maybe with a dozen times more DB activity because of lack of caching. Still got plenty of room to spare.
pound
Get your Apache daemon, running your dynamic code, to listen on localhost port 10000. Then have your lightweight webserver listen on localhost port 10001.
You configure pound to listen to the world on port 80, and basically tell it: "any URL that ends with .pl goes to localhost:10000, otherwise localhost:10001" or similar.
This can also be used, for example, to have a single Linode distribute load across several.
@Xan:
Somewhat tangentially…
You can pick your friends, and you can pick your nodes, but you can't pick your friends nodes.
James
@jed:
That's a hit every 4 seconds, and is far from demanding.
Unfortunately I doubt if visitors hit the site with such regularity.