Some thoughts for setting up a high performance Drupal stack:
- High availability for an estimated 4,800 users.
- Traffic will be modest with heavy spikes during certain times.
- Traffic will be mainly authenticated users.
- Needs to be 100% reliable, especially during the spikes.
- One server dedicated to MySQL.
- EC2 instance running MySQL and not much else? The price for this will be cheaper, but will have the extra overhead of patching the OS, etc.
- Amazon RDS (http://aws.amazon.com/rds/)? Will start with the small DB Instance (1.7 GB RAM, 1 Processor, 64-Bit). Price is 1.5 cents higher then the prior option, but will have less overhead/headache in maintaining the system.
- One server dedicated to Apache/PHP. (Small EBS Booted EC2 instance, 1.7GB RAM, 1 Processor, 160GB local storage, Snapshots twice a day.)
- Install APC (for caching the PHP)
- Install Varnish (for anonymous users)
- Install Memcache
- Utilize ESI (edge side includes) for authenticated user caching with Varnish.
- File handling
- Upload any user supplied files/pdf/images to Amazon S3 (http://drupal.org/project/AmazonS3)
Using the Amazon architecture allows us to easily scale up (or down) the resources by stopping the instance, changing the hardware type, restarting the instances and re-mapping the Elastic IP address. As the load grows, we can ramp up the processing power of the small instances incrementally to handle the load.