I’ve been the sysadmin for a Rails site hosted on four dedicated
servers. One front-end which serves static files and dispatches dynamic
requests to two application servers. And one DB server.
This split architecture has led to some problems over time, such as
latency, NFS errors and definitely adds complexity. I do not even
benefit from redundancy, beside the app servers.
I’m pretty sure the site would run OK on a single powerful server
instead of these four entry-level servers. I also want to keep it
scalable, this site should go up in frequency very soon. I’m currently
studying two possibilities: adding more entry-level servers or replacing
them all by one or two powerful servers.
In brief, do you favor powerful servers or lots of servers ? What do you
think ?
Typically, we horizontally scale the web server (more low-end
machines) and vertically scale the apps and database servers (high end
machines). Then redundancy (high availability, disaster recovery) will
dictate how many app servers and database servers will be required in
your architecture.
This is based on my experience with a fairly high volume web site
running on J2EE.
Since this is somewhat of an opinion-based topic, I’ll speak from my
own experience. Downtime where I am at is greatly frowned upon -
because of this I also favor using redundant, smaller servers.
In addition to reducing downtime, this will help you if you need added
capacity - you’ve already forced yourself to think about scaling and
as a result can just tack on added machines as needed.
The two most difficult areas to scale (in my opinion) are the database
and file storage. If you can solve these two issues then I see no
reason why smaller servers wouldn’t suffice and in fact be beneficial.
I have had success running a centralized NFS store over a backend
gigabit network on a RAID5 server w/ high speed SCSI disks. The
database replication I have been toying with has been MySQL’s
clustering.