Software Systems Architecture

The Performance and Scalability Perspective

This perspective addresses two related quality properties for large information systems: performance and scalability. These properties are important because, in large systems, they can cause more unexpected, complex, and expensive problems late in the system lifecycle than most of the other properties combined.

Intel chief Gordon Moore observed in 1965 that the processing power of computer chips doubled approximately every eighteen to twenty-four months (this became known as “Moore’s Law”). This remark seems to apply as much today as it did in 1965, so one would hope that by now performance and scalability would have receded as major concerns for most computer systems. Unfortunately, this isn’t the case, for a couple of reasons.

The most fundamental reason for performance concerns is that the tasks we set our systems to perform have become much more complex over time, and the demands we make on the systems (in terms of the complexity, number of transactions, number of users, and so on) have also grown in ways that would have been unimaginable in the 1960s.

To make matters worse, the performance of a computer system depends on much more than the raw processing power of its hardware. The way that hardware is configured, the way resources are allocated and managed, and the way the software is written can have significant impacts (good or bad) on the system’s ability to meet its performance goals. The simple fact is that we haven’t become much better at managing the performance of our systems since the 1960s – and we’ve actually gotten worse in some ways, such as our lack of attention to runtime memory use.

The scalability property of a system is closely related to performance, but rather than considering how quickly the system performs its current workload, scalability focuses on the predictability of the system’s performance as the workload increases.

Desired Quality The ability of the system to predictably execute within its mandated performance profile and to handle increased processing volumes in the future if required
Applicability Any system with complex, unclear, or ambitious performance requirements; systems whose architecture includes elements whose performance is unknown; and systems where future expansion is likely to be significant
Concerns
  • response time
  • throughput
  • scalability
  • predictability
  • hardware resource requirements
  • peak load behavior
Activities
  • capture the performance requirements
  • create the performance models
  • analyze the performance models
  • conduct practical testing
  • assess against the requirements
  • rework the architecture
Tactics
  • optimize repeated processing
  • reduce contention via replication
  • prioritize processing
  • consolidate related workload
  • distribute processing over time
  • minimize the use of shared resources
  • reuse resources and results
  • partition and parallelize
  • scale up or scale out
  • degrade gracefully
  • use asynchronous processing
  • relax transactional consistency
  • make design compromises
Pitfalls
  • imprecise performance and scalability goals
  • unrealistic models
  • use of simple measures for complex cases
  • inappropriate partitioning
  • invalid environment and platform assumptions
  • too much indirection
  • concurrency-related contention
  • database contention
  • transaction overhead
  • careless allocation of resources
  • disregard for network and in-process invocation differences

← The Location Perspective     |     Perspectives    |     The Regulation Perspective →