Scalable Internet Architectures, part 1

|

A few interesting points in chapter 1:


  • The only "true" scalability is horizontal, meaning that system capacity is increased by adding more of the same hardware or software. (Scale out, not up)
  • Scaling "vertically" is just adding horsepower (storage, CPU, etc) to an existing machine.
  • One example where horizontal scaling is difficult is large ACID-compliant databases. The current practice to scale such a database is to place the service on a very powerful machine.
  • Services such as DNS, FTP, and static web content are horizontally scalable by nature.
  • Scaling down may be necessary at times: Consider a startup whose infrastructure needs to be scaled back to reduce costs.

Key attributes of an architect:


  • Seeing beyond business requirements and predicting future demands.
  • Experience
Elements to balance in architecture:
  • Cost
  • Complexity
  • Maintainability
  • Implementation latency


Chapter 2, Principles for Avoiding Failure...



The author suggests planning that a system will run on "yesterday's" commodity hardware. If your application needs the latest and greatest hardware, you are veering towards vertical scaling.



In Code Complete, McConnell describes the architect's key role in software construction as managing complexity. In this book, the author identifies "uncontrolled change" as the biggest enemy of software systems. He describes two opposing forces in software projects:


  • The business, who wants technical innovation "on-demand" (interestingly, he notes that this is indeed available in the hardware world, but not in the realm of application development, architecture, and adaptation of business rules).
  • The technology side, who want complete requirements for everything upfront.
Three "low-hanging fruits" for controlling change in projects:
  • Source control
  • Having a plan for each of the following (assuming configurations A and B):
    • Push A to B
    • Revert B to A
    • Bare-metal restore of A
    • Testing A to B push and B to A revert
  • Unit testing, preferably across the entire system


As in the conclusion of chapter 1, the ultimate asset is "Good Design" which is attained by an experienced architect who can predict the future :)