|
Category
|
Threats
|
|
Caching
|
- Round trips to data store for every single user request, increased load on the data store
- Increased client response time, reduced throughput, and increased server resource utilization
- Increased memory consumption, resulting in reduced performance, cache misses, and increased data store access
- Frequently changing data requires frequent expiration of cache, resulting in excess usage of CPU, memory, and network resources
- With inappropriate expiration policies or scavenging mechanisms, your application serves stale data
- This means that the cache in the servers in the farm is not the same and can lead to improper functional behavior of the application.
|
|
Communication
|
- Requires multiple round trips to perform a single operation
- By sending more data than is required, you increase serialization overhead and network latency
- Boundary costs include security checks, thread switches, and serialization
|
|
Concurrency
|
- Stalls the application, and reduces response time and throughput
- Stalls the application, and leads to queued requests and timeouts
- Additional processor and memory overhead due to context switching and thread management overhead
- Causes increased contention and reduced concurrency
- Poor choice of isolation levels results in contention, long wait time, timeouts, and deadlocks
|
|
Coupling and Cohesion
|
- Mixing functionally different logic (such as presentation and business) without clear, logical partitioning limits scalability options
- Chatty interfaces lead to multiple round trips
|
|
Data Access
|
- Increased database server processing
- Reduced throughput
- Increased network bandwidth consumption
- Delayed response times
- Increased client and server load
- Increased garbage collection overhead
- Increased processing effort required
- Inefficient queries or fetching all the data to display a portion is an unnecessary cost, in terms of server resources and performance
- Creates unnecessary load on the database server
- Failure to meet performance objectives and exceeding budget allocations
|
|
Data Structures / Algorithms
|
- Reduced efficiency; overly complex code
- Reduced efficiency; overly complex code
- Passing value type to reference type causing boxing and unboxingCaching Decide overhead, causing performance hit
- Complete scan of all the content in the data structure, resulting in slow performance
- Undetected bottlenecks due to inefficient code.
|
|
Exception Management
|
- Round trips to servers and expensive calls
- Expensive compared to returning enumeration or Boolean values
- Increased inefficiency
- Adds to performance overhead and can conceal information unnecessarily
|
|
Resource Management
|
- Can result in creating many instances of the resources along with its connection overhead
- Increase in overhead cost affects the response time of the application; Not releasing (or delaying the release of) shared resources, such as connections, leads to resource drain on the server and limits scalability
- Retrieving large amounts of data from the resource increases the time taken to service the request, as well as network latency
- This should be avoided, especially on low bandwidth access, because it affects response time
- Increase in time spent on the server also affects response time as concurrent users increase
- Leads to resource shortages and increased memory consumption; both of these affect scalability
- Large numbers of clients can cause resource starvation and overload the server.
|
|
State Management
|
- Holds server resources and can cause server affinity, which reduces scalability options
- Limits scalability due to server affinity
- Increased server resource utilization
- Limited server scalability
- In-process and local state stored on the Web server limits the ability of the Web application to run in a Web farm. Large amounts of state maintained in memory also create memory pressure on the server
- Increased server resource utilization, and increased time for state storage and retrieval
- Inappropriate timeout values result in sessions consuming and holding server resources for longer than necessary.
|