I am in Georgia, on the dreaded Chatooga, made famous by the movie Deliver-
ance. I've aspired to one day go on a pilgrimage to the Chatooga from before I
even started kayaking. But as we start our run I am on the verge of changing my
mind. The river is stunningly beautiful, radiating power and a sense of awe at
every turn. In spots like Seven-Foot Falls, the river slams against undercut ledges
where the stream can pin and kill a boater. At Bull Sluice, jets of water are sucked
through a hole in the riverbed large enough to swallow a boater and his boat. The
water is then forced through an opening just a few inches across. Riverwide ter-
minal hydraulics, like Woodall Shoals, look benign but are traps for paddlers and
swimmers. By the time we reach the ominous Five Falls, I feel myself becoming
paralyzed with fear. The river drops rapidly over five waterfalls, with little recov-
ery time between them. Deep down I know I will always fear that mighty river.
This chapter will present a series of small antipatterns related to scalability.
We'll focus on refactored high-level designs for scalability. Scalability issues
require some coding finesse, but the larger examples to support them go
beyond the scope of this topic. Some good sources are Core J2EE Patterns:
Best Practices and Design Strategies; Concurrent Programming in Java:
Design Principles and Patterns ; and Java Performance and Scalability (see
We can use several different techniques to make a solution more scalable.
Many times, a faster, bigger box is a perfectly viable solution. Since many
mainframes now support open standards and can even run Linux, they can run
very large Internet applications with only mild rework. Because scaling in this
manner doesn't usually require as many advanced design considerations, this
chapter will instead focus on scaling through parallel design. We'll look at
antipatterns in the area of performance and scalability, with some related to
process and others related to programming.
Good topologies for performance
Internet topologies have varied dramatically, but they are starting to settle on
slight variations of a common design. Many performance experts prefer a
topology like the one in figure 10.1. In this configuration, all software on the
web and application servers is redundant to achieve availability and better per-
formance. The user's request comes through the Internet and goes through a
firewall and a sprayer. Called edge services , these technologies have seen signifi-
cant advances over the last decade.