Non-functional requirements, i.e. the many software -ilities, are often neglected in the development of software systems. Even though they are a key factor in final user satisfaction and everybody acknowledges their importance, their prominence is usually downplayed. This book tries to fill this gap and it focuses on balancing the non-functional features of Internet-based software systems.
"Architecting Enterprise Solutions", following the so-called patterns movement, is organized around a set of patterns, which are classified into four groups:
1. Fundamental patterns describe the basic shape for Internet-based systems, why they tend to use application servers and why they recur to "specialist peripherals."
2. Performance, availability, and scalability involve some kind of redundancy (e.g. the performance-related patterns involve tiers with redundant elements, load balancing, data replication, and effective resource management, such as pooling and caching).
3. Control patterns deal with system manageability and security. Status reporting, monitoring, alerting, logging and dynamic configuration are key for manageability, while the proper use of demilitarized zones, firewalls, intrusion detection systems, encryption, and public key infrastructure are fundamental for security.
4. Finally, evolution patterns address maintainability, flexibility, portability, and migration. Among other things, here you will find information on virtual platforms and staging environments.
A final section describes how the patterns can be applied in practice, illustrating how the patterns trade-offs can lead to different system configurations.
In summary, "Architecting Enterprise Solutions" collects the know-how of experienced system architects. It clearly shows how design decisions affect the non-functional characteristics of Internet-based systems and it does so without forgetting the cost implications of such decisions (something every architect on a tight budget will surely thank).
Disclaimer: If you are just looking for solutions to the problems you face using a particular programming language, framework or platform, you should look elsewhere. If you would like to delve into the rationale behind key design decisions in Internet-based systems (beyond the use of particular technologies), this might be a good place to start.