A single architecture must scale to support 1 customer on a dedicated node (1 or more servers) and several hundred customers on a load-balanced cluster of servers.
The database must be accessed only by the application core servers, never by the web servers.
One architecture must fit every client. Because this will never happen, the architecture must be extremely flexible and allow customization at every level through method overrides and subclassing.
System functions include:
Object Oriented content management system for websites.
File management, supporting SSL, download logging, permission-based access (see below). Should be nearly as fast as serving static files.
User-, Group- and Role-based permissions to view and modify data within the system.
Product catalog management, including products, categories, attributes, shipping rates, taxes, etc.
Order reporting.
Extensible shopping cart system to be included into websites.
Each server must run the same version of the system code at all times. Object-definition conflicts could cause loss of data integrity, so an automated software distribution system is very important.
The system must support remote administration, possibly via a web-based dashboard.
To scale nicely, each piece (GUI, Core, DB, etc) must function well alone or as part of a load-balanced or clustered group. For example, we might have 1 Core server, or 10 Core servers, but they shouldn't care.