Load-balancing software and/or hardware spreads requests across multiple front-end servers, and includes failure detection for frontend servers. Several different load-balancing techniques exist, with different levels of complexity: random, adaptive, stateful, adaptive and stateful.
Session management stores state information in clients and a backend server, not in the frontend servers. Client state can easily be distributed across multiple state servers. Typically session information is not highly confidential and may be stored inside the DMZ.
SSL sessions are segregated from regular HTTP sessions. SSL servers
have hardware for encryption.
Allocating data to partitions is difficult. The objective is to avoid hot spots. We need tools to split and merge partitions. A large multiprocessor system can replace multiple partitions, but is usually more expensive.
The most complex sites use other applications, encapsulated as objects,
e.g. Enterprise Java beans. Other applications include legacy databases,
existing enterprise software e.g. for manufacturing planning, external
ad servers.
There are two main types of app server: page-based and component-based. PHP is page-based, while EJB (Enterprise Java Beans) is the most common among component-based. For an overview see http://www.zdnet.com/filters/printerfriendly/0,6061,2713465-50,00.html
Code for generating displays is mixed with HTML output code. This reduces modularity and makes developing multiple alternative interfaces difficult. On the other hand prototyping is easy.
ColdFusion has fail-over and load-balancing between servers. PHP version 4 and ASP.NET have compilation to byte-code. Other performance features include caching. Early implementations had poor performance and scalability, but the latest versions can be very good.
Typically, page-based app servers do not provide script-level multithreading,
or Java support. They typically do have the ability to invoke other
servers, e.g. via CORBA (common object request broker architecture), Microsoft
COM (common object model), SOAP (simple object access protocol), and
HTTP.
The platforms provide
New modules of code can encapsulate existing databases and other servers. Different modules can provide different displays. EJBs have three main types: session beans, entity beans, and message-driven beans.
The importance of Java may decline because Sun and Microsoft both support SOAP and XML.
The scalability of component-based servers is not as good as suggested
by the hype from vendors. One concrete case study reports 4000 users
at 177 pages per second on six servers: two web, three application, one
Oracle. Extreme scalability requires custom architecture and software,
and traditional computer science design principles.