Fair enough.
Requirements include, but are not limited to:
- 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.