In an effort to pick up some more cloud knowledge, I recently volunteered to review Resilience and Reliability on AWS as part of the O'Reilly Blogger Review Program.
This book is the sequel to Programming Amazon EC2 by the same authors. It dives a little deeper into the infrastructure decisions that must be made when architecting an Amazon Web Services (AWS) application for maximum performance under all types of loads and catastrophic failures. The first couple of chapters are an introduction to AWS and a list of top ten "survival" tips for building AWS applications for resilience and reliability. Subsequent chapters explore how to integrate specific open source tools such as Postgres and MongoDB with AWS to maximize scalability, redundancy, and load balancing. Principles that drive the Infrastructure as a Service (IaaS) model.
The topic is an interesting and timely one. There are lots of books out now on cloud technologies, but this one has a narrow focus that could be of interest to someone building a large scale application using AWS that has high availability and scalability requirements. However, the authors didn't focus on that audience, but instead addressed a narrow topic at a broad audience. The result is schizophrenic.
The beginning chapters are almost too simplistic for an audience interested in an advanced topic such as this, and the subsequent chapters are too cryptic for those without an extensive prior knowledge of the subject to understand. For example, the chapter on top ten "survival" tips includes such gems as "embrace change" and "everything will break." Those tips aren't unique to AWS at all. Any developer who's been around the block enough to be interested in developing large scale applications using AWS should have plenty of scars from learning those lessons on more traditional development projects. On the other hand, the chapters that are solution specific assume too much knowledge of the subject. There are pages of Python code for a number of neat integration tricks, but very little explanation about how the code works. If a developer is familiar enough with the technology to read and understand a Python script for complex AWS integration tasks without any accompanying documentation, they don't need to be reading this book. The entire book is further confused by an awkward writing style. In some places it's written in first person singular and in others, first person plural. Transition and tone are all over the map making a complex subject even harder to follow.
Despite its flaws, this book does fill a niche. The information it contains could help to make better informed architecture decisions. For that systems architect, I would recommend this book with the caveat that you should skip the first few chapters and be prepared to read each subsequent chapter twice to understand it.