Latency is a powerfully factor with all user applications. Users always want more responsive systems, and quickly become annoyed with seemingly small delays as they occur upon every request. This can often mean the difference between converting a new visitor to them leaving after only accessing a few pages that have loaded at a sub-optimal speed. “Man, if it takes 3 seconds just to open a product page, it is going to take me all night to try and customize this product!”
We can all understand the requirement of low latency systems, particularly in customer facing systems, but what is an acceptable range and how do we not drop the ball when the golden age arrives? How do we ensure what works today to give us an acceptable latency measures for that fantasized point in time when we have more customers than we know what to do with? Now, maybe that time is far far in the future as a typical scale up solution works marvelously for 90% of companies, but if there is even a remote possibility of out growing traditional normalized database systems it is irresponsible to try and cope with them as architectural decisions.
Even more importantly, what happens to a user when a system becomes unavailable? Well, if that user was a fresh lead, good luck seeing them again. High Availability (HA) is a vastly important concept in any consumer facing application, even more important than latency if that is even conceivable. Our customers are narcissistic, impatient, and more importantly spoiled. Why? Because companies want their business and can afford to train them to be this way. Examples like Amazon over sell the problem, but even at more modest e-commerce shops cannot ignore the problem and potential profit losses. If your company is based on repeat business or continued engagement like Facebook or Digg you better care just as much as a company that can directly attribute this down-time to dollars (and they do).
What does all this have to do with noSQL databases like Casandra, MongoDB, and Redis? You cannot plan your system architectures on traditional boxed solutions without considering your user’s needs now and far far into the future. Perhaps you’ll be fine with a traditional database system that offers consistency and availability that you maybe able to scale in a traditional master slave paradigm. What if your transactions really have no reason to be transactions, and perhaps writes don’t need to be consistency verified? Why would you require your systems team to purchase monstrous systems so your database system can do a few thousand JOINs per second when you could architect your product catalog to push to a Casandra (Dynamo backed) no SQL database system that provides instant support for highly scalable systems or a denormalized document based MongoDB?
I’m not saying these new flavor of the month database systems should replace all of your old RDBMS, but many of them do make a lot of sense for many applications designed for the Internet of tomorrow. Knowing these systems is vital to making quality architectural decisions around your companies customer driven applications, and surveying the landscape is the bare minimum to being a responsible web architect.

Recent Comments