The main criteria for web server architectures are the extent of I/O operations, the necessity to handle state, and the required robustness for connection concurrency. We have seen that it is advisable to consider I/O multiplexing strategies and cooperative scheduling for the web servers of our architecture.
For concurrency concepts as part of application servers, it is important to identify the actual concurrency requirements. Reducing the latency of requests requires parallelization strategies of the request logic. Coordinating different pending requests and sharing highly fluctuating and variable state inside application servers can either be handled using external backend components or high-level concurrency abstractions inside the application servers.
The choice for the appropriate storage backend depends on actual data model, the scalability requirements, and the consistency requirements of the application. Furthermore, polyglot persistence should be considered for large-scale web applications.