Server Bundle Scaling
Scaling definition
The important part of "enterprise scale" or "Internet scale" server deployments is the ability to spread the transaction load across multiple machines. No matter how big a server you can spec, there exists a transaction volume capable of crushing it. A best-practice solution solution will be able to throw hardware at the problem to allow for very large deployments.
Scaling requirements
In order to scale the server bundle, it must be possible to have multiple instances.
Architectural options
- All-in-one: Single box running SSL, Tomcat+Cosmo, and the database(1-8 CPUs, 100Gb-4Tb disk)
- Split Database: Box 1 running SSL, Tomcat+Cosmo, Box 2 running database (MySQL?/Postgres/etc)
- Split SSL, Database: Box 1 doing SSL+mod_proxy/mod_jk, Box 2 running Tomcat+Cosmo, Box 3 running Database.
- Split SSL, App Servers, Database: Box 1 doing SSL+mod_proxy/mod_balancer mod_jk, Box 2 running Database, Box 3-N running Tomcat+Cosmo (not tested yet)
Current best architectures
Until a single server bundle instance is able to be deployed across multiple distinct physical boxes with each box taking some of the transactional load, the server bundle will have practical limits to the largest instance that can be deployed.
To deploy the largest instance currently possible, the following architectural components should be incorporated:
- SSL encryption should be offloaded to a separate, scalable layer of SSL decryption machines.
The most straightforward "big" instance looks something like this:
- 2x dual-core opteron or pentium cpu
- 8Gb ECC DDR memory
- 4x 400Gb SATA hard drives
- Redundant power supplies
The hub instance is currently running on a single box, with 8 cpu cores and 32GB RAM.