Oracle's Cameron Purdy Looks at 10 Patterns for Scaling Out

Oracle's Cameron Purdy recently presented on the topic of scalability at JavaOne 2008. The talk did not focus on specific Java libraries as do many talks at JavaOne. Instead general principles of architecture and design were reviewed from a pragmatic common sense angle. In general Purdy broke the problem down into 10 steps:

It was noted that scalability does not speed up an application. A scalable system will always be slower than a single user system. Give the recent debate over Twitter's scalability using Ruby it was also interesting to see the point that "Architecture trumps technology". He comically noted that "even Windows could be scaled". Purdy did say that legitimate technology concerns could include unpredictable scheduling of GC, lack of control over thread scheduling, and lack of asynchronous I/O.

Purdy went on to state that the challenge of creating a scalable stateful system is to achieve availability, reliability, scalability, and performance while having a system that is manageable and serviceable. At this point the presentation focused on the five patterns of stateful scale-out:

Routing

Partitioning

Replication (Availability)

Coordination

Messaging

Reliable routing was described as the the fundamental enabler of stateful scale-out providing support for partitioning and replication. The final and most important topic covered was simplification. Purdy noted that complexity is the enemy of reliability. Complex systems should be able to be modeled as finite state architectures. "if you can't show it working on a white board, you can be certain it won't work on production".