Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

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

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:

10 - Understanding the Problem
9 - Define the Requirements
8 - Architecture Trumps Technology
7 - Understand the Basics
6 - Visualize the Networks
5 - Visualize the Design
4a - Plan for Overload
4b - Partition for Scalability
3a - Plan for Failure
3b - Replicate for Availability
2 - Tier Where It Makes Sense
1 - Simplify
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".

Rate this Article