I recently had a chance to spend time with a major enterprise software vendor's R&D leaders. They have been closely watching Terracotta and our space. The VP of Engineering for this company summarized the space by saying, "Terracotta's competition leaves correctness as an exercise for the reader."
What did he mean?
I think it comes down to scalability versus correctness. Fundamentally, we cannot sell "Enterprise Software" until we have something with which a developer or operator cannot shoot themselves--we call this "do no harm." But, performance vendors offer up tools that enable asynchronicity, and potential race conditions. Do correctness and scalability, therefore, conflict? Is it just too expensive to get a clustered lock from a network resource and should I thus allow "last one in wins" semantics? Well, the answer is mostly no. I should not dictate such semantics. I should not offer up a tool for scalability that focuses on "fast" in exchange for "right."
In this article I will explore the shortcomings of a speed-centric API-based approach and offer up an explanation of what Terracotta does instead that I think is both more correct and, thus, useful in your day-to-day task of building highly reliable and scalable business applications. I start with some assertions that we believe are fundamental to helping you get your job done. In a follow up blog entry, I will then add some color through retelling a few of our experiences out in the market to help validate my claim that we can provide correctness without sacrificing scalability.
My assertions
- API-based caching helps with only part of the problem
- APIs are unnecessary AND harmful because they add complexity (much like memory management used to be an API but has been factored away)
- API-based caches violate basic engineering principles: tuning during design is just too hard
- API-based caches do not address the complexity introduced by caching the database