Scalable Internet Architecture

This is not strictly PHP, but it is about scalability, and every PHP programmer *ought* to be thinking about this stuff.

Theo Schlossnagle of OmniTI (where I work as a web architect) has this slide deck posted about Scalable Internet Architecture:

via http://www.slideshare.net/postwait/scalable-internet-architecture

(Aside: I joke that at OmniTI, my reporting chain looks like this: from God, to Theo, to my director, to me, to my subordinates.)

Developers (PHP and otherwise) should read the whole thing.

Some highlights, with comment and paraphrasing from me:

  • Slide 7: “Lack of awareness of the other disciplines is bad.” Developers need to be aware of the advantages and constraints presented by everyone else: designers, DBAs, sys admins, network engineers, etc. Not being aware means making your own work more difficult (bad) or their work more difficult (also bad, especially in teams).
  • Slide 14: Craftsmanship and discipline: learn it, love it, live it. It’s very difficult to be consistently attentive; don’t let the fact that you cannot *always* be attentive stop you from *always trying* to be attentive.
  • Slide 29: Know the difference between “premature optimization” and “necessary optimization”. This is hard.
  • Slide 48: The networking architecture is critical to scaling. Everybody forgets about the network because it’s “just there” (until it’s not).
  • Slide 59: “Scaling is hard, performance is easier. Extremely high-performance systems tend to be easier to scale, because they don’t have to SCALE as much.”
  • Slide 63: Combine this with slide 59, and you have the reason why you need to know your application responsiveness (i.e., benchmarks). As part of this you need to know the overhead imposed by your framework of choice, so that you know exactly how far you can optimize your application. This will help you decide where to spend your limited resources: on development to improve application performance, on hardware to improve system performance, or on adding systems for horizontal scaling.